Entonces, me parece que la función de pesos en lm da más peso a las observaciones cuanto mayor sea el valor de "peso" de la observación asociada, mientras que la función lme en lme hace exactamente lo contrario. Esto se puede verificar con una simple simulación.
#make 3 vectors- c is used as an uninformative random effect for the lme model
a<-c(1:10)
b<-c(2,4,6,8,10,100,14,16,18,20)
c<-c(1,1,1,1,1,1,1,1,1,1)
Si ahora ejecutara un modelo donde ponderara las observaciones basadas en el inverso de la variable dependiente en lm, solo podría generar exactamente el mismo resultado en nlme si pesa solo con la variable dependiente, sin tomar el inverso.
summary(lm(b~a,weights=1/b))
summary(lme(b~a,random=~1|c,weights=~b))
Puede voltear esto y ver que lo contrario es cierto: especificar pesos = b en lm requiere pesos = 1 / b para obtener un resultado lme coincidente.
Entonces, entiendo esto, solo quiero validar una cosa y hacer una pregunta sobre otra.
- Si quiero ponderar mis datos basados en el inverso de la variable dependiente, ¿está bien codificar pesos = ~ (variable dependiente) dentro de lme?
- ¿Por qué se escribe lme para manejar pesos completamente diferentes a lm? ¿Cuál es el propósito de esto aparte de generar confusión?
¡Cualquier idea sería apreciada!
lm()
necesitaba ser compatible con S y varios libros, nlme no lo hizo, y pretendía ser más flexible, permitiendo que la heterogeneidad se modelara de manera más flexible de lo quelm
permite.Respuestas:
Q1
Ens2( v ) s2( v ) = | v | v
lme
la notaciónweights = ~ b
, lavarFixed
función de varianza se usaría con un único argumentob
. Esta función agregaría al modelo una función de varianza que tiene la forma, donde toma los valores del argumento vector .b
Por lo tanto, se debe utilizarεyo= 1 /siyo
weights = ~ I(1/b)
enlme()
tener la varianza de .En
lm
lo que pasaweights
parece ser exactamente lo contrario;weights
es inversamente proporcional a la varianza.No estoy 100% seguro de lo que quiere decir por peso de mis datos , pero si se refiere a proporcionar la variación heterogénea de las observaciones, entonces creo que quiere
weights = ~ I(1/b)
.Q2
Mi primera impresión (que tendría que preguntar a los respectivos autores de las dos funciones) es que esto es por culpa
lm()
ylme()
fueron escritos por personas muy diferentes de hacer las cosas muy diferentes.lm()
necesitaba (se deseaba que fuera) para ser compatible con S y varios libros, nlme no, y pretendía ser más flexible, permitiendo modelar la heterogeneidad de manera más flexible de lo quelm
permite mediante el uso de funciones de varianza a través de lavarFunc
infraestructura.fuente
b
. Parece mejor decir que la varianza aumentó conb
.varPower()
por ejemplo tendría la varianza comob
no toma 0 valores. Si puede tomar valores 0, entonces lavarExp()
función puede ser mejor, allí la varianza eslm()
, tenga en cuenta la redacción de que la varianza es proporcional a la inversa deweights
. En ellme
código que discutimos,b
es la varianza. Siguiendo su explicación, no creo que realmente quiera eso ... También tenga en cuenta que si la varianza aumenta con la respuesta media, entonces un GLMM puede ser apropiado y el paquete lme4 sería adecuado, ya que puede modelar la relación media-varianza directamente , en lugar de mediante la modificación de la matriz de covarianza, que es lolme
que está haciendo el código.