我有以下值表:
25 75
38 162
优势比为 0.7037,log(OR) 为 -0.3514。对于具有值 a、b、c 和 d 的列联表,log(OR) 的方差由下式给出
(1/a + 1/b + 1/c + 1/d)
如何从 R 中的这些数据计算 log(OR) 的 p.value(它是否与 0 显着不同)?
我有以下值表:
25 75
38 162
优势比为 0.7037,log(OR) 为 -0.3514。对于具有值 a、b、c 和 d 的列联表,log(OR) 的方差由下式给出
(1/a + 1/b + 1/c + 1/d)
如何从 R 中的这些数据计算 log(OR) 的 p.value(它是否与 0 显着不同)?
您可以使用 Fisher 精确检验,该检验输入列联表并输出 p 值,零假设为优势比为 1,备择假设为优势比不等于 1。
(tab <- matrix(c(38, 25, 162, 75), nrow=2))
# [,1] [,2]
# [1,] 38 162
# [2,] 25 75
fisher.test(tab)
#
# Fisher's Exact Test for Count Data
#
# data: tab
# p-value = 0.2329
# alternative hypothesis: true odds ratio is not equal to 1
# 95 percent confidence interval:
# 0.3827433 1.3116294
# sample estimates:
# odds ratio
# 0.7045301
在这种情况下,p 值为 0.23。
另一种方法(Fisher 精确检验除外)是将值放入二项式 GLM:
d <- data.frame(g=factor(1:2),
s=c(25,75),
f=c(38,162))
g <- glm(s/(s+f)~g,weights=s+f,data=d,
family="binomial")
coef(summary(g))["g2",c("Estimate","Pr(>|z|)")]
## Estimate Pr(>|z|)
## -0.3513979 0.2303337
值稍微准确一些),请执行
anova(g,test="Chisq")
这使
## Df Deviance Resid. Df Resid. Dev Pr(>Chi)
## NULL 1 1.4178
## g 1 1.4178 0 0.0000 0.2338
(在这种情况下,LRT Wald Fisher因为样本相当大)
最好对解决方案进行泛化,并使用逻辑模型等统计模型中LR 检验提供了相当准确的值。这也可以处理需要测试多个参数的情况,例如 3 组问题、非线性的连续效应等。整个模型的 LR 测试(这是本示例中所需的全部,因为没有调整变量)可以很容易地在基础 R 中或使用包中获得,例如rms
f <- lrm(y ~ groups, weights=freqs)
f # prints LR chi-sq, d.f., P, many other quantities
这里的嵌套模型是这个模型和一个仅拦截模型。