Probabilidad y estimaciones de efectos mixtos Regresión logística

8

Primero simulemos algunos datos para una regresión logística con partes fijas y aleatorias:

set.seed(1)
n    <- 100
x    <- runif(n)
z    <- sample(c(0,1), n, replace=TRUE)
b    <- rnorm(2)
beta <- c(0.4, 0.8)
X    <- model.matrix(~x)
Z    <- cbind(z, 1-z)
eta  <- X%*%beta + Z%*%b
pr   <- 1/(1+exp(-eta))
y    <- rbinom(n, 1, pr)

Si solo quisiéramos ajustar una regresión logística sin partes aleatorias, podríamos usar la glmfunción:

glm(y~x, family="binomial")

glm(y~x, family="binomial")$coefficients
# (Intercept)           x 
#  -0.2992785   2.1429825 

O construir nuestra propia función del log-verosimilitud

logL(β)=i=1nyilogΛ(ηi)+(1yi)log(1Λ(ηi))

donde Λ(ηi)=11+exp(ηi) y ηi=Xiβ y use optim()para estimar los parámetros que lo maximizan, como en el siguiente código de ejemplo:

ll.no.random <- function(theta,X,y){
  beta <- theta[1:ncol(X)]
  eta  <- X%*%beta
  p    <- 1/(1+exp(-eta))
  ll   <- sum( y*log(p) + (1-y)*log(1-p) )
  -ll
}

optim(c(0,1), ll.no.random, X=X, y=y)

optim(c(0,1), ll.no.random, X=X, y=y)$par
# -0.2992456  2.1427484

que, por supuesto, proporciona las mismas estimaciones y maximiza la probabilidad logarítmica para el mismo valor. Para efectos mixtos, nos gustaría algo como

library(lme4)
glmer(y~x + (1|z), family="binomial")

Pero, ¿cómo podemos hacer lo mismo con nuestra propia función? Dado que la probabilidad es

L=j=1JPr(y1j,...,ynjj|x,bj)f(bj)dbj

y la integral no tiene una expresión de forma cerrada, necesitamos usar la integración numérica como la Cuadratura Gaussiana. Podemos usar el paquete statmodpara obtener algunas cuadraturas, digamos 10

library(statmod)    
gq <- gauss.quad(10)
w  <- gq$weights
g  <- gq$nodes

ACTUALIZACIÓN: Al usar estas ubicaciones en cuadratura y los pesos para ( aquí), podemos aproximar la integral sobre mediante una suma de los términos con sustituido por y todo término multiplicado por los pesos respectivos . Por lo tanto, nuestra función de probabilidad debería ser ahoragrwrr=1,...,RR=10bjRgrbjwr

L=j=1Jr=1RPr(y1j,...,ynjj|x,bj=gr)wr

Además, debemos tener en cuenta la varianza de la parte aleatoria, leí que esto se puede lograr reemplazando en nuestra función con where , por lo que en la función de probabilidad anterior reemplazamos 's con ' s y no 's.bjN(0,σb2)ησjθjθjN(0,1)θgβ

Un problema computacional que no entiendo es cómo sustituir los términos, ya que los vectores no tendrán la misma longitud. Pero probablemente no entiendo eso, porque me falta algo crucial aquí o no entendí mal cómo funciona este método.

Steve
fuente
No tengo tiempo para echar un buen vistazo ahora, pero parece un buen uso para MCMC.
shadowtalker
@ssdecontrol gracias, MCMC es una buena alternativa. Pero me gustaría aplicar el enfoque clásico.
Steve
¿Qué no es clásico acerca de MCMC para evaluar una integral?
shadowtalker
@ssdecontrol bueno, no estoy seguro ... Pero todos los libros que revisé y los paquetes lme4, ordinal R, no usan MCMC. Entonces, me gustaría seguir con eso. Al menos al principio.
Steve
1
¿Has preguntado esto en la lista R-sig-ME ([email protected])? Algunas personas podrían ayudarlo más allá. Además: le recomiendo encarecidamente que estudie el documento Algoritmos de cuadratura gaussiana eficiente laplaciana y adaptativa para modelos mixtos lineales generalizados multinivel de Pinheiro y Chao. Contiene resultados con respecto al rendimiento de AGQ, así como el álgebra lineal detrás de ellos. Si desea codificarlos ... bueno, prepárese para algunas descomposiciones serias de matriz dispersa. : D
usεr11852

Respuestas:

2

No vi cómo "los vectores no serán de la misma longitud", aclare su pregunta.

En primer lugar, para la integral con una dimensión inferior a 4, los métodos numéricos directos como la cuadratura son más eficientes que MCMC. Estudié estas preguntas por un tiempo y me complacería discutir este problema con usted.

Para la regresión logística de efectos mixtos, el único Rcódigo explícito que he encontrado es del libro del Prof. Demidenko, Modelos mixtos: teoría y aplicaciones , puede descargar el código a través de la columna "SOFTWARE Y DATOS" en la página web. El logMLEgh()se puede encontrar en \mixed_models_data.zip\MixedModels\Chapter07. No usó el statmodpaquete para obtener las cuadraturas, pero escribió su propia función gauher(). Hay algunos errores menores en el código y los he discutido con el autor, pero todavía es muy útil comenzar desde su código y libro. Puedo proporcionar la versión corregida si es necesario.

Otro problema es que, si desea obtener estimaciones precisas, optim()no es suficiente, es posible que deba usar métodos como la puntuación de Fisher, como en glm().

Randel
fuente
El libro parece tener una rica información sobre lo que estoy trabajando. El código en sí no dice mucho, solo ordené el libro, así que tengo que esperar. Lo que pasa con los vectores es que si sustituimos los términos, los 2 bcon los 10 nodos, ¿cómo podremos multiplicar las matrices Zy g? ¿O lo tengo completamente mal?
Steve
Sé que debo ir más allá para obtener estimaciones precisas, pero esperaba entender primero el GQ como primer paso.
Steve
Puede obtener una vista previa de las dos ediciones en Google Books primero. En su código, ¿ es una matriz ? Pero solo un escalar? Puede comenzar desde el modelo de intercepción aleatoria primero. Si la dimensión de los efectos aleatorios es dos, necesita un total de 100 nodos bidimensionales y 10 nodos en cada dimensión. Zn×2bZ = rep(1,n)
Randel
lo siento, pero cuanto más lo pienso, más me confunde. Si hago Z=rep(1,n)lo siguiente, ¿obtendría una intercepción aleatoria para cada fila, lo que significa que cada individuo es un grupo? En mi ejemplo, tengo dos grupos, por lo tanto tenemos y para dar las que necesitamos. ¿No? Z%*%b n×22×1n×1
Steve
Ah, acabo de notar que Zse usa para separar la intersección aleatoria de cada grupo, no la matriz de diseño para el efecto aleatorio. Entonces tiene razón, pero debe evaluar la integral y utilizar la cuadratura por separado para cada grupo. Ya no necesita Zmás, solo evalúe la integral para cada grupo y luego sumelos. La matriz de diseño para la intersección aleatoria es solo el vector de 1s.
Randel