Mô hình không thành công trong việc hội tụ cảnh báo của người dùng trong lmer ()


21

Với bộ dữ liệu sau đây, tôi muốn xem phản hồi (hiệu ứng) có thay đổi liên quan đến các trang web, mùa, thời lượng và tương tác của chúng không. Một số diễn đàn trực tuyến về thống kê đề nghị tôi tiếp tục với Mô hình hiệu ứng hỗn hợp tuyến tính, nhưng vấn đề là do các bản sao được ngẫu nhiên hóa trong mỗi trạm, tôi có rất ít cơ hội để thu thập mẫu từ cùng một vị trí trong các mùa liên tiếp (ví dụ: thay thế 1 của s1 của gió mùa sau gió mùa có thể không giống với gió mùa). Nó không giống như các thử nghiệm lâm sàng (với thiết kế bên trong chủ đề) khi bạn đo cùng một chủ đề liên tục theo mùa. Tuy nhiên, coi các trang web và phần là một yếu tố ngẫu nhiên, tôi đã chạy các lệnh sau và nhận được một thông báo cảnh báo:

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

Bất cứ ai có thể giúp tôi giải quyết vấn đề? Các mã được đưa ra dưới đây:

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. Cảm ơn bạn đã chỉnh sửa. Trên thực tế, tôi không biết cách bao gồm mã r như trên
Syamkumar.

Câu trả lời:


47

"Giải quyết" vấn đề bạn gặp phải theo nghĩa là không nhận được cảnh báo về sự hội tụ không thành công khá đơn giản: bạn không sử dụng mặc định trình tối ưu hóa BOBYQA mà thay vào đó bạn chọn sử dụng thói quen tối ưu hóa Nelder-Mead được sử dụng theo mặc định trong 1.0.xcác phiên bản trước. Hoặc bạn cài đặt gói optimxđể bạn có thể trực tiếp một thói quen L-BFGS-B hoặc nlminb(giống như lme4các phiên bản trước ver. 1). Ví dụ:

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')))

tất cả đều hoạt động tốt (không có cảnh báo). Các câu hỏi thú vị là:

  1. tại sao bạn có những cảnh báo này để bắt đầu và
  2. Tại sao khi bạn sử dụng, REML = TRUEbạn không có cảnh báo.

Một cách ngắn gọn, 1. bạn đã nhận được những cảnh báo đó bởi vì bạn đã xác định durationcả hai là hiệu ứng cố định cũng như độ dốc ngẫu nhiên cho yếu tố sitescũng như season. Mô hình đã hết hiệu quả trong các mức độ tự do để ước tính mối tương quan giữa các sườn dốc và các điểm chặn bạn đã xác định. Nếu bạn đã sử dụng một mô hình đơn giản hơn một chút như:

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

bạn sẽ không gặp vấn đề hội tụ. Mô hình này sẽ ước tính một cách hiệu quả các chặn ngẫu nhiên không tương quan và các sườn ngẫu nhiên cho mỗi season.

REML = FALSEXy= =Xβ+Zγ+εKKX= =0yKyZKZZ

Một lưu ý cuối cùng là tôi không chắc liệu nó có hợp lý hay không season như một hiệu ứng ngẫu nhiên để bắt đầu hay không. Rốt cuộc, chỉ có rất nhiều mùa để bạn có thể coi chúng là hiệu ứng cố định.


BTW, chào mừng đến với cộng đồng!
usεr11852 nói Phục hồi Monic

1
@ Syamkumar.R: Thật tuyệt, tôi rất vui vì tôi có thể giúp đỡ. Nếu bạn tin câu trả lời này, bạn có thể cân nhắc chấp nhận câu trả lời.
usεr11852 nói Phục hồi Monic

Cảm ơn rât nhiều!! Biến thể thứ 3 - REML = FALSE, glmerControl(optimizer ='optimx', optCtrl=list(method='nlminb'))- thực sự đã giải quyết vấn đề hội tụ trong glmer!
Tò mò

0

Câu hỏi là thống kê hơn là kỹ thuật. Trên thực tế, tôi đã sử dụng mô hình hiệu ứng ngẫu nhiên thay vì hiệu ứng cố định. Tôi nghĩ rằng các yếu tố ngẫu nhiên nên được coi là yếu tố ngẫu nhiên vì chúng tôi cần ít nhất 5 hoặc 6 cấp độ hoặc sao chép để coi một yếu tố là hiệu ứng ngẫu nhiên (xem đây Số lượng nhóm được đề xuất tối thiểu cho một yếu tố hiệu ứng ngẫu nhiên là bao nhiêu? ).

Tập dữ liệu trên chỉ chứa các mẫu / trang web / mùa ba lần không đủ cho một mô hình hiệu ứng ngẫu nhiên. Trong dữ liệu đặt thời lượng, 4 ngày và 7 ngày thuộc hai thử nghiệm song song riêng biệt chạy cùng một lúc. Vì vậy, hãy trích xuất dữ liệu được đặt theo thời lượng (4 ngày và 7 ngày) và thực hiện anova 2 chiều cho mỗi thời lượng với mùa và các trang web vì các yếu tố sẽ đủ để mô hình hiệu ứng (biến phản ứng) ở đây. Mô hình nên như sau:

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

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

Cảm ơn Bodo Winter ( http://www.bodowinter.com/tutorial/bw_LME_tutorial2.pdf ) và @ usεr11852, người đã giúp tôi giải quyết vấn đề.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.