วิธีการเลือกโครงสร้างแบบสุ่มและแบบคงที่ในโมเดลเชิงเส้นผสม


19

พิจารณาข้อมูลต่อไปนี้จากการออกแบบสองทางภายในวิชา:

df <- "http://personality-project.org/r/datasets/R.appendix4.data"
df <- read.table(df,header=T)
head(df)

Observation Subject Task Valence Recall
1           1     Jim Free     Neg      8
2           2     Jim Free     Neu      9
3           3     Jim Free     Pos      5
4           4     Jim Cued     Neg      7
5           5     Jim Cued     Neu      9
6           6     Jim Cued     Pos     10

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

# different fixed effects with random-intercept
a0 <- lmer(Recall~1 + (1|Subject), REML=F,df)
a1 <- lmer(Recall~Task + (1|Subject), REML=F,df)
a2 <- lmer(Recall~Valence + (1|Subject), REML=F,df)
a3 <- lmer(Recall~Task+Valence + (1|Subject), REML=F,df)
a4 <- lmer(Recall~Task*Valence + (1|Subject), REML=F,df)

# different fixed effects with random-intercept-random-slope
b0 <- lmer(Recall~1 + (1|Subject) + (0+Task|Subject) + (0+Valence|Subject), REML=F,df)
b1 <- lmer(Recall~Task + (1|Subject) + (0+Task|Subject) + (0+Valence|Subject), REML=F,df)
b2 <- lmer(Recall~Valence + (1|Subject) + (0+Task|Subject) + (0+Valence|Subject), REML=F,df)
b3 <- lmer(Recall~Task+Valence + (1|Subject) + (0+Task|Subject) + (0+Valence|Subject), REML=F,df)
b4 <- lmer(Recall~Task*Valence + (1|Subject) + (0+Task|Subject) + (0+Valence|Subject), REML=F,df)

# different fixed effects with random-intercept-random-slope including variance-covariance matrix
c0 <- lmer(Recall~1 + (1 + Valence + Task|Subject), REML=F,df)
c1 <- lmer(Recall~Task + (1 + Valence + Task|Subject), REML=F,df)
c2 <- lmer(Recall~Valence + (1 + Valence + Task|Subject), REML=F,df)
c3 <- lmer(Recall~Task+Valence + (1 + Valence + Task|Subject), REML=F,df)
c4 <- lmer(Recall~Task*Valence + (1 + Valence + Task|Subject), REML=F,df)
  1. วิธีที่แนะนำในการเลือกรูปแบบการกระชับที่สุดในบริบทนี้คืออะไร? เมื่อใช้อัตราส่วนทดสอบความน่าจะเป็นบันทึกขั้นตอนที่แนะนำคืออะไร? กำลังสร้างแบบจำลองขึ้นด้านบน (จากแบบจำลองโมฆะไปจนถึงแบบจำลองที่ซับซ้อนที่สุด) หรือแบบลงด้านล่าง (จากแบบจำลองที่ซับซ้อนที่สุดไปจนถึงแบบจำลองแบบโมฆะ)? การรวมหรือแยกแบบทีละขั้น? หรือแนะนำให้ใส่แบบจำลองทั้งหมดในการทดสอบอัตราส่วนล็อก - ต่อ - ความน่าจะเป็นและเลือกรุ่นที่มีค่า p ต่ำสุดหรือไม่ จะเปรียบเทียบแบบจำลองที่ไม่ซ้อนกันได้อย่างไร

  2. ขอแนะนำให้หาโครงสร้างผลกระทบคงที่ที่เหมาะสมก่อนจากนั้นเลือกโครงสร้างผลกระทบแบบสุ่มที่เหมาะสมหรือวิธีอื่น ๆ (ฉันได้พบการอ้างอิงสำหรับตัวเลือกทั้งสอง ... ) หรือไม่

  3. วิธีการรายงานผลที่แนะนำคืออะไร? การรายงานค่า p-value จากการทดสอบอัตราส่วนบันทึกความน่าจะเป็นเมื่อเปรียบเทียบกับแบบจำลองผสมทั้งหมด (ที่มีผลกระทบต่อคำถาม) กับแบบจำลองที่ลดลง (โดยไม่มีผลกระทบในคำถาม) หรือดีกว่าที่จะใช้การทดสอบอัตราส่วนความน่าจะเป็นเพื่อค้นหาแบบจำลองที่เหมาะสมที่สุดแล้วใช้ lmerTest เพื่อรายงานค่า p จากผลกระทบในแบบจำลองการฟิตติ้งที่ดีที่สุด?

คำตอบ:


18

ฉันไม่แน่ใจว่ามีคำตอบที่ยอมรับได้จริง แต่ฉันจะให้มันยิง

วิธีที่แนะนำในการเลือกรูปแบบการกระชับที่สุดในบริบทนี้คืออะไร? เมื่อใช้อัตราส่วนทดสอบความน่าจะเป็นบันทึกขั้นตอนที่แนะนำคืออะไร? กำลังสร้างแบบจำลองขึ้นด้านบน (จากแบบจำลองโมฆะไปจนถึงแบบจำลองที่ซับซ้อนที่สุด) หรือแบบลงด้านล่าง (จากแบบจำลองที่ซับซ้อนที่สุดไปจนถึงแบบจำลองแบบโมฆะ)? การรวมหรือแยกแบบทีละขั้น? หรือแนะนำให้ใส่แบบจำลองทั้งหมดในการทดสอบอัตราส่วนล็อก - ต่อ - ความน่าจะเป็นและเลือกรุ่นที่มีค่า p ต่ำสุดหรือไม่ จะเปรียบเทียบแบบจำลองที่ไม่ซ้อนกันได้อย่างไร

ขึ้นอยู่กับเป้าหมายของคุณ

  • โดยทั่วไปคุณควรจะมาก , มากระมัดระวังเกี่ยวกับการเลือกรูปแบบ (ดูเช่นคำตอบนี้หรือโพสต์นี้หรือเพียงแค่ Google "ฮาร์เรลแบบขั้นตอน" ... )
  • หากคุณสนใจที่จะให้ค่า p ของคุณมีความหมาย (เช่นคุณกำลังทำการทดสอบสมมติฐานยืนยัน) คุณไม่ควรทำการเลือกแบบจำลอง อย่างไรก็ตาม : มันไม่ชัดเจนสำหรับฉันว่าขั้นตอนการเลือกแบบจำลองนั้นค่อนข้างแย่ถ้าคุณทำการเลือกแบบจำลองในส่วนที่ไม่ใช่โฟกัสของแบบจำลองเช่นทำการเลือกแบบจำลองบนเอฟเฟกต์แบบสุ่มหากความสนใจหลักของคุณอนุมานเกี่ยวกับเอฟเฟกต์
  • ไม่มีสิ่งเช่น "วางแบบจำลองทั้งหมดในการทดสอบอัตราส่วนความน่าจะเป็นเดียว" - การทดสอบอัตราส่วนความน่าจะเป็นเป็นขั้นตอนแบบคู่ หากคุณต้องการเลือกรูปแบบ (เช่น) ในเอฟเฟกต์แบบสุ่มฉันอาจจะแนะนำวิธีการ "ทั้งหมดในคราวเดียว" โดยใช้เกณฑ์ข้อมูลในตัวอย่างนี้ - อย่างน้อยก็หลีกเลี่ยงปัญหาบางอย่างของวิธีการแบบตามขั้นตอน (แต่ไม่ใช่ การเลือกรูปแบบโดยทั่วไป)
  • Barr et al. 2013 "เก็บให้มากที่สุด" วารสารหน่วยความจำและภาษา (ดอย: 10.1016 / j.jml.2012.11.111) ขอแนะนำให้ใช้โมเดลสูงสุด (เท่านั้น)
  • Shravan Vasishth ไม่เห็นด้วยกับการโต้เถียงว่าโมเดลดังกล่าวกำลังถูก underpowered และดังนั้นจึงเป็นปัญหาเว้นแต่ว่าชุดข้อมูลมีขนาดใหญ่มาก (และอัตราส่วนสัญญาณต่อเสียงรบกวนสูง)
  • อีกวิธีหนึ่งที่สามารถป้องกันได้อย่างสมเหตุสมผลคือการใส่แบบจำลองขนาดใหญ่แต่มีเหตุผลและถ้าแบบนั้นเป็นเอกพจน์ให้ลบคำศัพท์ออกจนกว่าจะไม่มีอีกต่อไป
  • ด้วยข้อแม้บางอย่าง (ระบุในคำถามที่พบบ่อยของ GLMM ) คุณสามารถใช้เกณฑ์ข้อมูลเพื่อเปรียบเทียบโมเดลที่ไม่ซ้อนกับเอฟเฟกต์แบบสุ่มที่แตกต่างกัน (แม้ว่า Brian Ripley ไม่เห็นด้วย: ดูด้านล่างของหน้า 6 ที่นี่ )

ขอแนะนำให้หาโครงสร้างผลกระทบคงที่ที่เหมาะสมก่อนจากนั้นเลือกโครงสร้างผลกระทบแบบสุ่มที่เหมาะสมหรือวิธีอื่น ๆ (ฉันได้พบการอ้างอิงสำหรับตัวเลือกทั้งสอง ... ) หรือไม่

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

วิธีการรายงานผลที่แนะนำคืออะไร? การรายงานค่า p-value จากการทดสอบอัตราส่วนบันทึกความน่าจะเป็นเมื่อเปรียบเทียบกับแบบจำลองผสมทั้งหมด (ที่มีผลกระทบต่อคำถาม) กับแบบจำลองที่ลดลง (โดยไม่มีผลกระทบในคำถาม) หรือดีกว่าที่จะใช้การทดสอบอัตราส่วนความน่าจะเป็นเพื่อค้นหาแบบจำลองที่เหมาะสมที่สุดแล้วใช้ lmerTest เพื่อรายงานค่า p จากผลกระทบในแบบจำลองการฟิตติ้งที่ดีที่สุด?

นี่เป็นอีกคำถามที่ยากมาก หากคุณรายงานผลกระทบเล็กน้อยตามการรายงานของlmerTestคุณต้องกังวลเกี่ยวกับขอบเขต (เช่นไม่ว่าจะเป็นการประมาณการของผลกระทบหลักของAและBมีความหมายเมื่อมีการA-by- Bปฏิสัมพันธ์ในรูปแบบ); นี้เป็นกระป๋องใหญ่ของเวิร์ม แต่ค่อนข้างลดลงถ้าคุณใช้เป็นแนะนำโดยcontrasts="sum" afex::mixed()การออกแบบที่สมดุลก็ช่วยได้เช่นกัน หากคุณต้องการที่จะจดบันทึกรอยแตกเหล่านี้ทั้งหมดฉันคิดว่าฉันอยากจะแนะนำafex::mixedซึ่งให้ผลลัพธ์คล้ายกับlmerTestคุณ แต่พยายามจัดการกับปัญหาเหล่านี้


12

ปรับปรุงพฤษภาคม 2017 : มันจะเปิดออกเป็น LOF ของสิ่งที่ฉันได้เขียนนี่คือชนิดของ wrongish มีการปรับปรุงบางอย่างตลอดการโพสต์


ฉันเห็นด้วยอย่างมากกับสิ่งที่เบ็นโบลเคอร์พูดไปแล้ว (ขอบคุณสำหรับการตะโกนออกไปafex::mixed()) แต่ขอให้ฉันเพิ่มความคิดทั่วไปและความคิดที่เฉพาะเจาะจงมากขึ้นในเรื่องนี้

เน้นที่เอฟเฟกต์แบบคงที่และแบบสุ่มและวิธีการรายงานผลลัพธ์

สำหรับประเภทของการวิจัยเชิงทดลองที่แสดงอยู่ในตัวอย่างข้อมูลชุดจาก Jonathan Baron คุณใช้คำถามที่สำคัญคือโดยทั่วไปแล้วปัจจัยที่ควบคุมจัดการมีผลกระทบโดยรวมหรือไม่ ตัวอย่างเช่นเราจะพบผลกระทบหลักโดยรวมหรือการทำงานร่วมกันของTask? จุดสำคัญคือในชุดข้อมูลเหล่านั้นโดยปกติแล้วปัจจัยทั้งหมดจะอยู่ภายใต้การควบคุมการทดสอบที่สมบูรณ์และกำหนดแบบสุ่ม ดังนั้นการโฟกัสที่น่าสนใจมักจะอยู่ที่เอฟเฟกต์คงที่
ในทางตรงกันข้ามส่วนประกอบเอฟเฟ็กต์แบบสุ่มสามารถมองได้ว่าเป็น "รำคาญ" พารามิเตอร์ที่จับความแปรปรวนของระบบ (เช่นความแตกต่างระหว่างบุคคลในขนาดของผลกระทบ) ที่ไม่จำเป็นต้องมีความสำคัญสำหรับคำถามหลัก จากมุมมองนี้ข้อเสนอแนะของการใช้โครงสร้างเอ็ฟเฟ็กต์แบบสุ่มสูงสุดที่สนับสนุนโดย Barr และคณะ ค่อนข้างตามธรรมชาติ เป็นเรื่องง่ายที่จะจินตนาการว่าการจัดการทดลองไม่ได้ส่งผลกระทบต่อบุคคลทุกคนในลักษณะเดียวกันและเราต้องการควบคุมสิ่งนี้ ในทางกลับกันจำนวนของปัจจัยหรือระดับมักจะไม่ใหญ่เกินไปเพื่อให้อันตรายจากการ overfitting ดูเหมือนค่อนข้างเล็ก

ดังนั้นฉันจะทำตามคำแนะนำของ Barr และคณะ และระบุโครงสร้างเอ็ฟเฟ็กต์แบบสุ่มสูงสุดและการทดสอบรายงานผลกระทบคงที่เป็นผลลัพธ์หลักของฉัน ในการทดสอบเอฟเฟกต์คงที่ฉันขอแนะนำให้ใช้afex::mixed()เนื่องจากมันรายงานการทดสอบเอฟเฟกต์หรือปัจจัย (แทนที่จะทดสอบพารามิเตอร์) และคำนวณการทดสอบเหล่านั้นด้วยวิธีที่เหมาะสม (เช่นใช้โครงสร้างเอฟเฟกต์แบบสุ่มเดียวกันสำหรับทุกรุ่นที่ ลบเอฟเฟกต์เดียวโดยใช้ผลรวมถึงศูนย์ความเปรียบต่างเสนอวิธีการต่าง ๆ ในการคำนวณค่าp -values, ... )

เกี่ยวกับข้อมูลตัวอย่าง

ปัญหาเกี่ยวกับข้อมูลตัวอย่างที่คุณให้ไว้สำหรับชุดข้อมูลนี้โครงสร้างเอ็ฟเฟ็กต์แบบสุ่มสูงสุดนำไปสู่โมเดลที่มีขนาดใหญ่เกินไปเนื่องจากมีจุดข้อมูลเพียงจุดเดียวต่อเซลล์ของการออกแบบ:

> with(df, table(Valence, Subject, Task))
, , Task = Cued

       Subject
Valence Faye Jason Jim Ron Victor
    Neg    1     1   1   1      1
    Neu    1     1   1   1      1
    Pos    1     1   1   1      1

, , Task = Free

       Subject
Valence Faye Jason Jim Ron Victor
    Neg    1     1   1   1      1
    Neu    1     1   1   1      1
    Pos    1     1   1   1      1

ดังนั้นlmerฉายาบนโครงสร้างเอ็ฟเฟ็กต์แบบสุ่มสูงสุด:

> lmer(Recall~Task*Valence + (Valence*Task|Subject), df)
Error: number of observations (=30) <= number of random effects (=30) for term
(Valence * Task | Subject); the random-effects parameters and the residual variance
(or scale parameter) are probably unidentifiable

น่าเสียดายที่มีความรู้ของฉันไม่เห็นด้วยกับวิธีที่จะจัดการกับปัญหานี้ แต่ให้ฉันวาดและพูดคุยเกี่ยวกับบางอย่าง:

  1. วิธีแรกคือการลบความชันสูงสุดแบบสุ่มและทดสอบเอฟเฟกต์สำหรับรุ่นนี้:

    require(afex)
    mixed(Recall~Task*Valence + (Valence+Task|Subject), df)
            Effect    F ndf  ddf F.scaling p.value
    1         Task 6.56   1 4.00      1.00     .06
    2      Valence 0.80   2 3.00      0.75     .53
    3 Task:Valence 0.42   2 8.00      1.00     .67

    อย่างไรก็ตามการแก้ปัญหานี้เป็นการโฆษณาเพียงเล็กน้อยและไม่มีแรงจูงใจมากเกินไป

    อัปเดตพฤษภาคม 2560:นี่เป็นวิธีการที่ฉันรับรองในปัจจุบัน ดูโพสต์บล็อกนี้และร่างของบทที่ฉันร่วมเขียนในส่วน "โครงสร้างเอฟเฟกต์แบบสุ่มสำหรับการออกแบบ ANOVA แบบดั้งเดิม"

  2. ทางเลือกอื่น (และวิธีการหนึ่งที่อาจถูกมองว่าสนับสนุนโดยการสนทนาของ Barr et al. ) สามารถที่จะลบความลาดชันแบบสุ่มเพื่อผลที่เล็กที่สุด แม้ว่าจะมีสองปัญหา: (1) เราใช้โครงสร้างเอฟเฟกต์แบบสุ่มเพื่อค้นหาว่าเอฟเฟกต์ที่เล็กที่สุดคืออะไรและ (2) R ไม่เต็มใจที่จะลบเอฟเฟกต์ลำดับล่างเช่นเอฟเฟกต์หลักเช่น ปฏิกิริยาของเอฟเฟกต์นี้มีอยู่ (ดูที่นี่ ) ด้วยเหตุนี้เราจะต้องตั้งค่าโครงสร้างเอ็ฟเฟ็กต์แบบสุ่มด้วยมือแล้วส่งเมทริกซ์โมเดลที่สร้างขึ้นนี้ไปยังการเรียก lmer

  3. วิธีที่สามคือการใช้ทางเลือก parametrization ในส่วนของเอฟเฟกต์แบบสุ่มซึ่งเป็นวิธีที่สอดคล้องกับโมเดล RM-ANOVA สำหรับข้อมูลนี้ น่าเสียดายที่ (?) lmerไม่อนุญาตให้ "แปรปรวนเชิงลบ" ดังนั้นการกำหนดพารามิเตอร์นี้ไม่สอดคล้องกับ RM-ANOVA สำหรับชุดข้อมูลทั้งหมดดูการสนทนาที่นี่และที่อื่น ๆ (เช่นที่นี่และที่นี่ ) "lmer-ANOVA" สำหรับข้อมูลเหล่านี้จะเป็น:

    > mixed(Recall~Task*Valence + (1|Subject) + (1|Task:Subject) + (1|Valence:Subject), df)
            Effect    F ndf  ddf F.scaling p.value
    1         Task 7.35   1 4.00      1.00     .05
    2      Valence 1.46   2 8.00      1.00     .29
    3 Task:Valence 0.29   2 8.00      1.00     .76

จากปัญหาทั้งหมดนี้ฉันจะไม่ใช้lmerสำหรับชุดข้อมูลที่เหมาะสมซึ่งมีจุดข้อมูลเพียงจุดเดียวต่อเซลล์ของการออกแบบเว้นแต่จะมีการตกลงเพิ่มเติมสำหรับการแก้ปัญหาของโครงสร้างเอ็ฟเฟ็กต์แบบสุ่มสูงสุด

  1. แต่ฉันจะยังสามารถใช้ ANOVA แบบคลาสสิกได้เช่นกัน การใช้หนึ่งในเครื่องมือห่อหุ้มcar::Anova()ในafexผลลัพธ์จะเป็น:

    > aov4(Recall~Task*Valence + (Valence*Task|Subject), df)
            Effect         df  MSE      F  ges   p
    1      Valence 1.44, 5.75 4.67   1.46  .02 .29
    2         Task       1, 4 4.08 7.35 +  .07 .05
    3 Valence:Task 1.63, 6.52 2.96   0.29 .003 .71

    โปรดทราบว่าในafexขณะนี้อนุญาตให้ส่งคืนโมเดลที่พอดีaovซึ่งสามารถส่งผ่านไปยังlsmeansการทดสอบหลังการทดสอบได้ (แต่สำหรับการทดสอบเอฟเฟกต์รายการที่รายงานโดยcar::Anovaยังเหมาะสมกว่า):

    > require(lsmeans)
    > m <- aov4(Recall~Task*Valence + (Valence*Task|Subject), df, return = "aov")
    > lsmeans(m, ~Task+Valence)
     Task Valence lsmean       SE   df lower.CL upper.CL
     Cued Neg       11.8 1.852026 5.52  7.17157 16.42843
     Free Neg       10.2 1.852026 5.52  5.57157 14.82843
     Cued Neu       13.0 1.852026 5.52  8.37157 17.62843
     Free Neu       11.2 1.852026 5.52  6.57157 15.82843
     Cued Pos       13.6 1.852026 5.52  8.97157 18.22843
     Free Pos       11.0 1.852026 5.52  6.37157 15.62843
    
    Confidence level used: 0.95 

(+1) "น่าเสียดายที่ Lmer ไม่อนุญาตให้มีความสัมพันธ์เชิงลบ" - นี่ควรเป็น "ไม่อนุญาตให้มีความแปรปรวนเชิงลบ" หรือไม่ นอกจากนี้ยังมีการอัปเดตอีกครั้ง: คุณจะให้ความกระจ่างเกี่ยวกับคำตอบนี้มากขึ้นหรือไม่
อะมีบาพูดว่า Reinstate Monica

(ฉันอ่านโพสต์ที่เชื่อมโยงและดูเหมือนว่าข้อความหลักที่มีอยู่ว่าวิธีการที่ระบุไว้ในที่นี้เนื่องจาก # 1 เป็น kosher มากกว่าที่คุณเคยคิดถูกต้องหรือไม่ยังไม่ชัดเจนถ้าคุณคิดว่า # 3 หรือ # 4 ดีกว่า )
อะมีบาพูดว่า Reinstate Monica

@amoeba ใช่คุณถูกต้อง ฉันแค่ขี้เกียจเกินไปที่จะอัพเดตคำตอบของฉันที่นี่ตามนั้น
Henrik

@amoeba และคุณก็มีความสัมพันธ์ที่ถูกต้องเช่นกัน lmerไม่อนุญาตให้มีผลต่างเชิงลบ แต่เห็นได้ชัดว่ามีความสัมพันธ์เชิงลบระหว่างองค์ประกอบความแปรปรวน
Henrik

1
ฉันแก้ไขบางอย่างแล้วคุณอาจต้องการตรวจสอบให้แน่ใจว่าฉันไม่ได้เป็นตัวแทนของคุณ
อะมีบาพูดว่า Reinstate Monica
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.