使用广义线性模型,可以运行三种不同类型的统计检验。它们是:Wald 检验、似然比检验和分数检验。优秀的 UCLA 统计帮助站点在这里对它们进行了讨论。下图(从他们的网站复制)有助于说明它们:
- Wald 检验假设似然性呈正态分布,并在此基础上使用曲率度来估计标准误差。然后,参数估计除以 SE 得出z-分数。这在大N,但对于较小的则不完全正确Ns。很难说你什么时候N足够大,可以容纳此属性,因此此测试可能会有些风险。
- 似然比检验在其最大值和空值处查看似然比(或对数似然差)。这通常被认为是最好的测试。
- 分数测试基于空值处的似然斜率。这通常不太强大,但有时无法计算完整的可能性,因此这是一个不错的备用选项。
附带的测试summary.glm()
是 Wald 测试。你没有说你是如何得到你的置信区间的,但我假设你使用confint()
了 ,这反过来又调用了profile()
。更具体地说,这些置信区间是通过分析可能性来计算的(这是一种比将 SE 乘以更好的方法1.96)。也就是说,它们类似于似然比检验,而不是 Wald 检验。这χ2-test,反过来,是一个分数测试。
身为你的N变得无限大,三个不同的p应该收敛到相同的值,但是当您没有无限数据时,它们可能会略有不同。值得注意的是,(Wald)p-您的初始输出中的值几乎没有意义,刚刚超过和刚刚低于之间几乎没有真正的区别α=.05(引用)。那条线不是“魔术”。鉴于两个更可靠的测试刚刚结束.05,我会说您的数据按照传统标准并不十分“重要”。
下面我对线性预测变量的系数进行了剖析,并明确地运行似然比检验(通过anova.glm()
)。我得到和你一样的结果:
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
正如@JWilliman 在评论(现已删除)中指出的那样,在 中R
,您还可以使用anova.glm(model, test="Rao")
. 在下面的示例中,请注意 p 值与上面的卡方检验并不完全相同,因为默认情况下R
'chisq.test()
应用连续性校正。如果我们更改该设置,则 p 值匹配:
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