lmer ()의 "모델 수렴에 실패했습니다"경고


21

다음 데이터 세트를 사용하여 사이트, 계절, 기간 및 상호 작용과 관련하여 응답 (효과)이 변경되는지 확인하고 싶었습니다. 통계에 관한 일부 온라인 포럼에서는 선형 혼합 효과 모델로 계속 진행할 것을 제안했지만 문제는 각 스테이션 내에서 복제가 무작위 화되므로 연속 시즌에 정확히 동일한 지점에서 샘플을 수집 할 기회가 거의 없다는 것입니다 (예 : 몬순 이후 s1의 repl-1은 몬순과 같지 않을 수 있습니다. 계절에 따라 동일한 대상을 반복적으로 측정하는 임상 시험 (피험자 내 설계)과는 다릅니다. 그러나 사이트와 시즌을 임의의 요소로 고려하여 다음 명령을 실행하고 경고 메시지를 받았습니다.

Warning messages:
1: In checkConv(attr(opt, "derivs"), optpar,ctrl=controlpar,ctrl=controlcheckConv, 
: unable to evaluate scaled gradient
2: In checkConv(attr(opt, "derivs"), optpar,ctrl=controlpar,ctrl=controlcheckConv, 
: Model failed to converge: degenerate Hessian with 1 negative eigenvalues

누구든지 문제를 해결하도록 도울 수 있습니까? 코드는 다음과 같습니다.

library(lme4)
read.table(textConnection("duration season  sites   effect
                          4d    mon s1  7305.91
                          4d    mon s2  856.297
                          4d    mon s3  649.93
                          4d    mon s1  10121.62
                          4d    mon s2  5137.85
                          4d    mon s3  3059.89
                          4d    mon s1  5384.3
                          4d    mon s2  5014.66
                          4d    mon s3  3378.15
                          4d    post    s1  6475.53
                          4d    post    s2  2923.15
                          4d    post    s3  554.05
                          4d    post    s1  7590.8
                          4d    post    s2  3888.01
                          4d    post    s3  600.07
                          4d    post    s1  6717.63
                          4d    post    s2  1542.93
                          4d    post    s3  1001.4
                          4d    pre s1  9290.84
                          4d    pre s2  2199.05
                          4d    pre s3  1149.99
                          4d    pre s1  5864.29
                          4d    pre s2  4847.92
                          4d    pre s3  4172.71
                          4d    pre s1  8419.88
                          4d    pre s2  685.18
                          4d    pre s3  4133.15
                          7d    mon s1  11129.86
                          7d    mon s2  1492.36
                          7d    mon s3  1375
                          7d    mon s1  10927.16
                          7d    mon s2  8131.14
                          7d    mon s3  9610.08
                          7d    mon s1  13732.55
                          7d    mon s2  13314.01
                          7d    mon s3  4075.65
                          7d    post    s1  11770.79
                          7d    post    s2  4254.88
                          7d    post    s3  753.2
                          7d    post    s1  11324.95
                          7d    post    s2  5133.76
                          7d    post    s3  2156.2
                          7d    post    s1  12103.76
                          7d    post    s2  3143.72
                          7d    post    s3  2603.23
                          7d    pre s1  13928.88
                          7d    pre s2  3208.28
                          7d    pre s3  8015.04
                          7d    pre s1  11851.47
                          7d    pre s2  6815.31
                          7d    pre s3  8478.77
                          7d    pre s1  13600.48
                          7d    pre s2  1219.46
                          7d    pre s3  6987.5
                          "),header=T)->dat1


m1 = lmer(effect ~ duration + (1+duration|sites) +(1+duration|season),
          data=dat1, REML=FALSE)

@Ian_Fin. 편집 해 주셔서 감사합니다. 사실, 위와 같이 r 코드를 포함하는 방법을 모릅니다
Syamkumar.

답변:


47

수렴 실패에 대한 경고를 수신하지 않는다는 의미에서 발생하는 문제를 "해결"하는 것은 간단합니다. 기본 BOBYQA 옵티 마이저를 사용하지 않고 이전 이전 버전 에서 기본적으로 사용 된 Nelder-Mead 최적화 루틴 을 사용하도록 선택합니다 1.0.x. 또는 패키지를 설치하여 L-BFGS-B 루틴을 optimx직접 또는 ( 버전 이전의 버전 과 동일 ) 할 수 있습니다. 예를 들면 다음과 같습니다.nlminblme41

m1 = lmer(effect~duration+(1+duration|sites)+(1+duration|season), 
          data = dat1, REML = FALSE, 
          control = lmerControl(optimizer ="Nelder_Mead")
library(optimx)
m1 = lmer(effect~duration+(1+duration|sites)+(1+duration|season), 
          data = dat1, REML = FALSE, 
          control = lmerControl(
                           optimizer ='optimx', optCtrl=list(method='L-BFGS-B')))
m1 = lmer(effect~duration+(1+duration|sites)+(1+duration|season), 
          data = dat1, REML = FALSE, 
          control = lmerControl(
                           optimizer ='optimx', optCtrl=list(method='nlminb')))

모두 잘 작동합니다 (경고 없음). 흥미로운 질문은 다음과 같습니다.

  1. 왜 이러한 경고가 시작되고
  2. 왜 당신이 사용했을 때 REML = TRUE경고가 표시되지 않습니다.

사용자가 정의한 때문에 간결하게, 1. 당신은 그 경고를받은 duration요인에 대한 고정 효과뿐만 아니라 임의의 기울기로 모두 sites뿐만 아니라 같은 season. 모델은 정의한 경사와 절편 간의 상관 관계를 추정하기 위해 자유도를 효과적으로 떨어 뜨 렸습니다. 다음과 같이 조금 더 간단한 모델을 사용한 경우 :

m1 = lmer(effect~duration+ (1+duration|sites) + (0+duration|season) + (1|season),
          data=dat1, REML = FALSE)

수렴 문제가 발생하지 않습니다. 이 모델은 상관되지 않은 임의의 절편과 각각에 대한 임의의 기울기를 효과적으로 추정합니다 season.

또한 2. 정의 REML = FALSE할 때 제한된 최대 가능성 대신 최대 예상 가능성을 사용했습니다. REML 추정값 은 최적의 랜덤 효과 분산 구조를 찾기 전에 고정 효과 의 영향을 "인수 제거"하려고합니다 ( " 최대 제한 가능성"이란 무엇이며 언제 사용해야합니까? " 스레드 참조) 문제에 대한 정보). 계산 절차는 기본적으로 원래 LME 모델 방정식의 양쪽 부분 곱함으로써 이루어진다 매트릭스에 의해 되도록 , 즉, 둘 다 원래 변경 에 뿐만 아니라 그만큼y = X β + Z γ + ϵ K K X = 0 y K y Z K Z ZXy=Xβ+Zγ+ϵKKX=0yKyZ 에서 . 이것이 설계 행렬 의 조건 수에 영향을 미쳤으므로 처음부터 자신이 발견 한 어려운 장소에서 벗어날 수 있다고 생각합니다 .KZZ

마지막 메모는 처음 season에 임의의 효과로 사용하는 것이 타당한 지 확실하지 않습니다 . 결국 계절이 너무 많아서 고정 효과로 취급 할 수도 있습니다.


BTW, 커뮤니티에 오신 것을 환영합니다!
usεr11852는 Reinstate Monic이

1
@ Syamkumar.R : 쿨, 나는 도울 수있어서 기쁘다. 이것이 귀하의 질문에 대한 답변이라고 생각되면 답변을 수락하는 것을 고려할 수 있습니다.
usεr11852는 Reinstate Monic이

대단히 감사합니다 !! 세 번째 변형- REML = FALSE, glmerControl(optimizer ='optimx', optCtrl=list(method='nlminb'))실제로 수렴 문제를 해결했습니다 glmer!
호기심

0

문제는 기술적 인 것이 아니라 통계적인 것입니다. 실제로는 고정 효과 모델 대신 임의 효과 모델을 사용했습니다. 요소 중 임의의 효과로 처리하기 위해 최소 5 또는 6 수준이 필요하거나 복제하기 때문에 어떤 요소도 임의 요소로 취급해서는 안됩니다. 여기 임의 효과 요인에 대한 최소 권장 그룹 수는 얼마입니까? ).

위의 데이터 세트에는 랜덤 효과 모델에 불충분 한 3 중 샘플 / 사이트 / 시즌 만 포함되어 있습니다. 데이터 세트에서 기간 4 일 및 7 일은 동시에 실행되는 두 개의 개별 병렬 실험에 속합니다. 따라서 기간 (4 일 및 7 일)으로 데이터 세트를 훔치고 시즌 및 사이트와 함께 각 기간에 대해 2-way anova를 수행하면 여기에서 효과 (응답 변수)를 모델링하기에 충분합니다. 모델은 다음과 같아야합니다.

lm(day_4_effect~sites*season, data=dat1)

lm(day_7_effect~sites*season, data=dat1)

Bodo Winter ( http://www.bodowinter.com/tutorial/bw_LME_tutorial2.pdf )와 @ usεr11852 덕분에 문제를 해결할 수있었습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.