Pourquoi mes valeurs p diffèrent-elles entre la sortie de la régression logistique, le test du khi-carré et l'intervalle de confiance du OU?

37

J'ai construit une régression logistique dans laquelle la variable de résultat est en train de guérir après le traitement ( Curevs No Cure). Tous les patients de cette étude ont reçu un traitement. Je voudrais savoir si le diabète est associé à ce résultat.

Dans R ma sortie de régression logistique se présente comme suit:

Call:
glm(formula = Cure ~ Diabetes, family = binomial(link = "logit"), data = All_patients)
...
Coefficients:
            Estimate Std. Error z value Pr(>|z|)    
(Intercept)   1.2735     0.1306   9.749   <2e-16 ***
Diabetes     -0.5597     0.2813  -1.990   0.0466 *  
...
    Null deviance: 456.55  on 415  degrees of freedom
Residual deviance: 452.75  on 414  degrees of freedom
  (2 observations deleted due to missingness)
AIC: 456.75

Cependant, l’intervalle de confiance pour le rapport de cotes inclut 1 :

                   OR     2.5 %   97.5 %
(Intercept) 3.5733333 2.7822031 4.646366
Diabetes    0.5713619 0.3316513 1.003167

Lorsque je fais un test chi-carré sur ces données, j'obtiens ce qui suit:

data:  check
X-squared = 3.4397, df = 1, p-value = 0.06365

Si vous souhaitez le calculer vous-même, la répartition du diabète dans les groupes guéris et non guéris est la suivante:

Diabetic cure rate:      49 /  73 (67%)
Non-diabetic cure rate: 268 / 343 (78%)

Ma question est la suivante: pourquoi les valeurs p et l'intervalle de confiance, y compris 1, ne concordent-ils pas?

SniperBro2000
la source
Comment l'intervalle de confiance pour le diabète a-t-il été calculé? Si vous utilisez l'estimation du paramètre et l'erreur standard pour former un Wald CI, vous obtenez exp (-. 5597 + 1,96 * .2813) = .99168 comme point de terminaison supérieur.
hard2fathom
@ hard2fathom, probablement le PO utilisé confint(). C'est-à-dire que la probabilité était profilée. De cette façon, vous obtenez des CI analogues au LRT. Votre calcul est correct, mais constitue plutôt des IC de Wald. Il y a plus d'informations dans ma réponse ci-dessous.
gung - Réintégrez Monica
Je l'ai voté après l'avoir lu plus attentivement. Logique.
hard2fathom

Réponses:

64

Les modèles linéaires généralisés permettent de réaliser trois types de tests statistiques. Ce sont: les tests de Wald, les tests du rapport de vraisemblance et les tests de score. L’excellent site d’aide statistique de UCLA en donne une discussion ici . La figure suivante (copiée de leur site) permet de les illustrer:

entrez la description de l'image ici

  1. Le test de Wald suppose que la probabilité est normalement distribuée et utilise sur cette base le degré de courbure pour estimer l'erreur type. Ensuite, l'estimation du paramètre divisée par le SE donne un -score. Cela est en grande , mais pas tout à fait vrai petit s. Il est difficile de dire quand votre est assez grand pour que cette propriété tienne, alors ce test peut être légèrement risqué. zNNN
  2. Les tests du rapport de vraisemblance examinent le rapport entre les probabilités (ou la différence dans les log vraisemblances) à leur maximum et à leur valeur nulle. Ceci est souvent considéré comme le meilleur test.
  3. Le test de score est basé sur la pente de la vraisemblance à la valeur nulle. C’est généralement moins puissant, mais il est parfois impossible de calculer toutes les probabilités. C’est donc une bonne option de secours.

Les tests qui viennent avec summary.glm()sont des tests de Wald. Vous ne dites pas comment vous avez obtenu vos intervalles de confiance, mais je suppose que vous avez utilisé confint(), ce qui appelle profile(). Plus précisément, ces intervalles de confiance sont calculés en profilant la probabilité (ce qui est une meilleure approche que de multiplier la SE par ). C'est-à-dire qu'ils sont analogues au test du rapport de vraisemblance, pas au test de Wald. Le , à son tour, est un test de score. 1,96χ2

Lorsque votre devient indéfiniment grand, les trois différents devraient converger vers la même valeur, mais ils peuvent différer légèrement lorsque vous ne disposez pas de données infinies. Il est à noter que la valeur (Wald) dans votre sortie initiale est à peine significative et qu'il y a peu de différence réelle entre juste au-dessus et juste sous ( citation ). Cette ligne n'est pas "magique". Étant donné que les deux tests les plus fiables viennent tout juste de dépasser , je dirais que vos données ne sont pas tout à fait "significatives" par rapport aux critères classiques. Nppα=0,050,05

Ci-dessous, décrivez les coefficients à l'échelle du prédicteur linéaire et exécutez le test du rapport de vraisemblance de manière explicite (via anova.glm()). J'obtiens les mêmes résultats que toi:

library(MASS)
x = matrix(c(343-268,268,73-49,49), nrow=2, byrow=T);  x
#      [,1] [,2]
# [1,]   75  268
# [2,]   24   49
D = factor(c("N","Diabetes"), levels=c("N","Diabetes"))
m = glm(x~D, family=binomial)
summary(m)
# ...
# Coefficients:
#             Estimate Std. Error z value Pr(>|z|)    
# (Intercept)  -1.2735     0.1306  -9.749   <2e-16 ***
# DDiabetes     0.5597     0.2813   1.990   0.0466 *  
# ...
confint(m)
# Waiting for profiling to be done...
#                    2.5 %    97.5 %
# (Intercept) -1.536085360 -1.023243
# DDiabetes   -0.003161693  1.103671
anova(m, test="LRT")
# ...
#      Df Deviance Resid. Df Resid. Dev Pr(>Chi)  
# NULL                     1     3.7997           
# D     1   3.7997         0     0.0000  0.05126 .
chisq.test(x)
#         Pearson's Chi-squared test with Yates' continuity correction
# 
# X-squared = 3.4397, df = 1, p-value = 0.06365

Comme @JWilliman l'a souligné dans un commentaire (maintenant supprimé) R, vous pouvez également obtenir une valeur p basée sur le score à l'aide de anova.glm(model, test="Rao"). Dans l'exemple ci-dessous, notez que la valeur p n'est pas tout à fait la même que dans le test du khi-carré ci-dessus, car, par défaut, R's chisq.test()applique une correction de continuité. Si nous changeons ce paramètre, les p-values ​​correspondent:

anova(m, test="Rao")
# ...
#      Df Deviance Resid. Df Resid. Dev   Rao Pr(>Chi)  
# NULL                     1     3.7997                 
# D     1   3.7997         0     0.0000 4.024  0.04486 *
chisq.test(x, correct=FALSE)
#   Pearson's Chi-squared test
# 
# data:  x
# X-squared = 4.024, df = 1, p-value = 0.04486
gung - Rétablir Monica
la source
12
+1 Il s’agit d’une analyse très informative, qui aborde de manière claire et autoritaire un comportement quelque peu mystérieux et fournit des conseils utiles.
whuber
Bonne réponse, bien que je ne comprenne pas ce que vous entendez par "je dirais que vos données ne sont pas tout à fait" significatives "par rapport aux critères conventionnels".
Mark999
@ mark999, les tests les plus fiables ici (test de LRT et khi carré) dépassent légèrement 0,05.
gung - Rétablir Monica