R-자유도에서 PROC Mixed과 lme / lmer의 차이점


12

참고 :이 질문은 법적 이유로 인해 이전 질문을 삭제해야했기 때문에 다시 게시되었습니다.


SAS의 PROC MIXED를 R lmenlme패키지 기능과 비교하는 동안 다소 혼란스러운 차이점을 발견했습니다. 구체적으로는, 다른 시험에서 자유도간에 상이 PROC MIXED하고 lme, 그리고 왜 생각해.

다음 데이터 세트에서 시작하십시오 (아래 제공된 R 코드).

  • ind : 측정 대상을 나타내는 계수
  • fac : 측정되는 기관
  • trt : 치료를 나타내는 인자
  • y : 일부 연속 반응 변수

아이디어는 다음과 같은 간단한 모델을 작성하는 것입니다.

y ~ trt + (ind): ind임의의 요인으로 y ~ trt + (fac(ind)): fac중첩 ind임의의 요인으로

및의 y모든 조합에 대해 1 개의 값만 있기 때문에 마지막 모델은 특이점을 유발해야합니다 .indfac

첫 번째 모델

SAS에서는 다음 모델을 작성합니다.

PROC MIXED data=Data;
    CLASS ind fac trt;
    MODEL y = trt /s;
    RANDOM ind /s;
run;

튜토리얼에 따르면 R을 사용하는 동일한 모델은 다음과 nlme같아야합니다.

> require(nlme)
> options(contrasts=c(factor="contr.SAS",ordered="contr.poly"))
> m2<-lme(y~trt,random=~1|ind,data=Data)

두 모델 모두 계수와 SE에 대해 동일한 추정치를 제공하지만의 효과에 대해 F 검정을 수행 할 때 trt다른 자유도를 사용합니다.

SAS : 
Type 3 Tests of Fixed Effects 
Effect Num DF Den DF     F  Value Pr > F 
trt         1      8  0.89        0.3724 

R : 
> anova(m2)
            numDF denDF  F-value p-value
(Intercept)     1     8 70.96836  <.0001
trt             1     6  0.89272  0.3812

질문 1 : 두 테스트의 차이점은 무엇입니까? 둘 다 REML을 사용하여 장착되며 동일한 대비를 사용합니다.

참고 : DDFM = 옵션에 대해 다른 값을 시도했습니다 (BETWITHIN 포함, 이론적으로 lme와 동일한 결과를 제공해야 함)

두 번째 모델

SAS에서 :

PROC MIXED data=Data;
    CLASS ind fac trt;
    MODEL y = trt /s;
    RANDOM fac(ind) /s;
run;

R에서 동등한 모델은 다음과 같아야합니다.

> m4<-lme(y~trt,random=~1|ind/fac,data=Data)

이 경우 몇 가지 매우 이상한 차이점이 있습니다.

  • R은 불평없이 맞습니다 .SAS는 최종 헤센이 양의 명확한 것이 아니라고 지적합니다 (나를 놀라게하지는 않습니다)
  • 계수의 SE가 다릅니다 (SAS에서는 더 작음)
  • 다시 F 테스트는 다른 양의 DF를 사용했습니다 (사실 SAS의 양 = 0).

SAS 출력 :

Effect     trt Estimate Std Error  DF t Value Pr > |t| 
Intercept        0.8863    0.1192  14    7.43 <.0001 
trt       Cont  -0.1788    0.1686   0   -1.06 . 

R 출력 :

> summary(m4)
...
Fixed effects: y ~ trt 
               Value Std.Error DF   t-value p-value
(Intercept)  0.88625 0.1337743  8  6.624963  0.0002
trtCont     -0.17875 0.1891855  6 -0.944840  0.3812
...

(이 경우 F 및 T 테스트는 동일하며 동일한 DF를 사용합니다.)

흥미롭게도 lme4R에서 사용할 때 모델은 맞지 않습니다.

> require(lme4)
> m4r <- lmer(y~trt+(1|ind/fac),data=Data)
Error in function (fr, FL, start, REML, verbose)  : 
  Number of levels of a grouping factor for the random effects
must be less than the number of observations

질문 2 : 중첩 요인이있는이 모델들 간의 차이점은 무엇입니까? 그것들이 올바르게 지정 되었으면, 어떻게 다른 결과가 나옵니까?


R에서 시뮬레이션 된 데이터 :

Data <- structure(list(y = c(1.05, 0.86, 1.02, 1.14, 0.68, 1.05, 0.22, 
1.07, 0.46, 0.65, 0.41, 0.82, 0.6, 0.49, 0.68, 1.55), ind = structure(c(1L, 
2L, 3L, 1L, 3L, 4L, 4L, 2L, 5L, 6L, 7L, 8L, 6L, 5L, 7L, 8L), .Label = c("1", 
"2", "3", "4", "5", "6", "7", "8"), class = "factor"), fac = structure(c(1L, 
1L, 1L, 2L, 2L, 1L, 2L, 2L, 2L, 1L, 1L, 1L, 2L, 1L, 2L, 2L), .Label = c("l", 
"r"), class = "factor"), trt = structure(c(2L, 2L, 2L, 2L, 2L, 
2L, 2L, 2L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L), .Label = c("Cont", 
"Treat"), class = "factor")), .Names = c("y", "ind", "fac", "trt"
), row.names = c(NA, -16L), class = "data.frame")

시뮬레이션 된 데이터 :

   y ind fac   trt
1.05   1   l Treat
0.86   2   l Treat
1.02   3   l Treat
1.14   1   r Treat
0.68   3   r Treat
1.05   4   l Treat
0.22   4   r Treat
1.07   2   r Treat
0.46   5   r  Cont
0.65   6   l  Cont
0.41   7   l  Cont
0.82   8   l  Cont
0.60   6   r  Cont
0.49   5   l  Cont
0.68   7   r  Cont
1.55   8   r  Cont

@Aaron :이 게시물에 포함 된 답변을 찾으십시오. 답변으로 복사하여 붙여 넣을 수 있으면 담당자에게 제공합니다. 매우 도움이되었으므로 교차 검증 된 상태로 유지하고 싶습니다. 그렇게하면 질문에서 답변이 삭제됩니다.
Joris Meys 2018 년

이 불행한 개정판을 잘 활용하여 팀이 원래 Q를 되살리려 고 노력하고 있으므로 원래 답변을 복원하고 여기에 병합 할 수있는 좋은 기회가 있습니다.

@ mbq : 여기에 사용하는 일부 데이터를 시뮬레이션하고 그에 따라 Aaron의 답변을 편집했지만 훌륭합니다. 다른 대답으로는 조금 더 복잡 할 것이지만 시도해 볼 수도 있습니다.
Joris Meys

아론의 대답은 엄청나게 좋은 것입니다. 나는 그들이 그것을보기를 바랍니다. 불행히도,이 스레드에 참여하지 않으면 @Aaron이 그에게 연락하지 않습니다.
Wayne

1
예, 이것은 좋은 대답이었습니다. 여기에 삭제 된 게시물에 대한 링크를 제공했습니다 : stats.stackexchange.com/questions/26556/… 현재 게시물에 링크를 추가하겠습니다.
Stéphane Laurent

답변:


11

첫 번째 질문에서 SAS에서 df를 찾는 기본 방법은 그리 똑똑하지 않습니다. 고정 효과를 구문 적으로 포함하는 임의 효과의 용어를 찾아서 사용합니다. 이 경우에서 trt찾을 수 ind없으므로 올바른 작업을 수행하지 않습니다. 나는 시도 BETWITHIN하지 않았고 세부 사항을 모르지만 Satterthwaite 옵션 ( satterth) 또는 ind*trt무작위 효과로 사용하면 올바른 결과를 얻을 수 있습니다.

PROC MIXED data=Data;
    CLASS ind fac trt;
    MODEL y = trt /s ddfm=satterth;
    RANDOM ind /s;
run;

PROC MIXED data=Data;
    CLASS ind fac trt;
    MODEL y = trt /s;
    RANDOM ind*trt /s;
run;

두 번째 질문에서 SAS 코드는 R 코드와 일치하지 않습니다. fac*indR 코드에는 ind및에 대한 용어가 있지만 에는에 대한 용어 만 있습니다 fac*ind. (이를 보려면 Variance Components 출력을 참조하십시오.) 이것을 추가하면 trtQ1 및 Q2 (0.1892)의 모든 모델에서 동일한 SE가 제공 됩니다.

아시다시피, fac*ind항에는 각 수준에 대한 관측치가 하나씩 있기 때문에 적합하지 않은 모형 입니다. 이는 fac*ind항이 분산이없는 SAS 출력에 반영됩니다 . 이것은 또한 lme4의 오류 메시지가 알려주는 것입니다. 오류의 원인은 모델에 오류 항을 두 가지 방법으로 포함 할 때 무언가 잘못 지정되었을 가능성이 높습니다. 흥미롭게도 nlme 모델에는 약간의 차이가 있습니다. fac*ind오류 항 외에 항에 대한 분산 항을 찾는 것이지만이 두 분산의 합은 항이없는 SAS 및 nlme의 오차 항과 같습니다 fac*ind. 그러나에 대한 SE 는 중첩 된 trt것과 동일하게 유지됩니다 (0.1892) trt.ind따라서 이러한 낮은 분산 항은 영향을 미치지 않습니다.

마지막으로,이 모델의 자유도에 대한 일반적인 참고 사항 : 모델이 적합한 후에 계산되므로 다른 프로그램이나 프로그램 옵션 간의 자유도 차이가 모델이 다르게 적합하다는 것을 의미하지는 않습니다. 이를 위해서는 고정 효과 모수와 공분산 모수 모두 모수의 추정치를 살펴 봐야합니다.

또한 주어진 자유 도로 t와 F 근사값을 사용하는 것은 상당히 논란의 여지가 있습니다. df를 근사화하는 몇 가지 방법이있을뿐 아니라 일부는 그렇게하는 것이 좋은 생각이 아니라고 생각합니다. 몇 가지 조언 :

  1. 모든 것이 균형을 이루는 경우 동의해야하는대로 최소 자승법과 결과를 비교하십시오. 그것이 균형에 가깝다면, 사용하고있는 것이 올바른 야구장에 있는지 확인할 수 있도록 스스로 계산하십시오 (균형 가정).

  2. 표본 크기가 크면 분포가 정규 및 카이 제곱에 가까워짐에 따라 자유도는 크게 중요하지 않습니다.

  3. Doug Bates의 추론 방법을 확인하십시오. 그의 오래된 방법은 MCMC 시뮬레이션을 기반으로합니다. 그의 새로운 방법은 가능성을 프로파일 링하는 것입니다.


실제로 좋은 대답이지만 , 가능성을 프로파일 링하면 MCMC 시뮬레이션 (유한 크기 보정 및 비 이차를 모두 처리)을 수행하는 것과 다른 질문 (프로파일이 비 이차적 인 분산 매개 변수에 대한 적절한 CI)이 해결된다고 생각 합니다. 나는 bootMer (parametric bootstrap)가 confint (profile (...))보다 mcmcsamp와 비슷하다고 생각합니다.
Ben Bolker

@ BenBolker : 물론입니다. 더그 베이츠는 지난 달 여기에서 연설을했고 가능성에 대한 프로파일 링에 대한 그의 아이디어에 대해 이야기했습니다. 그것이 지금까지 내가 아는 전부에 관한 것입니다.
Aaron
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.