Eu tenho trabalhado com alguns dados que têm alguns problemas com medições repetidas. Ao fazer isso, notei um comportamento muito diferente entre lme()
e lmer()
usando meus dados de teste e quero saber o porquê.
O conjunto de dados falsos que criei possui medidas de altura e peso para 10 indivíduos, tiradas duas vezes cada. Configurei os dados para que, entre os sujeitos, houvesse uma relação positiva entre altura e peso, mas uma relação negativa entre as medidas repetidas dentro de cada indivíduo.
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
Aqui está um gráfico dos dados, com linhas conectando as duas medidas de cada indivíduo.
Então, eu executei dois modelos, um com lme()
o nlme
pacote e outro com lmer()
from lme4
. Nos dois casos, executei uma regressão do peso contra a altura com um efeito aleatório da ID para controlar as medidas repetidas de cada indivíduo.
library(nlme)
Mlme=lme(Height~Weight,random=~1|ID,data=DF)
library(lme4)
Mlmer=lmer(Height~Weight+(1|ID),data=DF)
Esses dois modelos frequentemente (embora nem sempre dependendo da semente) geravam resultados completamente diferentes. Vi onde eles geram estimativas de variação ligeiramente diferentes, calculam diferentes graus de liberdade etc., mas aqui os coeficientes estão em direções opostas.
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
Para ilustrar visualmente, modele com lme()
E modelo com lmer()
Por que esses modelos divergem tanto?
fonte
Respostas:
tl; dr se você alterar o otimizador para "nloptwrap", acho que ele evitará esses problemas (provavelmente).
Parabéns, você encontrou um dos exemplos mais simples de ótimas ótimas em um problema de estimativa estatística! O parâmetro que
lme4
utiliza internamente (portanto, conveniente para ilustração) é o desvio padrão em escala dos efeitos aleatórios, ou seja, o desvio padrão entre os grupos dividido pelo desvio padrão do desvio residual.Extraia estes valores para o original
lme
elmer
ajuste:Instale novamente com outro otimizador (esse provavelmente será o padrão na próxima versão do
lme4
):Jogos
lme
... vamos ver o que está acontecendo. A função de desvio (-2 * log de verossimilhança) ou, neste caso, a função de critério REML análoga, para LMMs com um único efeito aleatório, usa apenas um argumento, porque os parâmetros de efeito fixo são definidos em perfil ; eles podem ser calculados automaticamente para um determinado valor do desvio padrão do ER.I continuou a obsess adicional sobre este e corri os ajustes para sementes aleatórios de 1 a 1000, encaixe
lme
,lmer
elmer
+ nloptwrap para cada caso. Aqui estão os números de 1000 em que um determinado método obtém respostas que são pelo menos 0,001 unidades de desvio piores que outras ...Em outras palavras, (1) não existe um método que sempre funcione melhor; (2)
lmer
com o otimizador padrão é o pior (falha cerca de 1/3 do tempo); (3)lmer
com "nloptwrap" é melhor (pior quelme
4% das vezes, raramente pior quelmer
).Para ser um pouco tranquilizador, acho que essa situação provavelmente será pior para casos pequenos e mal especificados (ou seja, o erro residual aqui é uniforme e não normal). Seria interessante explorar isso de forma mais sistemática ...
fonte