Яка різниця між використанням 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), я буду використовувати дані ортодонта з 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; ваше пояснення дуже допомагає. Наступне питання, яке у мене тоді, це таке. Я дійсно аналізую модель повторних заходів з одним фактором лікування. Кожному суб'єкту довільно призначено або лікування А, або В. Потім вони вимірюються за 0 хв, 15 хв, 30 хв, 60 хв, 120 хв і 180 хв. З мого розуміння, час має бути випадковим фактором, оскільки це просто зразки часу від 0 до 180 хвилин. Отже, я повинен робити: lme (UOP.kg ~ час * лікування, випадковий = ~ час | id, raw3.42)?
biostat_newbie

Так, але я думаю про це так: Ви по суті дозволяєте перехопленню та нахилу лінії регресії (UOP.kg вчасно) відрізнятися (випадковим чином) між суб'єктами в межах однієї групи лікування. Це те, що буде робити випадковий = ~ час | id. Тоді, що модель вам скаже, це орієнтовна кількість змінності в перехопленнях і нахилах. Більше того, час: термін взаємодії трактату вказує на те, чи відрізняється середній нахил для A і B.
Вольфганг

Дякую @Wolfgang! Чи можу я скористатися Error(Subject/age), коли я подивився якийсь підручник, кажучи, що це /ageозначає повторну міру за цим фактором? Це те саме, що і ваше Error(Subject)? Інше питання: для незбалансованих даних aovі вони lmeможуть мати різні результати, правда?
breezeintopl

1

Я просто додаю, що ви можете встановити carпакунок і використовувати Anova()цей пакет, а не для, anova()тому що для aov()і lm()об'єктів ваніль anova()використовує послідовну суму квадратів, що дає неправильний результат для нерівних розмірів вибірки, тоді як для lme()неї використовується або тип - Я або сума квадратів III типу залежно від typeаргументу, але сума III типу квадратів порушує маргінальність - тобто вона розглядає взаємодії не інакше, ніж основні ефекти.

У списку R-довідки нічого хорошого не можна сказати про суми квадратів I та III типу, але це єдині варіанти! Піди розберися.

Редагувати: Насправді, схоже, тип II не є дійсним, якщо є значний термін взаємодії, і, здається, найкраще, що можна зробити, - це використовувати тип III, коли є взаємодії. Я підказав на це відповідь на одне із моїх власних питань, яке в свою чергу вказувало мені на цю посаду .


0

Мені здається, у вас є кілька заходів для кожного ідентифікатора кожного разу. Вам потрібно зібрати їх для АВВ, оскільки це несправедливо збільшує потужність у цьому аналізі. Я не кажу, що виконання сукупності зробить результати однаковими, але це повинно зробити їх більш схожими.

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

Потім запустіть модель aov, як і раніше, замінивши дані на dat.agg.

Також я вважаю, що anova (lme) - це більше, що ви хочете зробити, щоб порівняти результати. Напрямок і величина ефекту не збігаються з відношенням дисперсії моделі до похибки.

(BTW, якщо робити аналіз lme на сукупних даних, чого не слід, і перевірити anova (lme), ви отримаєте майже ті ж результати, що і aov)

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.