warning
∞
Avec des données générées le long des lignes de
x <- seq(-3, 3, by=0.1)
y <- x > 0
summary(glm(y ~ x, family=binomial))
L'avertissement est fait:
Warning messages:
1: glm.fit: algorithm did not converge
2: glm.fit: fitted probabilities numerically 0 or 1 occurred
ce qui reflète bien évidemment la dépendance inhérente à ces données.
En R, le test de Wald se trouve avec summary.glm
ou avec waldtest
dans l’ lmtest
emballage. Le test du rapport de vraisemblance est effectué avec anova
ou avec lrtest
dans l' lmtest
emballage. Dans les deux cas, la matrice d'information a une valeur infinie et aucune inférence n'est disponible. Au contraire, R ne produit sortie, mais vous ne pouvez pas faire confiance. L'inférence que R produit typiquement dans ces cas a des valeurs de p très proches de un. En effet, la perte de précision dans le OU est de plusieurs ordres de grandeur inférieure à la perte de précision dans la matrice de variance-covariance.
Quelques solutions décrites ici:
Utilisez un estimateur en une étape,
Beaucoup de théories soutiennent le faible biais, l’efficacité et la généralisabilité des estimateurs à une étape. Il est facile de spécifier un estimateur en une étape dans R et les résultats sont généralement très favorables pour la prédiction et l'inférence. Et ce modèle ne divergent jamais, car l’itérateur (Newton-Raphson) n’a tout simplement pas la chance de le faire!
fit.1s <- glm(y ~ x, family=binomial, control=glm.control(maxit=1))
summary(fit.1s)
Donne:
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
Vous pouvez donc voir que les prévisions reflètent le sens de la tendance. Et l'inférence suggère fortement les tendances que nous croyons être vraies.
effectuer un test de score,
La statistique Score (ou Rao) diffère du rapport de vraisemblance et des statistiques de Wald. Il ne nécessite pas d'évaluation de la variance sous l'hypothèse alternative. Nous ajustons le modèle sous le null:
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
Dans les deux cas, vous avez une inférence pour un OU de l'infini.
et utilisez des estimations non biaisées médianes pour un intervalle de confiance.
Vous pouvez produire un IC à 95% non biaisé et non médian pour le rapport de cotes infini en utilisant une estimation médiane sans biais. Le paquet epitools
en R peut le faire. Et je donne un exemple d'application de cet estimateur ici: Intervalle de confiance pour l'échantillonnage de Bernoulli