ความแตกต่างระหว่างการใช้ aov () และ lme () ในการวิเคราะห์ชุดข้อมูลระยะยาวคืออะไร?


14

ใครสามารถบอกฉันถึงความแตกต่างระหว่างการใช้aov()และlme()การวิเคราะห์ข้อมูลระยะยาวและวิธีการตีความผลลัพธ์จากทั้งสองวิธีได้หรือไม่

ด้านล่างผมวิเคราะห์ชุดข้อมูลเดียวกันโดยใช้aov()และlme()และได้ผลที่แตกต่างกัน 2 ด้วยaov()ฉันได้รับผลอย่างมีนัยสำคัญในเวลาโดยการโต้ตอบการรักษา แต่เหมาะสมกับรูปแบบการผสมเชิงเส้นเวลาโดยการโต้ตอบการรักษาไม่สำคัญ

> UOP.kg.aov <- aov(UOP.kg~time*treat+Error(id), raw3.42)
> summary(UOP.kg.aov)

Error: id
          Df  Sum Sq Mean Sq F value Pr(>F)
treat      1   0.142  0.1421  0.0377 0.8471
Residuals 39 147.129  3.7725               

Error: Within
            Df  Sum Sq Mean Sq  F value  Pr(>F)    
time         1 194.087 194.087 534.3542 < 2e-16 ***
time:treat   1   2.077   2.077   5.7197 0.01792 *  
Residuals  162  58.841   0.363                     
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1   1

> UOP.kg.lme <- lme(UOP.kg~time*treat, random=list(id=pdDiag(~time)), 
                    na.action=na.omit, raw3.42)
> summary(UOP.kg.lme)
Linear mixed-effects model fit by REML
 Data: raw3.42 
       AIC      BIC    logLik
  225.7806 248.9037 -105.8903

Random effects:
 Formula: ~time | id
 Structure: Diagonal
        (Intercept)      time  Residual
StdDev:   0.6817425 0.5121545 0.1780466

Fixed effects: UOP.kg ~ time + treat + time:treat 
                 Value Std.Error  DF   t-value p-value
(Intercept)  0.5901420 0.1480515 162  3.986059  0.0001
time         0.8623864 0.1104533 162  7.807701  0.0000
treat       -0.2144487 0.2174843  39 -0.986042  0.3302
time:treat   0.1979578 0.1622534 162  1.220053  0.2242
 Correlation: 
           (Intr) time   treat 
time       -0.023              
treat      -0.681  0.016       
time:treat  0.016 -0.681 -0.023

Standardized Within-Group Residuals:
         Min           Q1          Med           Q3          Max 
-3.198315285 -0.384858426  0.002705899  0.404637305  2.049705655 

Number of Observations: 205
Number of Groups: 41 

คำตอบ:


19

จากคำอธิบายของคุณปรากฏว่าคุณมีรูปแบบการวัดซ้ำด้วยปัจจัยการรักษาเดียว เนื่องจากฉันไม่สามารถเข้าถึงชุดข้อมูล ( raw3.42) ฉันจะใช้ข้อมูล Orthodont จากnlmeแพ็คเกจเพื่อแสดงสิ่งที่เกิดขึ้นที่นี่ โครงสร้างข้อมูลเหมือนกัน (วัดซ้ำสำหรับสองกลุ่มที่แตกต่างกัน - ในกรณีนี้ชายและหญิง)

หากคุณเรียกใช้รหัสต่อไปนี้:

library(nlme)
data(Orthodont)

res <- lme(distance ~ age*Sex, random = ~ 1 | Subject, data = Orthodont)
anova(res)

คุณจะได้รับผลลัพธ์ต่อไปนี้:

            numDF denDF  F-value p-value
(Intercept)     1    79 4123.156  <.0001
age             1    79  122.450  <.0001
Sex             1    25    9.292  0.0054
age:Sex         1    79    6.303  0.0141

หากคุณทำงาน:

res <- aov(distance ~ age*Sex + Error(Subject), data = Orthodont)
summary(res)

คุณจะได้รับ:

Error: Subject
          Df Sum Sq Mean Sq F value   Pr(>F)   
Sex        1 140.46 140.465  9.2921 0.005375 **
Residuals 25 377.91  15.117                    

Error: Within
          Df  Sum Sq Mean Sq  F value  Pr(>F)    
age        1 235.356 235.356 122.4502 < 2e-16 ***
age:Sex    1  12.114  12.114   6.3027 0.01410 *  
Residuals 79 151.842   1.922                     

โปรดทราบว่าการทดสอบ F เหมือนกันทุกประการ

สำหรับlme()คุณใช้list(id=pdDiag(~time))ซึ่งไม่เพียง แต่เพิ่มการสกัดกั้นแบบสุ่มไปยังโมเดล แต่ยังรวมถึงความชันแบบสุ่ม ยิ่งไปกว่านั้นโดยการใช้pdDiagคุณกำลังตั้งค่าสหสัมพันธ์ระหว่างการสกัดกั้นแบบสุ่มและความชันเป็นศูนย์ นี่คือรูปแบบที่แตกต่างจากที่คุณระบุผ่านaov()และด้วยเหตุนี้คุณจึงได้ผลลัพธ์ที่แตกต่าง


ขอบคุณ @ Wolfgang; คำอธิบายของคุณช่วยได้มาก คำถามติดตามที่ฉันมีอยู่ตอนนี้ ฉันกำลังวิเคราะห์รูปแบบการวัดซ้ำด้วยปัจจัยการรักษาเดียว แต่ละเรื่องจะถูกสุ่มเลือกให้ทำการรักษา A หรือ B จากนั้นจะทำการวัดที่ 0 นาที 15 นาที 30 นาที 60 นาที 120 นาทีและ 180 นาที จากความเข้าใจของฉันเวลาควรเป็นปัจจัยสุ่มเพราะเป็นเพียงตัวอย่างจากเวลา 0 ถึง 180 นาที ดังนั้นฉันควรทำอย่างไร: lme (UOP.kg ~ time * treat, random = ~ time | id, raw3.42)?
biostat_newbie

ใช่ แต่ฉันจะคิดแบบนี้: คุณให้การสกัดกั้นและความชันของเส้นการถดถอย (ของ UOP.kg ตรงเวลา) แตกต่างกัน (สุ่ม) ระหว่างอาสาสมัครในกลุ่มการรักษาเดียวกัน นี่คือสิ่งที่สุ่ม = ~ time | id ที่จะทำ สิ่งที่แบบจำลองนั้นจะบอกคุณคือจำนวนความแปรปรวนโดยประมาณในจุดตัดและทางลาด ยิ่งไปกว่านั้นเวลา: รักษาระยะการปฏิสัมพันธ์แสดงให้เห็นว่าความลาดชันเฉลี่ยนั้นแตกต่างกันสำหรับ A และ B หรือไม่
Wolfgang

ขอบคุณ @ Wolfgang! ฉันสามารถใช้Error(Subject/age)เนื่องจากฉันค้นหาบทช่วยสอนบอกว่านั่น/ageหมายถึงการวัดซ้ำตามปัจจัยนั้นหรือไม่? นี่เป็นสิ่งเดียวกับคุณError(Subject)หรือไม่ คำถามอื่นคือ: สำหรับข้อมูลที่ไม่สมดุลaovและlmeอาจมีผลลัพธ์ที่แตกต่างใช่ไหม
breezeintopl

1

ฉันจะเพิ่มที่คุณอาจต้องการติดตั้งcarแพคเกจและใช้Anova()ที่แพคเกจนี้ให้แทนanova()เพราะสำหรับaov()และlm()วัตถุ, วานิลลาanova()ใช้ผลรวมของสี่เหลี่ยมที่เรียงลำดับซึ่งให้ผลที่ไม่ถูกต้องสำหรับขนาดตัวอย่างที่ไม่เท่ากันในขณะที่lme()มันใช้ทั้งชนิด - ฉันหรือผลรวมของสี่เหลี่ยมจัตุรัส-III ขึ้นอยู่กับtypeอาร์กิวเมนต์ แต่ผลรวมสี่เหลี่ยมจัตุรัส Type-III ของละเมิดความเป็นชายขอบ - นั่นคือการโต้ตอบจะไม่แตกต่างจากเอฟเฟกต์หลัก

รายการ R-help ไม่มีอะไรดีที่จะพูดเกี่ยวกับผลบวกของ type-I และ type-III ของสี่เหลี่ยมจัตุรัส แต่นี่เป็นเพียงตัวเลือกเท่านั้น! ไปคิด

แก้ไข: จริง ๆ แล้วดูเหมือนว่า type-II จะไม่ถูกต้องหากมีคำศัพท์ที่สำคัญและดูเหมือนว่าทุกคนที่ดีที่สุดสามารถทำได้คือใช้ type-III เมื่อมีการโต้ตอบ ฉันได้รับคำตอบโดยหนึ่งในคำถามของฉันที่ชี้ไปที่โพสต์นี้


0

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

dat.agg <- aggregate(UOP.kg ~ time + treat + id, raw3.42, mean)

จากนั้นรันโมเดล aov ของคุณเหมือนก่อนแทนที่ข้อมูลด้วย dat.agg

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

(BTW ถ้าคุณทำการวิเคราะห์ lme กับข้อมูลรวมซึ่งคุณไม่ควรและตรวจสอบ anova (lme) คุณจะได้ผลลัพธ์เกือบเท่ากับ aov)

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