Відмінності між PROC змішаними та lme / lmer у R - ступенями свободи


12

Примітка: це запитання є репостом, оскільки моє попереднє питання довелося видалити з юридичних причин.


Порівнюючи PROC MIXED від SAS з функцією lmeз nlmeпакету в R, я натрапив на деякі досить заплутані відмінності. Більш конкретно, ступеня свободи в різних випробувань відрізняються між PROC MIXEDі lme, і я задавався питанням, чому.

Почніть з наступного набору даних (код R подано нижче):

  • ind: коефіцієнт, що вказує на особу, де проводиться вимірювання
  • fac: орган, де проводиться вимірювання
  • trt: фактор, що вказує на лікування
  • y: деяка змінна безперервної відповіді

Ідея полягає у створенні наступних простих моделей:

y ~ trt + (ind): indяк випадковий фактор y ~ trt + (fac(ind)): facвкладений indяк випадковий фактор

Зауважте, що остання модель повинна викликати особливості, оскільки існує лише 1 значення yдля кожної комбінації indта fac.

Перша модель

У SAS я будую таку модель:

PROC MIXED data=Data;
    CLASS ind fac trt;
    MODEL y = trt /s;
    RANDOM ind /s;
run;

Відповідно до навчальних посібників, однакова модель використання R nlmeмає бути:

> require(nlme)
> options(contrasts=c(factor="contr.SAS",ordered="contr.poly"))
> m2<-lme(y~trt,random=~1|ind,data=Data)

Обидві моделі дають однакові оцінки коефіцієнтів та їх SE, але, проводячи тест на F для ефекту trt, вони використовують різну кількість ступенів свободи:

SAS : 
Type 3 Tests of Fixed Effects 
Effect Num DF Den DF     F  Value Pr > F 
trt         1      8  0.89        0.3724 

R : 
> anova(m2)
            numDF denDF  F-value p-value
(Intercept)     1     8 70.96836  <.0001
trt             1     6  0.89272  0.3812

Питання1: Яка різниця між обома тестами? Обидва пристосовані за допомогою REML і використовують однакові контрасти.

ПРИМІТКА. Я спробував різні значення для параметра DDFM = (включаючи BETWITHIN, який теоретично повинен дати ті ж результати, що і lme)

Друга модель

У SAS:

PROC MIXED data=Data;
    CLASS ind fac trt;
    MODEL y = trt /s;
    RANDOM fac(ind) /s;
run;

Еквівалентною моделлю в R має бути:

> m4<-lme(y~trt,random=~1|ind/fac,data=Data)

У цьому випадку є деякі дуже дивні відмінності:

  • R підходить без нарікань, тоді як SAS зазначає, що остаточний гессіан не є позитивним (що мене трохи не дивує, див. Вище)
  • SE за коефіцієнтами різняться (менше в SAS)
  • Знову ж таки, F-тест використовував іншу кількість DF (насправді в SAS ця сума = 0)

Вихід SAS:

Effect     trt Estimate Std Error  DF t Value Pr > |t| 
Intercept        0.8863    0.1192  14    7.43 <.0001 
trt       Cont  -0.1788    0.1686   0   -1.06 . 

R Вихід:

> summary(m4)
...
Fixed effects: y ~ trt 
               Value Std.Error DF   t-value p-value
(Intercept)  0.88625 0.1337743  8  6.624963  0.0002
trtCont     -0.17875 0.1891855  6 -0.944840  0.3812
...

(Зверніть увагу, що в цьому випадку тест F і T еквівалентний і використовують один і той же DF.)

Цікаво, що при використанні lme4в R модель навіть не підходить:

> require(lme4)
> m4r <- lmer(y~trt+(1|ind/fac),data=Data)
Error in function (fr, FL, start, REML, verbose)  : 
  Number of levels of a grouping factor for the random effects
must be less than the number of observations

Питання 2 : Чим відрізняються ці моделі від вкладених факторів? Чи правильно вони вказані і якщо так, то наскільки результати настільки різні?


Модельовані дані в R:

Data <- structure(list(y = c(1.05, 0.86, 1.02, 1.14, 0.68, 1.05, 0.22, 
1.07, 0.46, 0.65, 0.41, 0.82, 0.6, 0.49, 0.68, 1.55), ind = structure(c(1L, 
2L, 3L, 1L, 3L, 4L, 4L, 2L, 5L, 6L, 7L, 8L, 6L, 5L, 7L, 8L), .Label = c("1", 
"2", "3", "4", "5", "6", "7", "8"), class = "factor"), fac = structure(c(1L, 
1L, 1L, 2L, 2L, 1L, 2L, 2L, 2L, 1L, 1L, 1L, 2L, 1L, 2L, 2L), .Label = c("l", 
"r"), class = "factor"), trt = structure(c(2L, 2L, 2L, 2L, 2L, 
2L, 2L, 2L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L), .Label = c("Cont", 
"Treat"), class = "factor")), .Names = c("y", "ind", "fac", "trt"
), row.names = c(NA, -16L), class = "data.frame")

Модельовані дані:

   y ind fac   trt
1.05   1   l Treat
0.86   2   l Treat
1.02   3   l Treat
1.14   1   r Treat
0.68   3   r Treat
1.05   4   l Treat
0.22   4   r Treat
1.07   2   r Treat
0.46   5   r  Cont
0.65   6   l  Cont
0.41   7   l  Cont
0.82   8   l  Cont
0.60   6   r  Cont
0.49   5   l  Cont
0.68   7   r  Cont
1.55   8   r  Cont

@Aaron: Будь ласка, знайдіть свою відповідь у цій публікації. Якщо ви зможете скопіювати та вставити це як відповідь, я даю вам відповідь. Це було дуже корисно, тому я дуже хочу тримати його тут у перекваліфікованому вигляді. Після того як ви це зробите, я видаляю вашу відповідь з питання.
Joris Meys

Я намагаюсь змусити команду відродити ваш оригінальний Q за допомогою цієї невдалої редакції, яку викреслили назавжди - тому є великий шанс відновити оригінальні відповіді та об'єднати їх тут.

@mbq: Це було б добре, хоча я імітував деякі дані (які я тут використовую) і відповідно відредагував відповідь Аарона. Що стосується іншої відповіді, це буде трохи складніше, але я також можу спробувати.
Joris Meys

Відповідь Аарона - неймовірно хороша. Я сподіваюся, що вони це побачать. На жаль, ваш @Aaron не зв’яжеться з ним, якщо він не брав участь у цій темі.
Уейн

1
Так, це була приємна відповідь. Тут я дав посилання на видалену публікацію: stats.stackexchange.com/questions/26556/… Я збираюся додати посилання до цієї публікації.
Стефан Лоран

Відповіді:


11

Для першого питання метод за замовчуванням у SAS для пошуку df не дуже розумний; він шукає терміни у випадковому ефекті, який синтаксично включає фіксований ефект, і використовує це. У цьому випадку, оскільки trtйого не знайдено ind, він не робить правильно. Я ніколи не пробував BETWITHINі не знаю деталей, але або варіант Satterthwaite ( satterth), або використання ind*trtв якості випадкового ефекту дає правильні результати.

PROC MIXED data=Data;
    CLASS ind fac trt;
    MODEL y = trt /s ddfm=satterth;
    RANDOM ind /s;
run;

PROC MIXED data=Data;
    CLASS ind fac trt;
    MODEL y = trt /s;
    RANDOM ind*trt /s;
run;

Щодо другого питання, ваш код SAS не зовсім відповідає вашому R-коду; він має лише термін для fac*ind, в той час як R код має термін і для, indі для fac*ind. (Див. Висновок "Варіантні компоненти", щоб побачити це.) Додавання цього дає однаковий SE для trtвсіх моделей як у Q1, так і в Q2 (0.1892).

Як ви зазначаєте, це незвичайна модель, яка підходить, оскільки fac*indтермін має одне спостереження для кожного рівня, тому еквівалентний терміну помилки. Це відображається на виході SAS, де fac*indтермін має нульову дисперсію. Про це також говорить вам повідомлення про помилку lme4; Причиною помилки є те, що ви, швидше за все, неправильно уточнили щось, оскільки ви включаєте термін помилки в модель двома різними способами. Цікаво, що в моделі nlme є одна незначна різниця; це якимось чином знайти термін дисперсії для fac*indтерміна, крім терміна помилки, але ви помітите, що сума цих двох дисперсій дорівнює терміну помилки як SAS, так і nlme без fac*indтерміна. Однак SE для trtзалишається таким же (0,1892), як trtі вкладене вind, тому ці нижчі умови дисперсії на це не впливають.

Нарешті, загальна примітка про ступінь свободи в цих моделях: Вони обчислюються після відповідності моделі, і тому різниця в ступенях свободи між різними програмами або варіантами програми не обов'язково означає, що модель підходить по-різному. Для цього потрібно переглянути оцінки параметрів, як параметрів фіксованого ефекту, так і параметрів коваріації.

Також використання наближень t і F з заданою кількістю ступенів свободи є досить суперечливим. Мало того, що існує декілька способів наближення df, деякі вважають, що практика цього не є хорошою ідеєю. Пару слів:

  1. Якщо все збалансовано, порівняйте результати з традиційним методом найменших квадратів, як вони повинні погодитися. Якщо він близький до врівноваженого, обчисліть їх самостійно (припускаючи баланс), щоб ви могли переконатися, що ті, які ви використовуєте, знаходяться у правильному бальному парку.

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

  3. Перевірте методи Дуга Бейтса для висновку. Його старший метод заснований на моделюванні MCMC; його новіший метод заснований на визначенні ймовірності.


Дійсно, хороша відповідь, хоча я думаю, що профілювання ймовірності вирішує інше питання (відповідні ІС щодо параметрів дисперсії, коли профіль не квадратичний), ніж проведення моделювання MCMC (яке обробляє як корекцію кінцевих розмірів, так і неквадратичність). Я думаю, що bootMer (параметрична завантажувальна програма) ближче до еквівалента для mcmcsamp, ніж confint (профіль (...)) ...
Бен Болкер

@BenBolker: Звичайно, може бути. Дуг Бейтс виступив тут у минулому місяці, і він розповів про свої ідеї щодо визначення ймовірності. Це про все, що я про це знаю поки що.
Аарон залишив Стек Переповнення
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.