Perché i miei valori p differiscono tra l'output di regressione logistica, il test chi-quadrato e l'intervallo di confidenza per l'OR?


37

Ho costruito una regressione logistica in cui la variabile di risultato viene curata dopo aver ricevuto il trattamento ( Curevs. No Cure). Tutti i pazienti in questo studio hanno ricevuto un trattamento. Sono interessato a vedere se il diabete è associato a questo risultato.

In R il mio output di regressione logistica ha il seguente aspetto:

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

Tuttavia, l'intervallo di confidenza per il rapporto di probabilità include 1 :

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

Quando eseguo un test chi quadrato su questi dati ottengo quanto segue:

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

Se desideri calcolarlo da solo, la distribuzione del diabete nei gruppi curati e non curati è la seguente:

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

La mia domanda è: perché i valori p e l'intervallo di confidenza tra cui 1 sono d'accordo?


Come è stato calcolato l'intervallo di confidenza per il diabete? Se si utilizza la stima dei parametri e l'errore standard per formare un elemento della configurazione Wald si ottiene exp (-. 5597 + 1,96 * .2813) = .99168 come endpoint superiore.
hard2fathom,

@ hard2fathom, molto probabilmente l'OP utilizzato confint(). Cioè, la probabilità è stata profilata. In questo modo si ottengono EC analoghi all'LRT. Il tuo calcolo è corretto, ma costituisce invece gli elementi della configurazione Wald. Di seguito sono riportate ulteriori informazioni nella mia risposta.
gung - Ripristina Monica

L'ho votato dopo averlo letto più attentamente. Ha senso.
hard2fathom,

Risposte:


64

Con i modelli lineari generalizzati, è possibile eseguire tre diversi tipi di test statistici. Questi sono: test Wald, test del rapporto di verosimiglianza e test del punteggio. L'eccellente sito di aiuto per le statistiche UCLA ne discute qui . La seguente figura (copiata dal loro sito) aiuta a illustrarli:

inserisci qui la descrizione dell'immagine

  1. zNNN
  2. I test del rapporto di verosimiglianza esaminano il rapporto tra le verosimiglianze (o la differenza nelle verosimiglianze log) al massimo e nullo. Questo è spesso considerato il miglior test.
  3. Il test del punteggio si basa sulla pendenza della probabilità sul valore null. Questo è in genere meno potente, ma ci sono momenti in cui non è possibile calcolare la piena probabilità e quindi questa è una buona opzione di fallback.

summary.glm()confint()profile()1.96χ2

Nppα=.05.05

Di seguito, profilo i coefficienti sulla scala del predittore lineare ed eseguo esplicitamente il test del rapporto di verosimiglianza (via anova.glm()). Ottengo i tuoi stessi risultati:

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

Come sottolineato da @JWilliman in un commento (ora eliminato), in R, puoi anche ottenere un valore p basato sul punteggio usando anova.glm(model, test="Rao"). Nell'esempio qui sotto, nota che il p-valore non è esattamente la stessa come nel test chi-quadro sopra, perché per impostazione predefinita, R's chisq.test()applica una correzione di continuità. Se cambiamo tale impostazione, i valori p corrispondono:

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

12
+1 Questa è un'analisi molto istruttiva, che affronta in modo chiaro e autorevole un comportamento misterioso e fornisce una guida utile.
whuber

Bella risposta, anche se non capisco cosa intendi con "Direi che i tuoi dati non sono abbastanza" significativi "per criteri convenzionali".
mark999,

@ mark999, i test più affidabili qui (LRT e chi-quadrato) sono entrambi leggermente superiori a 0,05.
gung - Ripristina Monica
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.