Багаторазове порівняння на моделі змішаних ефектів


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

    Що це означає? Чи можна сміливо це ігнорувати? Або що мені робити, щоб цього уникнути?

EDIT: Я знайшов цей PDF, який говорить:

Оскільки в цьому випадку неможливо визначити параметри, що цікавлять, mcp () у мультикомплекті за замовчуванням генерує порівняння лише для основних ефектів, ігноруючи коваріати та взаємодії . Починаючи з версії 1.1-2, можна вказати середнє значення за термінами взаємодії та коваріатами, використовуючи аргументи взаємодії_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аргумент може взяти матрицю коефіцієнтів для контрастів - таким чином ви зможете встановити саме ті порівняння, які вам потрібно.

EDIT

У коментарях з'являється деяке занепокоєння, що модель, оснащена TimeGenoпровісником, відрізняється від оригінальної моделі, встановленої передбачуваним Time * Genotype. Це не так , моделі рівноцінні. Єдина відмінність полягає в параметризації фіксованих ефектів, яка встановлюється для полегшення використання glhtфункції.

Я використовував один із вбудованих наборів даних (у нього дієта замість генотипу), щоб продемонструвати, що два підходи мають однакову ймовірність, прогнозовані значення тощо:

> # 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-моделі. Я не впевнений, що ці ступені свободи підходять ...?
Стефан Лоран

2
Мені також цікаво, як це найкраще зробити. Цей підхід, однак, дає ефекти від іншої моделі - тієї, яка по суті є лише тестом на взаємодію. Друга модель взагалі не включає два потенційні основні ефекти. Здається, це не є відповідним методом перевірки ефектів у першій моделі.
Маркус Моррісей

@Aniko, я думав поєднати 2-х категоричних змінних в одну, як ви це робили, але я вагався, тому що лише одна зі змінних знаходиться в межах теми, інша - між. Чи можете ви підтвердити, що це не має значення? Я помітив, що у прикладі, який ви зберігаєте, Animal/timeякий зараз не є одним із факторів. Чи справді lme understandце?
toto_tico

@toto_tico, я відредагував відповідь, щоб показати, що друга модель еквівалентна першій.
Аніко

3
@toto_tico, я наводив вам відтворюваний приклад. Чому б не спробувати all.equal(resid(model1), resid(model2))і не переконатися, що вони однакові, перш ніж здогадатися про інше? Тільки параметризація фіксованих ефектів відрізняється. TimeDietне є чистим терміном взаємодії, і він не еквівалент Time:Diet, а скоріше Time + Diet + Time:Diet.
Аніко
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.