6 votos

Estimar los parámetros correlacionados con el modelo multinivel

Me gustaría estimación de un multi-nivel en el modelo de Stata o R (utilizando lmer) donde el primer nivel de los coeficientes son los mismos para todas las observaciones, pero los coeficientes dentro de observación están correlacionados.

Un ejemplo sería algo como esto:

$$Y_i = \beta_1 x_{1i} + \beta_2 x_{2i} + \beta_3 x_{3i} + ... + \varepsilon_{0i}$$ $$\beta_1=\gamma_1 z_1 + \gamma_2 z_2 + \varepsilon_{1}$$ $$\beta_2=\gamma_1 z_1 + \gamma_3 z_3 + \varepsilon_{2}$$ $$\beta_3=\gamma_2 z_2 + \gamma_3 z_3 + \varepsilon_{3}$$ y así sucesivamente, con las ecuaciones para cada uno de los beta.

Claramente, me gustaría hacer una distribución de la asunción de la $\varepsilon$'s... como $\varepsilon \sim N(0,\sigma^2)$

El x variables variar por la observación, pero el z variables no varían entre las observaciones. Por lo tanto, los parámetros de $\gamma$ $\beta$ también son las mismas para todas las observaciones.

Esto difiere de la mayoría de los modelos jerárquicos que he visto en que los parámetros están relacionados dentro de una observación, en lugar de depender de la observación a nivel de características.

Como una aplicación específica, considere un modelo donde la variable dependiente $Y$ es un estudiante de las puntuaciones de las pruebas. El x variables son medidas de rendimiento en las clases anteriores, y el $z$ variables son las características de esas clases. Los estudiantes han tomado el mismo conjunto de clases, pero hay pocos alumnos en cada clase, así que me gustaría piscina estimación de los coeficientes $\beta$. Debido a que las clases tienen características similares, puede ser mucho menos $\gamma$ parámetros de $\beta$ parámetros, y la agrupación de las estimaciones para los de nivel inferior de la clase de características puede producir unas estimaciones más precisas de $\beta$ de la estimación sin el nivel 2 en el modelo.

Al mismo tiempo, me gustaría estimaciones de la $\beta$ parámetros, por lo que sustituyendo en y estimar y como una función de la $\gamma$ x y solo me pone la mitad del camino.

¿Cuál es la mejor manera de estimar este tipo de modelo? Me suelen programa en R, Stata y Python.

2voto

Raptrex Puntos 115

¿Qué hay de escribir la función de verosimilitud y maximizar?

1voto

kbrinley Puntos 664

¿Has probado a utilizar Bugs o Entrecortado, llamando a uno de ellos a partir de R? El modelo que parece ser la estimación es una simple variación de la pendiente del modelo con predictores en el segundo nivel.

Me gustaría reescribir su modelo como:

Ser $i = 1, ...n$ estudiantes y $k = 1, ... K$ de las clases. Asumiendo que su datos en el formulario de estudiante de la clase (es decir, medidas repetidas), entonces el modelo es:

$y_{i} \sim N(\beta_{[k]}*x_{1,i} + \delta_{[k]}*x_{2,i} +..., \sigma^{2})$

$ \beta_{[k]} \sim N(\gamma_{1}*Z_{1,k}, \sigma_{\beta1}^{2})$ ...

Este modelo es bastante fácil estimar el uso de Insectos o de puntas y usted puede llamar a ellos con la función de rjags o errores. Están en el paquete R2jags y aquí es un ejemplo simple o el ajuste de un modelo multinivel (con winBugs) en R.

0voto

jgauffin Puntos 54

¿Cómo es ventajoso con respecto a una normal de variación coeficiente de modelo, tales como:

fit<-lmer(score~1+vector of class_attributes+vector of student attributes
+(1+vector of class attributes+vector of student attributes)
+(1+vector of student attributes|class)
+(1+vector of class attributes|student))

?

En este ejemplo, hay un total de interceptar y atributo efecto, pero cada clase tiene diferentes coeficiente posible que puede verse escribiendo ranef(fit)

La sección 3.2 de la Bates libro sobre lme4 parece exactamente análogo a su situación.

https://r-forge.r-project.org/scm/viewvc.php/*checkout*/www/lMMwR/lrgprt.pdf?revision=656&root=lme4&pathrev=656

Actualización (he actualizado la línea de código anterior):

También corrí estas líneas para tratar de simular su situación, pero sin ningún tipo de estudiante atributos

library(lme4)
n<-100 #class size
pool<-200 #student pool size
class=c(rep(1,n), rep(2,n), rep(3,n))
min_in_class=c(rep(45,n), rep(60,n), rep(90,n))
min_hw=c(rep(90,n), rep(60,n), rep(60,n))
student_id=c(sample(1:pool,n), sample(1:pool,n), sample(1:pool,n))
performance=55+10*class +.1*min_in_class    +.2*min_hw+ -.001*min_in_class*min_hw   +rnorm(3*n, 0,10)
df<-data.frame(class=as.factor(class), min_in_class, min_hw, student_id=as.factor(student_id), performance)
library(reshape2)
melted<-melt(df, id.vars=c('student_id', 'class'))
casted<-dcast(melted, student_id~class+variable)
casted$score<-rowMeans(casted[,c(4,7,10)],na.rm=T)+rnorm(nrow(casted),0,5)
df$score<-casted$score[match(df$student_id, casted$student_id)]

Yo pensaba que lo que usted necesita tratando de hacer era este:

fit<-lmer(score~1+min_in_class+min_hw+(1|class)+(1+min_in_class+min_hw|student_id), data=df)

Me encontré con varios tamaños de clase y de las piscinas y de no obtener los resultados que yo esperaba; pero, quizá, con más de un par de clases, las cosas se ven mejor.

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X