Soy un usuario más familiarizado con R, y he estado tratando de estimar pendientes aleatorias (coeficientes de selección) para aproximadamente 35 individuos durante 5 años para cuatro variables de hábitat. La variable de respuesta es si una ubicación fue "utilizada" (1) o "disponible" (0) hábitat ("uso" a continuación).
Estoy usando una computadora con Windows de 64 bits.
En R versión 3.1.0, uso los datos y la expresión a continuación. PS, TH, RS y HW son efectos fijos (distancia estandarizada y medida a los tipos de hábitat). 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 me da estimaciones de parámetros para los efectos fijos que tienen sentido para mí, y las pendientes aleatorias (que interpreto como coeficientes de selección para cada tipo de hábitat) también tienen sentido cuando investigo los datos cualitativamente. La probabilidad de registro para el modelo es -3050.8.
Sin embargo, la mayoría de las investigaciones en ecología animal no usan R porque con los datos de ubicación de los animales, la autocorrelación espacial puede hacer que los errores estándar sean propensos al error tipo I. Mientras que R usa errores estándar basados en el modelo, se prefieren los errores estándar empíricos (también Huber-white o sandwich).
Si bien R no ofrece actualmente esta opción (que yo sepa, POR FAVOR, corríjame si estoy equivocado), SAS sí, aunque no tengo acceso a SAS, un colega accedió a prestarme su computadora para determinar si los errores estándar cambiar significativamente cuando se utiliza el método empírico.
Primero, deseamos asegurarnos de que cuando se usan errores estándar basados en modelos, SAS produciría estimaciones similares a R, para estar seguros de que el modelo se especifica de la misma manera en ambos programas. No me importa si son exactamente iguales, simplemente similares. Intenté (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;
También probé varias otras formas, como agregar líneas
random intercept / subject = year(id) solution type=UN;
random intercept PS TH RS HW / subject = id solution type=UN;
Lo intenté sin especificar el
solution type = UN,
o comentando
ddfm=betwithin;
No importa cómo especifiquemos el modelo (y lo hemos intentado de muchas maneras), no puedo lograr que las pendientes aleatorias en SAS se parezcan remotamente a los resultados de R, a pesar de que los efectos fijos son lo suficientemente similares. Y cuando quiero decir diferente, quiero decir que ni siquiera los signos son iguales. La probabilidad de registro -2 en SAS fue 71344.94.
No puedo cargar mi conjunto de datos completo; así que hice un conjunto de datos de juguete con solo los registros de tres personas. SAS me da salida en unos minutos; en R lleva más de una hora. Extraño. Con este conjunto de datos de juguetes, ahora obtengo diferentes estimaciones para los efectos fijos.
Mi pregunta: ¿Alguien puede arrojar luz sobre por qué las estimaciones de pendientes aleatorias pueden ser tan diferentes entre R y SAS? ¿Hay algo que pueda hacer en R o SAS para modificar mi código para que las llamadas produzcan resultados similares? Prefiero cambiar el código en SAS, ya que "creo" que mi R estima más.
¡Estoy realmente preocupado por estas diferencias y quiero llegar al fondo de este problema!
Mi salida de un conjunto de datos de juguete que usa solo tres de los 35 individuos en el conjunto de datos completo para R y SAS se incluye como jpegs.
EDITAR Y ACTUALIZAR:
Como @JakeWestfall ayudó a descubrir, las pendientes en SAS no incluyen los efectos fijos. Cuando agrego los efectos fijos, aquí está el resultado: comparar las pendientes R con las pendientes SAS para un efecto fijo, "PS", entre programas: (Coeficiente de selección = pendiente aleatoria). Tenga en cuenta la mayor variación en SAS.
0
sy 1
s, R
modelará la probabilidad de una respuesta "1", mientras que SAS modelará la probabilidad de una respuesta "0". Para hacer que el modelo SAS tenga la probabilidad de "1", debe escribir su variable de respuesta como use(event='1')
. Por supuesto, incluso sin hacer esto, creo que aún deberíamos esperar las mismas estimaciones de las variaciones de efectos aleatorios, así como las mismas estimaciones de efectos fijos, aunque con sus signos invertidos.
ranef()
función en lugar de coef()
. El primero proporciona los efectos aleatorios reales, mientras que el segundo proporciona los efectos aleatorios más el vector de efectos fijos. Por lo tanto, esto explica en gran medida por qué los números ilustrados en su publicación difieren, pero aún queda una discrepancia sustancial que no puedo explicar por completo.
ID
no es un factor en R; verifique y vea si eso cambia algo.