warning
∞
Con datos generados a lo largo de las líneas de
x <- seq(-3, 3, by=0.1)
y <- x > 0
summary(glm(y ~ x, family=binomial))
Se hace la advertencia:
Warning messages:
1: glm.fit: algorithm did not converge
2: glm.fit: fitted probabilities numerically 0 or 1 occurred
lo que obviamente refleja la dependencia que está integrada en estos datos.
En R, la prueba de Wald se encuentra con summary.glm
o con waldtest
en el lmtest
paquete. La prueba de razón de probabilidad se realiza con anova
o con lrtest
el lmtest
paquete. En ambos casos, la matriz de información tiene un valor infinito y no hay inferencia disponible. Más bien, R no producir una salida, pero no se puede confiar en ella. La inferencia que R produce típicamente en estos casos tiene valores p muy cercanos a uno. Esto se debe a que la pérdida de precisión en el OR es un orden de magnitud menor que la pérdida de precisión en la matriz de varianza-covarianza.
Algunas soluciones descritas aquí:
Use un estimador de un paso,
Existe mucha teoría que respalda el bajo sesgo, la eficiencia y la generalización de los estimadores de un paso. Es fácil especificar un estimador de un paso en R y los resultados suelen ser muy favorables para la predicción y la inferencia. ¡Y este modelo nunca divergerá, porque el iterador (Newton-Raphson) simplemente no tiene la oportunidad de hacerlo!
fit.1s <- glm(y ~ x, family=binomial, control=glm.control(maxit=1))
summary(fit.1s)
Da:
Coefficients:
Estimate Std. Error z value Pr(>|z|)
(Intercept) -0.03987 0.29569 -0.135 0.893
x 1.19604 0.16794 7.122 1.07e-12 ***
---
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
Para que pueda ver las predicciones reflejan la dirección de la tendencia. Y la inferencia es muy sugerente de las tendencias que creemos que son ciertas.
realizar una prueba de puntaje,
La estadística de Puntuación (o Rao) difiere de la razón de probabilidad y las estadísticas de wald. No requiere una evaluación de la varianza bajo la hipótesis alternativa. Encajamos el modelo debajo del nulo:
mm <- model.matrix( ~ x)
fit0 <- glm(y ~ 1, family=binomial)
pred0 <- predict(fit0, type='response')
inf.null <- t(mm) %*% diag(binomial()$variance(mu=pred0)) %*% mm
sc.null <- t(mm) %*% c(y - pred0)
score.stat <- t(sc.null) %*% solve(inf.null) %*% sc.null ## compare to chisq
pchisq(score.stat, 1, lower.tail=F)
χ2
> pchisq(scstat, df=1, lower.tail=F)
[,1]
[1,] 1.343494e-11
En ambos casos tienes inferencia para un OR de infinito.
, y utilice estimaciones medias imparciales para un intervalo de confianza.
Puede generar un IC del 95% imparcial, no singular para la razón de probabilidades infinita utilizando la estimación imparcial mediana. El paquete epitools
en R puede hacer esto. Y doy un ejemplo de implementación de este estimador aquí: intervalo de confianza para el muestreo de Bernoulli