Чому SAS PROC GLIMMIX дає мені ДУЖЕ різні випадкові нахили, ніж glmer (lme4) для двочленного glmm


12

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

Я використовую 64-розрядний комп'ютер Windows.

У R версії 3.1.0 я використовую наведені нижче дані та вирази. PS, TH, RS та HW - це фіксовані ефекти (стандартизовані, вимірювані відстані до типів середовища проживання). lme4 V 1.1-7.

str(dat)
'data.frame':   359756 obs. of  7 variables:
 $ use     : num  1 1 1 1 1 1 1 1 1 1 ...
 $ Year    : Factor w/ 5 levels "1","2","3","4",..: 4 4 4 4 4 4 4 4 3 4 ...
 $ ID      : num  306 306 306 306 306 306 306 306 162 306 ...
 $ PS: num  -0.32 -0.317 -0.317 -0.318 -0.317 ...
 $ TH: num  -0.211 -0.211 -0.211 -0.213 -0.22 ...
 $ RS: num  -0.337 -0.337 -0.337 -0.337 -0.337 ...
 $ HW: num  -0.0258 -0.19 -0.19 -0.19 -0.4561 ...

glmer(use ~  PS + TH + RS + HW +
     (1 + PS + TH + RS + HW |ID/Year),
     family = binomial, data = dat, control=glmerControl(optimizer="bobyqa"))

glmer дає мені оцінки параметрів фіксованих ефектів, які мають для мене сенс, а випадкові нахили (які я трактую як коефіцієнти відбору до кожного типу середовища проживання) також мають сенс, коли я якісно досліджую дані. Імовірність журналу для моделі становить -3050,8.

Однак більшість досліджень в екології тварин не використовують R, оскільки за даними про місцезнаходження тварин просторова автокореляція може зробити стандартні помилки, схильні до помилок типу I. Хоча R використовує стандартні помилки на основі моделі, переважні емпіричні (також Хубер-білі або сендвіч) стандартні помилки.

Поки R наразі не пропонує цей варіант (наскільки мені відомо - БУДЬ ЛАСКА, виправте мене, якщо я помиляюся), SAS робить - хоча я не маю доступу до SAS, колега погодився дозволити мені позичити його комп'ютер, щоб визначити, чи є стандартні помилки істотно змінюються, коли використовується емпіричний метод.

По-перше, ми хотіли переконатися, що при використанні стандартних помилок на основі моделі SAS виробляє аналогічні оцінки R - щоб бути впевненим, що модель задається однаково в обох програмах. Мені байдуже, чи вони однакові - просто схожі. Я спробував (SAS V 9.2):

proc glimmix data=dat method=laplace;
   class year id;
   model use =  PS TH RS HW / dist=bin solution ddfm=betwithin;
   random intercept PS TH RS HW / subject = year(id) solution type=UN;
run;title;

Я також спробував різні інші форми, такі як додавання рядків

random intercept / subject = year(id) solution type=UN;
random intercept PS TH RS HW / subject = id solution type=UN;

Я спробував, не вказуючи

solution type = UN,

або коментуючи

ddfm=betwithin;

Незалежно від того, як ми визначаємо модель (і ми намагалися багатьма способами), я не можу отримати випадкові нахили в SAS, щоб віддалено нагадувати вихідний з R - навіть якщо фіксовані ефекти досить схожі. А коли я маю на увазі різні, то я маю на увазі, що навіть знаки не однакові. Імовірність -2 журналу в SAS склала 71344,94.

Не можу завантажити повний набір даних; тому я зробив набір іграшок із лише записами трьох осіб. SAS дає мені вихід за кілька хвилин; в R це займає більше години. Дивно. За допомогою цього набору даних про іграшки я отримую різні оцінки фіксованих ефектів.

Моє запитання: Чи може хтось пролити світло на те, чому оцінки випадкових нахилів можуть бути настільки різними між R та SAS? Чи можу я зробити R або SAS, щоб змінити код, щоб дзвінки давали подібні результати? Я вважаю за краще змінити код в SAS, оскільки я "вірю", що моя R оцінює більше.

Я справді переймаюся цими відмінностями і хочу дійти до суті цієї проблеми!

Мій вихід із набору даних про іграшки, який використовує лише три з 35 осіб у повному наборі даних для R та SAS, включений як jpegs.

R вихід Вихід SAS 1 Вихід SAS 2 Вихід SAS 3


Редагування та оновлення:

Як @JakeWestfall допоміг виявити, схили в SAS не включають фіксованих ефектів. Коли я додаю фіксовані ефекти, ось результат - порівняння нахилів R з нахилами SAS для одного фіксованого ефекту, "PS", між програмами: (коефіцієнт вибору = випадковий нахил). Зверніть увагу на збільшення варіації SAS.

R проти SAS для PS


Я помічаю, що IDце не є фактором R; перевірте і подивіться, чи це щось змінить.
Аарон вийшов із переповнення стека

Я бачу, що ви обидва використовуєте наближення Лапласа для вірогідності журналу. Які їх відповідні показники вірогідності журналу?
usεr11852

1
Ви перевірили, чи моделюєте залежну змінну в одному напрямку?
Пітер Флом - Відновити Моніку

1
До речі, Петро досягає того, що за замовчуванням з біноміальними даними, позначеними 0s і 1s, Rбуде моделювати ймовірність відповіді "1", тоді як SAS буде моделювати ймовірність відповіді "0". Щоб зробити модель SAS вірогідністю "1", вам потрібно написати свою змінну відповіді як use(event='1'). Звичайно, навіть не роблячи цього, я вважаю, що все одно слід очікувати однакових оцінок відхилень випадкових ефектів, а також тих самих оцінок фіксованого ефекту, хоча і з їхніми ознаками зворотні.
Джейк Вестфалл

1
@EricaN Одне, що ви мені просто нагадали, це те, що вам слід порівняти випадкові ефекти від R з ефектами в SAS, використовуючи ranef()функцію, а не coef(). Перший дає фактичні випадкові ефекти, тоді як останній дає випадкові ефекти плюс вектор фіксованих ефектів. Отже, це пояснює багато причин, по яких цифри, проілюстровані у вашій публікації, відрізняються, але все ще існує суттєва розбіжність, яку я не можу повністю пояснити.
Джейк Вестфалл

Відповіді:


11

Здається, що я не повинен був очікувати, що випадкові нахили будуть схожими між пакетами, згідно з Zhang et al. 2011 р. У своїй роботі " Встановлення узагальнених лінійних моделей змішаних ефектів для двійкових відповідей з використанням різних статистичних пакетів" вони описують:

Анотація:

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

Я сподіваюся, що @BenBolker та його команда розглянуть моє запитання як голосування за R, щоб включити емпіричні стандартні помилки та можливість квадратури Гаусса-Ерміта для моделей із кількома випадковими умовами нахилу, щоб заблищати, так як я вважаю за краще інтерфейс R і хотів би мати можливість застосувати кілька додаткових аналізів у цій програмі. На щастя, навіть якщо R і SAS не мають порівнянних значень для випадкових нахилів, загальні тенденції однакові. Дякую всім за ваш внесок, я дуже вдячний вашому часу та увазі!


Вибачте: що таке "стандартна стандартна помилка"? Ви маєте на увазі стандартні помилки компонентів дисперсії? Або ви маєте на увазі стандартні помилки сендвіч?
Бен Болкер

вибачте ... мав на увазі емпіричні / сендвіч SE. Я відредагував свою відповідь.
Нова

@BenBolker Чи це колись було включено?
Lepidopterist

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

4

Суміш відповіді та коментаря / більше запитань:

Я встановив набір даних "іграшки" з трьома різними варіантами оптимізатора. (* Примітка 1: мабуть, корисніше буде для порівняльних цілей зробити невеликий набір даних шляхом підсистеми зсередини кожного року та ідентифікатора, а не підсистеми змінних груп. Як це є, ми знаємо, що GLMM не буде виконувати особливо добре з такою невеликою кількістю групування змінних рівнів. Ви можете це зробити через щось на зразок:

library(plyr)
subdata <- ddply(fulldata,c("year","id"),
    function(x) x[sample(nrow(x),size=round(nrow(x)*0.1)),])

Код пристосування партії:

Ntoy <- readRDS("Newton_toy.RDS")
library(lme4)
fitfun <- function(opt) {
    tt <- system.time(fit1 <- glmer(use ~  ps + th + rs + hw +
                                    (1 + ps + th + rs + hw |id/year),
                                    family = binomial, data = Ntoy,
                                    control=glmerControl(optimizer=opt),
                                    verbose=100))
    return(list(time=tt,fit=fit1))
}

opts <- c("nloptwrap","nlminbwrap","bobyqa")
## use for() instead of lapply so we can checkpoint more easily
res <- setNames(vector("list",length(opts)),opts)
for (i in opts) {
    res[[i]] <- fitfun(i)
    save("res",file="Newton_batch.RData")
}

Потім я прочитав результати в новому сеансі:

load("Newton_batch.RData")
library(lme4)

Закінчений час та відхилення:

cbind(time=unname(sapply(res,function(x) x$time["elapsed"])),
          dev=sapply(res,function(x) deviance(x$fit)))
##                time      dev
## nloptwrap  1001.824 6067.706
## nlminbwrap 3495.671 6068.730
## bobyqa     4945.332 6068.731

Ці відхилення значно нижче відхилення, повідомленого ОП від R (6101.7), і трохи нижче тих, про які повідомляє ОП від SAS (6078.9), хоча порівнювати відхилення в пакетах не завжди є розумним.

Я дійсно був здивований, що SAS сходився лише в 100 оцінках функцій!

Час варіюється від 17 хвилин ( nloptwrap) до 80 хвилин ( bobyqa) на Macbook Pro, що відповідає досвіду роботи ОП. Девіант трохи краще nloptwrap.

round(cbind(sapply(res,function(x) fixef(x$fit))),3)
##             nloptwrap nlminbwrap bobyqa
## (Intercept)    -5.815     -5.322 -5.322
## ps             -0.989      0.171  0.171
## th             -0.033     -1.342 -1.341
## rs              1.361     -0.140 -0.139
## hw             -2.100     -2.082 -2.082

Відповіді виглядають досить різними, nloptwrapхоча стандартні помилки досить великі ...

round(coef(summary(res[[1]]$fit)),3)
##             Estimate Std. Error z value Pr(>|z|)
## (Intercept)   -5.815      0.750  -7.750    0.000
## ps            -0.989      1.275  -0.776    0.438
## th            -0.033      2.482  -0.013    0.989
## rs             1.361      2.799   0.486    0.627
## hw            -2.100      0.490  -4.283    0.000

(код тут дає деякі попередження про year:idте, що я повинен відстежувати)

Далі буде ... ?


було б корисніше, якби я надіслав вам повний набір даних? Єдина проблема полягає в тому, що конвергенція займає близько 9 годин з повним набором даних, тому ваша пропозиція щодо вибірки є хорошою. Я намагався перетворити дані за допомогою перетворення журналу, але бінний залишковий графік все ще некрасивий - ви вважаєте, залишковий графік пояснює частину проблеми з цими даними? Нарешті - чи були ваші результати в SAS подібними до R?
Нова
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.