การเปรียบเทียบแบบจำลองเอฟเฟกต์แบบหลากหลาย


31

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

ฉันใช้แนวทางที่เสนอที่นี่: https://gribblelab.wordpress.com/2009/03/09/repeated-measures-anova-using-r/

โดยเฉพาะฉันใช้โซลูชัน # 2

ดังนั้นฉันมีสิ่งที่ชอบ

require(nlme)
model <- lme(weight ~ time * Genotype, random = ~1|Animal/time, 
         data=weights)    
av <- anova(model)

ตอนนี้ฉันต้องการเปรียบเทียบหลายอย่าง ใช้multcompฉันสามารถทำได้:

require(multcomp)
comp.geno <- glht(model, linfct=mcp(Genotype="Tukey"))
print(summary(comp.geno))

และแน่นอนฉันสามารถทำเช่นเดียวกันกับเวลา

ฉันมีสองคำถาม:

  1. ฉันจะใช้mcpเพื่อดูปฏิสัมพันธ์ระหว่างเวลาและจีโนไทป์ได้อย่างไร
  2. เมื่อฉันวิ่งglhtฉันได้รับคำเตือนนี้:

    covariate interactions found -- default contrast might be inappropriate

    มันหมายความว่าอะไร? ฉันสามารถเพิกเฉยได้อย่างปลอดภัยหรือไม่? หรือฉันควรทำอย่างไรเพื่อหลีกเลี่ยง

แก้ไข: ฉันพบPDF นี้ที่ระบุว่า:

เพราะมันเป็นไปไม่ได้ในการกำหนดค่าพารามิเตอร์ของดอกเบี้ยโดยอัตโนมัติในกรณีนี้ MCP () ใน multcomp จะเริ่มต้นด้วยการสร้างการเปรียบเทียบผลกระทบหลักเพียงอย่างเดียวโดยไม่สนใจตัวแปรและการมีปฏิสัมพันธ์ ตั้งแต่เวอร์ชัน 1.1-2 เราสามารถระบุค่าเฉลี่ยของเงื่อนไขการใช้งานร่วมกันและ covariates โดยใช้อาร์กิวเมนต์ interaction_average = TRUE และ covariate_average = TRUE ตามลำดับในขณะที่รุ่นที่เก่ากว่า 1.0-0 โดยเฉลี่ยโดยอัตโนมัติผ่านข้อกำหนดของการโต้ตอบ เราแนะนำให้ผู้ใช้ทราบว่าพวกเขาเขียนชุดความแตกต่างที่พวกเขาต้องการด้วยตนเองเราควรทำสิ่งนี้เมื่อใดก็ตามที่มีข้อสงสัยเกี่ยวกับสิ่งที่การวัดความคมชัดเริ่มต้นซึ่งมักเกิดขึ้นในรุ่นที่มีเงื่อนไขการโต้ตอบเพื่อที่สูงขึ้น เราอ้างถึง Hsu (1996), บทที่ 7 และ Searle (1971), ตอนที่ 7.3 สำหรับการสนทนาและตัวอย่างเพิ่มเติมเกี่ยวกับปัญหานี้

ฉันไม่มีสิทธิ์เข้าถึงหนังสือเหล่านั้น แต่อาจมีบางคนที่นี่หรือ


ลองดูที่ InvivoStat ( invivostat.co.uk ) ควรทำการวิเคราะห์ประเภทที่คุณกำลังมองหา

คำตอบ:


29

หากtimeและGenotypeเป็นทั้งตัวทำนายเชิงหมวดหมู่ตามที่ปรากฏและคุณสนใจที่จะเปรียบเทียบคู่เวลา / จีโนไทป์ทั้งหมดซึ่งกันและกันคุณสามารถสร้างตัวแปรการโต้ตอบหนึ่งตัวและใช้ความแตกต่างของ Tukey:

weights$TimeGeno <- interaction(weigths$Time, weights$Geno)
model <- lme(weight ~ TimeGeno, random = ~1|Animal/time, data=weights) 
comp.timegeno <- glht(model, linfct=mcp(TimeGeno="Tukey")) 

หากคุณสนใจความแตกต่างอื่น ๆ คุณสามารถใช้ความจริงที่ว่าlinfctอาร์กิวเมนต์สามารถใช้เมทริกซ์ของค่าสัมประสิทธิ์สำหรับความแตกต่าง - วิธีนี้คุณสามารถตั้งค่าการเปรียบเทียบที่คุณต้องการ

แก้ไข

มีความกังวลในความคิดเห็นว่าแบบจำลองที่พอดีกับTimeGenoตัวทำนายนั้นแตกต่างจากแบบจำลองดั้งเดิมที่พอดีกับTime * Genotypeตัวทำนาย นี่ไม่ใช่กรณีรุ่นที่เทียบเท่า ความแตกต่างเพียงอย่างเดียวคือการตั้งค่าเอฟเฟ็กต์คงที่ซึ่งตั้งค่าไว้เพื่อให้ใช้งานglhtฟังก์ชั่นได้ง่ายขึ้น

ฉันใช้หนึ่งในชุดข้อมูลในตัว (มี Diet แทน Genotype) เพื่อแสดงให้เห็นว่าทั้งสองวิธีมีความเป็นไปได้เหมือนกันค่าคาดการณ์และอื่น ๆ :

> # extract a subset of a built-in dataset for the example
> data(BodyWeight)
> ex <- as.data.frame(subset(BodyWeight, Time %in% c(1, 22, 44)))
> ex$Time <- factor(ex$Time)
> 
> #create interaction variable
> ex$TimeDiet <- interaction(ex$Time, ex$Diet)
    > 
    > model1 <- lme(weight ~ Time * Diet, random = ~1|Rat/Time,  data=ex)    
    > model2 <- lme(weight ~ TimeDiet, random = ~1|Rat/Time, data=ex)    
    > 
    > # the degrees of freedom, AIC, BIC, log-likelihood are all the same 
    > anova(model1, model2)
           Model df      AIC      BIC    logLik
    model1     1 12 367.4266 387.3893 -171.7133
    model2     2 12 367.4266 387.3893 -171.7133
    Warning message:
    In anova.lme(model1, model2) :
      fitted objects with different fixed effects. REML comparisons are not meaningful.
    > 
    > # the second model collapses the main and interaction effects of the first model
    > anova(model1)
                numDF denDF   F-value p-value
    (Intercept)     1    26 1719.5059  <.0001
    Time            2    26   28.9986  <.0001
    Diet            2    13   85.3659  <.0001
    Time:Diet       4    26    1.7610  0.1671
    > anova(model2)
                numDF denDF   F-value p-value
    (Intercept)     1    24 1719.5059  <.0001
    TimeDiet        8    24   29.4716  <.0001
    > 
    > # they give the same predicted values
    > newdata <- expand.grid(Time=levels(ex$Time), Diet=levels(ex$Diet))
    > newdata$TimeDiet <- interaction(newdata$Time, newdata$Diet)
> newdata$pred1 <- predict(model1, newdata=newdata, level=0)
    > newdata$pred2 <- predict(model2, newdata=newdata, level=0)
> newdata
  Time Diet TimeDiet   pred1   pred2
1    1    1      1.1 250.625 250.625
2   22    1     22.1 261.875 261.875
3   44    1     44.1 267.250 267.250
4    1    2      1.2 453.750 453.750
5   22    2     22.2 475.000 475.000
6   44    2     44.2 488.750 488.750
7    1    3      1.3 508.750 508.750
8   22    3     22.3 518.250 518.250
9   44    3     44.3 530.000 530.000

ความแตกต่างเพียงอย่างเดียวคือสิ่งที่สมมติฐานง่ายต่อการทดสอบ ตัวอย่างเช่นในรุ่นแรกมันง่ายที่จะทดสอบว่าตัวทำนายสองตัวโต้ตอบกันหรือไม่ในรุ่นที่สองไม่มีการทดสอบที่ชัดเจนสำหรับเรื่องนี้ ในทางกลับกันผลกระทบร่วมของตัวทำนายสองตัวนั้นง่ายต่อการทดสอบในรุ่นที่สอง แต่ไม่ใช่แบบแรก สมมติฐานอื่น ๆ นั้นสามารถทำการทดสอบได้มันเป็นงานที่ต้องทำอีกมาก


3
glhtใช้องศาอิสระที่กำหนดในโมเดล lme ฉันไม่แน่ใจว่าองศาอิสระเหล่านี้เหมาะสมหรือไม่?
Stéphane Laurent

2
ฉันยังอยากรู้ว่าวิธีนี้ทำได้ดีที่สุด อย่างไรก็ตามวิธีการนี้ให้ผลจากโมเดลที่แตกต่าง - วิธีหนึ่งที่ใช้ทดสอบการมีปฏิสัมพันธ์ รุ่นที่สองไม่รวมถึงเอฟเฟกต์หลัก ๆ ที่อาจเกิดขึ้นเลย นี่ไม่ใช่วิธีการที่เหมาะสมในการตรวจสอบเอฟเฟกต์ในรุ่นแรก
Marcus Morrisey

@Aniko ฉันคิดว่าจะรวมตัวแปรเด็ดขาด 2 อย่างเข้าด้วยกันอย่างที่คุณเพิ่งทำ แต่ฉันลังเลเพราะมีเพียงหนึ่งในตัวแปรที่อยู่ในหัวเรื่อง คุณช่วยยืนยันได้ไหมว่าสิ่งนี้ไม่ได้อยู่ในท้องเดียวกัน? ฉันสังเกตเห็นว่าในตัวอย่างที่คุณเก็บAnimal/timeซึ่งตอนนี้ไม่ได้เป็นหนึ่งในปัจจัย lme understandนี้จริงเหรอ?
toto_tico

@toto_tico ฉันได้แก้ไขการตอบสนองเพื่อแสดงว่าแบบจำลองที่สองนั้นเทียบเท่ากับแบบแรก
Aniko

3
@toto_tico ฉันยกตัวอย่างให้คุณทำซ้ำได้ ทำไมคุณไม่ลองall.equal(resid(model1), resid(model2))และดูว่าพวกเขาเหมือนกันก่อนที่จะคาดเดาเป็นอย่างอื่น? พารามิเตอร์คงที่เท่านั้นที่แตกต่างกัน TimeDietไม่ได้เป็นระยะปฏิสัมพันธ์บริสุทธิ์และมันจะไม่เทียบเท่ากับแต่จะTime:Diet Time + Diet + Time:Diet
Aniko
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.