Por que meus valores p diferem entre a saída da regressão logística, o teste do qui-quadrado e o intervalo de confiança para o OR?

37

Eu construí uma regressão logística em que a variável de resultado está sendo curada após o tratamento ( Curevs. No Cure). Todos os pacientes deste estudo receberam tratamento. Estou interessado em ver se o diabetes está associado a esse resultado.

Em R, minha saída de regressão logística é a seguinte:

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

No entanto, o intervalo de confiança para o odds ratio inclui 1 :

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

Quando faço um teste do qui-quadrado nesses dados, obtenho o seguinte:

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

Se você deseja calculá-lo por conta própria, a distribuição do diabetes nos grupos curados e não curados é a seguinte:

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

Minha pergunta é: Por que os valores de p e o intervalo de confiança, incluindo 1, não concordam?

SniperBro2000
fonte
Como foi calculado o intervalo de confiança para o diabetes? Se você usar a estimativa de parâmetro e o erro padrão para formar um IC de Wald, obtém exp (-. 5597 + 1,96 * .2813) = 0,99168 como o ponto final superior.
hard2fathom
@ hard2fathom, provavelmente o OP usado confint(). Ou seja, a probabilidade foi perfilada. Dessa forma, você obtém ICs análogos ao LRT. Seu cálculo está correto, mas, em vez disso, constitui ICs Wald. Há mais informações na minha resposta abaixo.
gung - Restabelece Monica
Votei depois que li com mais cuidado. Faz sentido.
hard2fathom

Respostas:

64

Com modelos lineares generalizados, existem três tipos diferentes de testes estatísticos que podem ser executados. São eles: testes de Wald, testes de razão de verossimilhança e testes de pontuação. O excelente site de ajuda sobre estatísticas da UCLA tem uma discussão sobre eles aqui . A figura a seguir (copiada do site) ajuda a ilustrá-los:

insira a descrição da imagem aqui

  1. zNNN
  2. Os testes de razão de verossimilhança examinam a razão entre as verossimilhanças (ou a diferença nas verossimilhanças logarítmicas) no máximo e no nulo. Isso geralmente é considerado o melhor teste.
  3. O teste de pontuação é baseado na inclinação da probabilidade no valor nulo. Isso geralmente é menos poderoso, mas há momentos em que a probabilidade total não pode ser calculada e, portanto, essa é uma boa opção de fallback.

summary.glm()confint()profile()1,96χ2

Nppα=.05.05

Abaixo, perfil os coeficientes na escala do preditor linear e execute o teste da razão de verossimilhança explicitamente (via anova.glm()). Eu obtenho os mesmos resultados que você:

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

Como @JWilliman apontou em um comentário (agora excluído), em R, você também pode obter um valor p baseado em pontuação usando anova.glm(model, test="Rao"). No exemplo abaixo, nota que o p-valor não é exatamente o mesmo que no teste do qui-quadrado acima, porque, por padrão, R's chisq.test()aplica uma correção de continuidade. Se alterarmos essa configuração, os valores p corresponderão:

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
- Reinstate Monica
fonte
12
+1 Esta é uma análise muito informativa, abordando comportamentos um tanto misteriosos com clareza e autoridade e fornecendo orientações úteis.
whuber
Boa resposta, embora eu não entenda o que você quer dizer com "eu diria que seus dados não são 'significantes' por critérios convencionais".
mark999
@ mark999, os testes mais confiáveis ​​aqui (LRT e qui-quadrado) estão um pouco acima de 0,05.
gung - Restabelece Monica