warning
∞
Com os dados gerados ao longo das linhas de
x <- seq(-3, 3, by=0.1)
y <- x > 0
summary(glm(y ~ x, family=binomial))
O aviso é feito:
Warning messages:
1: glm.fit: algorithm did not converge
2: glm.fit: fitted probabilities numerically 0 or 1 occurred
o que reflete muito obviamente a dependência que é construída nesses dados.
Em R, o teste de Wald é encontrado com summary.glm
ou com waldtest
a lmtest
embalagem. O teste da razão de verossimilhança é realizado com anova
ou com lrtest
o lmtest
pacote. Nos dois casos, a matriz de informações é infinitamente avaliada e nenhuma inferência está disponível. Em vez disso, R não produzir saída, mas você não pode confiar nele. A inferência que R normalmente produz nesses casos tem valores de p muito próximos de um. Isso ocorre porque a perda de precisão no OR é de ordens de magnitude menor que a perda de precisão na matriz de variância-covariância.
Algumas soluções descritas aqui:
Use um estimador de uma etapa,
Há muita teoria apoiando o baixo viés, eficiência e generalização dos estimadores de uma etapa. É fácil especificar um estimador de uma etapa em R e os resultados geralmente são muito favoráveis para previsão e inferência. E esse modelo nunca diverge, porque o iterador (Newton-Raphson) simplesmente não tem a chance de fazê-lo!
fit.1s <- glm(y ~ x, family=binomial, control=glm.control(maxit=1))
summary(fit.1s)
Dá:
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
Assim, você pode ver as previsões refletindo a direção da tendência. E a inferência é altamente sugestiva das tendências que acreditamos serem verdadeiras.
faça um teste de pontuação,
A estatística Score (ou Rao) difere da razão de verossimilhança e estatística wald. Não requer uma avaliação da variância sob a hipótese alternativa. Nós ajustamos o modelo sob o 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
Nos dois casos, você tem inferência para um OR do infinito.
e use estimativas imparciais imparciais para um intervalo de confiança.
Você pode produzir um IC 95% não-singular mediano, não-singular para o índice de chances infinitas, usando estimativa não-verbal mediana. O pacote epitools
em R pode fazer isso. E eu dou um exemplo de implementação deste estimador aqui: Intervalo de confiança para amostragem de Bernoulli