คำเตือน“ แบบจำลองล้มเหลวในการรวมตัวกัน” ใน lmer ()


21

ด้วยชุดข้อมูลต่อไปนี้ฉันต้องการดูว่าการตอบสนอง (ผล) เปลี่ยนแปลงเกี่ยวกับเว็บไซต์ฤดูกาลระยะเวลาและการโต้ตอบของพวกเขาหรือไม่ ฟอรัมออนไลน์บางแห่งเกี่ยวกับสถิติแนะนำให้ฉันไปใช้โมเดลตัวผสมผลกระทบเชิงเส้น แต่ปัญหาคือเนื่องจากการจำลองแบบถูกสุ่มภายในแต่ละสถานีฉันมีโอกาสน้อยที่จะรวบรวมตัวอย่างจากจุดเดียวกันในฤดูกาลที่ต่อเนื่องกัน (ตัวอย่างเช่น repl-1 ของ s1 ของ post-monsoon อาจไม่เหมือนกับของ monsoon) มันแตกต่างจากการทดลองทางคลินิก (ด้วยการออกแบบภายในเรื่อง) ที่คุณวัดหัวเรื่องเดียวกันซ้ำ ๆ ตลอดฤดูกาล อย่างไรก็ตามการพิจารณาไซต์และซีซันเป็นปัจจัยสุ่มฉันรันคำสั่งต่อไปนี้และได้รับข้อความเตือน:

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-มธุรสประจำการเพิ่มประสิทธิภาพการใช้โดยเริ่มต้นในก่อนหน้านี้1.0.xรุ่นก่อนหน้านี้ หรือคุณติดตั้งแพคเกจoptimxเพื่อให้คุณสามารถรูทีนL-BFGS-Bโดยตรงหรือnlminb(เหมือนกับlme4เวอร์ชั่นก่อนหน้า ver. 1) ตัวอย่างเช่น:

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 ดั้งเดิมโดยเมทริกซ์ซึ่งนั่นคือคุณเปลี่ยนทั้งดั้งเดิมเป็นรวมทั้งXY=Xβ+Zγ+εKKX=0YKYZเพื่อKZฉันสงสัยอย่างยิ่งว่าสิ่งนี้มีผลกระทบต่อจำนวนเงื่อนไขของเมทริกซ์การออกแบบและช่วยคุณออกจากพื้นที่ที่เป็นตัวเลขซึ่งคุณพบว่าเป็นตัวแรกKZZ

หมายเหตุสุดท้ายคือฉันไม่แน่ใจว่ามันสมเหตุสมผลหรือไม่ที่จะใช้seasonเป็นเอฟเฟกต์แบบสุ่มเพื่อเริ่มต้นด้วย หลังจากทั้งหมดมีเพียงฤดูกาลมากมายดังนั้นคุณอาจจะถือว่าพวกเขาเป็นเอฟเฟกต์คงที่


BTW ยินดีต้อนรับสู่ชุมชน!
usεr11852กล่าวว่า Reinstate Monic

1
@ Syamkumar.R: เยี่ยมฉันดีใจที่ฉันช่วยได้ หากคุณเชื่อว่านี่เป็นคำตอบสำหรับคำถามของคุณคุณสามารถลองตอบรับได้
usεr11852พูดว่า Reinstate Monic

ขอบคุณมาก!! ตัวแปรที่ 3 - REML = FALSE, glmerControl(optimizer ='optimx', optCtrl=list(method='nlminb'))- แก้ไขปัญหาการลู่เข้าได้จริงglmer!
อยากรู้อยากเห็น

0

คำถามคือสถิติมากกว่าทางเทคนิค ที่จริงแล้วฉันใช้แบบจำลองเอฟเฟกต์แบบสุ่มแทนเอฟเฟกต์แบบคงที่ไม่มีปัจจัยที่ฉันคิดว่าควรได้รับการพิจารณาว่าเป็นปัจจัยแบบสุ่มตามที่เราต้องการอย่างน้อย 5 หรือ 6 ระดับหรือจำลองซ้ำเพื่อรักษาปัจจัยแบบสุ่ม ที่นี่จำนวนขั้นต่ำที่แนะนำในกลุ่มสำหรับปัจจัยที่มีผลกระทบสุ่มคืออะไร? )

ชุดข้อมูลข้างต้นมีเพียงสามเท่าตัวอย่าง / ไซต์ / ซีซันซึ่งไม่เพียงพอสำหรับโมเดลเอฟเฟกต์แบบสุ่มในข้อมูลกำหนดระยะเวลา 4 วันและ 7 วันเป็นของการทดลองแบบขนานสองชุดที่แยกกันภายใต้เวลาเดียวกัน ดังนั้นการคายข้อมูลที่กำหนดตามระยะเวลา (4 วันและ 7 วัน) และดำเนินการ anova 2 ทางสำหรับแต่ละช่วงเวลากับฤดูกาลและไซต์เนื่องจากปัจจัยจะเพียงพอที่จะสร้างแบบจำลองผลกระทบ (ตัวแปรตอบสนอง) ที่นี่ รูปแบบควรเป็นดังต่อไปนี้:

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.