การเปรียบเทียบแบบหลายแบบผสมสำหรับการโต้ตอบระหว่างตัวทำนายแบบต่อเนื่องและหมวดหมู่


11

ฉันต้องการใช้lme4เพื่อให้พอดีกับการถดถอยแบบผสมและmultcompเพื่อคำนวณการเปรียบเทียบแบบคู่ ฉันมีชุดข้อมูลที่ซับซ้อนพร้อมตัวทำนายอย่างต่อเนื่องและจัดหมวดหมู่หลายชุด แต่คำถามของฉันสามารถแสดงให้เห็นได้โดยใช้ChickWeightชุดข้อมูลในตัวเป็นตัวอย่าง:

m <- lmer(weight ~ Time * Diet + (1 | Chick), data=ChickWeight, REML=F)

Timeมีความต่อเนื่องและDietเป็นหมวดหมู่ (4 ระดับ) และมีลูกไก่หลายตัวต่ออาหาร ลูกไก่ทุกตัวเริ่มต้นด้วยน้ำหนักเท่ากัน แต่อาหารของพวกมัน (อาจ) ส่งผลต่ออัตราการเติบโตดังนั้นการDietสกัดกั้นควรจะเหมือนกัน (มากหรือน้อย) เหมือนกัน แต่ความลาดชันอาจแตกต่างกัน ฉันจะได้รับการเปรียบเทียบแบบคู่สำหรับผลของการสกัดกั้นDietแบบนี้:

summary(glht(m, linfct=mcp(Diet = "Tukey")))

และแน่นอนพวกเขาไม่ได้แตกต่างกันอย่างมีนัยสำคัญ แต่ฉันจะทำการทดสอบแบบอะนาล็อกเพื่อให้ได้Time:Dietผลอย่างไร เพียงแค่ใส่คำที่โต้ตอบลงไปในmcpข้อผิดพลาด:

summary(glht(m, linfct=mcp('Time:Diet' = "Tukey")))
Error in summary(glht(m, linfct = mcp(`Time:Diet` = "Tukey"))) : 
  error in evaluating the argument 'object' in selecting a method for function
 'summary': Error in mcp2matrix(model, linfct = linfct) : 
Variable(s) Time:Diet have been specified in linfct but cannot be found in model’! 

แต่ก็มีซึ่งเป็นเพียงความเรียบง่ายของTime*Diet Time + Diet + Time:Dietการใช้anova(m)หรือsummary(m)ยืนยันว่าเงื่อนไขการโต้ตอบอยู่ในโมเดล
Dan M.

คำตอบ:


8

โดยค่าเริ่มต้นlmerถือว่าระดับการอ้างอิงของตัวทำนายหมวดหมู่เป็นพารามิเตอร์พื้นฐานและประมาณการสำหรับระดับอื่น ๆ ดังนั้นคุณจะได้รับการเปรียบเทียบแบบคู่ในเอาต์พุตเริ่มต้นและคุณสามารถหาค่าอื่น ๆ โดยใช้relevelเพื่อกำหนดระดับการอ้างอิงใหม่และปรับโมเดลให้เหมาะสม นี่เป็นข้อดีของการให้คุณใช้การเปรียบเทียบแบบจำลองหรือ MCMC เพื่อรับค่า p แต่ไม่ถูกต้องสำหรับการเปรียบเทียบหลาย ๆ ครั้ง (แม้ว่าคุณสามารถใช้การแก้ไขของคุณเองในภายหลัง)

หากต้องการใช้multcompคุณต้องกำหนดเมทริกซ์ความคมชัด แต่ละแถวในเมทริกซ์คอนทราสต์จะแสดงน้ำหนักของเอฟเฟกต์ที่คุณได้รับในรูปแบบเอาต์พุตเริ่มต้นโดยเริ่มต้นด้วยการสกัดกั้น ดังนั้นหากคุณต้องการเอฟเฟกต์ที่รวมอยู่ในเอาต์พุตพื้นฐานแล้วคุณเพียงวาง "1" ในตำแหน่งที่สอดคล้องกับเอฟเฟกต์นั้น เนื่องจากการประมาณพารามิเตอร์นั้นสัมพันธ์กับระดับการอ้างอิงทั่วไปคุณสามารถรับการเปรียบเทียบระหว่างสองระดับอื่น ๆ โดยการตั้งค่าน้ำหนักของหนึ่งถึง "-1" และของ "1" อื่น ๆ ต่อไปนี้เป็นวิธีการทำงานสำหรับTime:Dietคำต่างๆในChickWeightตัวอย่าง:

contrast.matrix <- rbind("Time:Diet1 vs. Time:Diet2" =  c(0, 0, 0, 0, 0, 1, 0, 0),
                           "Time:Diet1 vs. Time:Diet3" =  c(0, 0, 0, 0, 0, 0, 1, 0),
                           "Time:Diet1 vs. Time:Diet4" =  c(0, 0, 0, 0, 0, 0, 0, 1),
                           "Time:Diet2 vs. Time:Diet3" =  c(0, 0, 0, 0, 0, -1, 1, 0),
                           "Time:Diet2 vs. Time:Diet4" =  c(0, 0, 0, 0, 0, -1, 0, 1),
                           "Time:Diet3 vs. Time:Diet4" =  c(0, 0, 0, 0, 0, 0, -1, 1))
summary(glht(m, contrast.matrix))

Caveat emptor: วิธีนี้ดูเหมือนว่าจะใช้การประมาณค่าปกติเพื่อรับค่า p ซึ่งค่อนข้างต่อต้านการอนุรักษ์และใช้การแก้ไขสำหรับการเปรียบเทียบหลายอย่าง ผลที่สุดคือวิธีนี้ช่วยให้คุณสามารถเข้าถึงการประมาณค่าพารามิเตอร์และจำนวนข้อผิดพลาดมาตรฐานตามที่คุณต้องการได้อย่างง่ายดาย แต่ค่า p อาจจะใช่หรือไม่ใช่สิ่งที่คุณต้องการ

(ขอบคุณ Scott Jackson จากr-ling-lang-Lสำหรับความช่วยเหลือในเรื่องนี้)

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