lme () та lmer (), що дають суперечливі результати


20

Я працював з деякими даними, які мають певні проблеми з повторними вимірюваннями. Роблячи це, я помітив дуже різну поведінку між lme()і lmer()використовуючи свої тестові дані, і хочу знати, чому.

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

set.seed(21)
Height=1:10; Height=Height+runif(10,min=0,max=3) #First height measurement
Weight=1:10; Weight=Weight+runif(10,min=0,max=3) #First weight measurement

Height2=Height+runif(10,min=0,max=1) #second height measurement
Weight2=Weight-runif(10,min=0,max=1) #second weight measurement

Height=c(Height,Height2) #combine height and wight measurements
Weight=c(Weight,Weight2)

DF=data.frame(Height,Weight) #generate data frame
DF$ID=as.factor(rep(1:10,2)) #add subject ID
DF$Number=as.factor(c(rep(1,10),rep(2,10))) #differentiate between first and second measurement

Ось графік даних, з лініями, що з'єднують два вимірювання від кожної людини. введіть тут опис зображення

Так що я провів дві моделі, одна з lme()з nlmeпакета і один з lmer()від lme4. В обох випадках я провів регресію ваги проти висоти з випадковим ефектом ID для контролю повторних вимірювань кожної людини.

library(nlme)
Mlme=lme(Height~Weight,random=~1|ID,data=DF)
library(lme4)
Mlmer=lmer(Height~Weight+(1|ID),data=DF)

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

coef(Mlme)
#   (Intercept)    Weight
#1   1.57102183 0.7477639
#2  -0.08765784 0.7477639
#3   3.33128509 0.7477639
#4   1.09639883 0.7477639
#5   4.08969282 0.7477639
#6   4.48649982 0.7477639
#7   1.37824171 0.7477639
#8   2.54690995 0.7477639
#9   4.43051687 0.7477639
#10  4.04812243 0.7477639

coef(Mlmer)
#   (Intercept)    Weight
#1     4.689264 -0.516824
#2     5.427231 -0.516824
#3     6.943274 -0.516824
#4     7.832617 -0.516824
#5    10.656164 -0.516824
#6    12.256954 -0.516824
#7    11.963619 -0.516824
#8    13.304242 -0.516824
#9    17.637284 -0.516824
#10   18.883624 -0.516824

Щоб наочно проілюструвати, моделюйте с lme()

введіть тут опис зображення

І модель з lmer()

введіть тут опис зображення

Чому ці моделі розходяться настільки багато?


2
Який класний приклад. Це також корисний приклад випадку, коли підгонка фіксованих проти випадкових ефектів окремих дає абсолютно різні оцінки коефіцієнта для вагового терміну.
Яків Соколар

Відповіді:


25

tl; dr, якщо ви зміните оптимізатор на "nloptwrap", я думаю, це дозволить уникнути цих проблем (напевно).

Вітаємо, Ви знайшли один із найпростіших прикладів множинних оптими в статистичній оцінці! Параметр, який lme4використовується внутрішньо (що зручно для ілюстрації), - це масштабоване стандартне відхилення випадкових ефектів, тобто середній груповий std dev, поділений на залишковий std dev.

Витягніть ці значення для оригіналу lmeі lmerпідходить:

(sd1 <- sqrt(getVarCov(Mlme)[[1]])/sigma(Mlme))
## 2.332469
(sd2 <- getME(Mlmer,"theta")) ## 14.48926

Перегляньте за допомогою іншого оптимізатора (можливо, це буде за замовчуванням у наступному випуску lme4):

Mlmer2 <- update(Mlmer,
  control=lmerControl(optimizer="nloptwrap"))
sd3 <- getME(Mlmer2,"theta")   ## 2.33247

Матчі lme... давайте подивимося, що відбувається. Функція відхилення (вірогідність логіки -2 *), або в цьому випадку аналогічна REML-критеріальна функція, для ЛММ з єдиним випадковим ефектом бере лише один аргумент, оскільки параметри фіксованого ефекту профільовані ; їх можна обчислити автоматично для заданого значення стандартного відхилення RE.

ff <- as.function(Mlmer)
tvec <- seq(0,20,length=101)
Lvec <- sapply(tvec,ff)
png("CV38425.png")
par(bty="l",las=1)
plot(tvec,Lvec,type="l",
     ylab="REML criterion",
     xlab="scaled random effects standard deviation")
abline(v=1,lty=2)
points(sd1,ff(sd1),pch=16,col=1)
points(sd2,ff(sd2),pch=16,col=2)
points(sd3,ff(sd3),pch=1,col=4)
dev.off()

введіть тут опис зображення

Я продовжував далі зациклюватися на цьому і побіг припадки для випадкових насіння від 1 до 1000, установки lme, lmerі lmer+ nloptwrap для кожного випадку. Ось цифри з 1000, де заданий метод отримує відповіді, що принаймні 0,001 одиниці відхилення гірші за інший ...

          lme.dev lmer.dev lmer2.dev
lme.dev         0       64        61
lmer.dev      369        0       326
lmer2.dev      43        3         0

Іншими словами, (1) не існує методу, який завжди найкраще працює; (2) lmerз оптимізатором за замовчуванням найгірше (виходить з ладу приблизно в 1/3 часу); (3) lmerнайкраще "nloptwrap" (гірше lme4% часу, рідше гірше lmer).

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

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