我是R的新手,正在研究glm模型,并希望在亚组分析中寻找BMI组和患者组(4组)对死亡率(二元)的相互作用。我有以下代码:
model <- glm(death~patient.group*bmi.group, data = data, family = "binomial")
summary(model)
我得到以下信息:
Coefficients:
Estimate Std. Error z value Pr(>|z|)
(Intercept) -3.4798903 0.0361911 -96.153 < 2e-16 ***
patient.group2 0.0067614 0.0507124 0.133 0.894
patient.group3 0.0142658 0.0503444 0.283 0.777
patient.group4 0.0212416 0.0497523 0.427 0.669
bmi.group2 0.1009282 0.0478828 2.108 0.035 *
bmi.group3 0.2397047 0.0552043 4.342 1.41e-05 ***
patient.group2:bmi.group2 -0.0488768 0.0676473 -0.723 0.470
patient.group3:bmi.group2 -0.0461319 0.0672853 -0.686 0.493
patient.group4:bmi.group2 -0.1014986 0.0672675 -1.509 0.131
patient.group2:bmi.group3 -0.0806240 0.0791977 -1.018 0.309
patient.group3:bmi.group3 -0.0008951 0.0785683 -0.011 0.991
patient.group4:bmi.group3 -0.0546519 0.0795683 -0.687 0.492
---
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
如此显示,我将为每个patient.group:bmi.group
设置一个p值。我的问题是,有没有办法让patient.group:bmi.group
获得一个p值,而不给每个子组一个p值?我试图在网上寻找答案,但仍然找不到答案:(
非常感谢。
答案 0 :(得分:1)
这取决于您将患者和BMI组视为因素还是连续的协变量。如果它们是协变量,则@ jay.sf的建议是合适的。对于患者组的线性效应和BMI组的线性效应之间的相互作用,它拟合一个自由度项。
但这取决于组的顺序和定义。例如,假设患者组1和2之间的“差异”与患者组2和3之间的“差异”相同,依此类推。患者组的排序是否以某种方式使得第1组<第2组<第3组<第4组?对于BMI同样如此。该模型还假设患者规模上1个单位的变化与BMI规模上1个单位的变化“相同”。我不知道这些是否是合理的假设。
通常将患者组和BMI组都视为因素。这假定不按组排序,也不假定任何两个组之间的差异等于任何其他两个组之间的差异。在这种情况下,jay.sf的建议可能会产生误导性的答案。
为了说明我的观点...
首先,生成一些您未提供的人工数据:
data <- tibble() %>%
expand(patient.group=1:4, bmi.group=1:3, rep=1:5) %>%
mutate(
z=-0.25*patient.group + 0.75*bmi.group,
death=rbernoulli(nrow(.), exp(z)/exp(1+z))
) %>%
select(-z)
按照jay.sf的建议,设置一个具有交互作用的简单连续协变量模型:
covariateModel <- glm(death~patient.group * bmi.group, data = data, family = "binomial")
summary(covariateModel)
部分给予
Coefficients:
Estimate Std. Error z value Pr(>|z|)
(Intercept) -2.6962 1.8207 -1.481 0.139
patient.group 0.7407 0.6472 1.144 0.252
bmi.group 1.2697 0.8340 1.523 0.128
patient.group:bmi.group -0.3807 0.2984 -1.276 0.202
在这里,patient.group:bmi.group
交互的p值是基于单个自由度z检验的Wald检验。
需要稍微复杂一点的方法才能使因子模型具有交互作用,并获得对“整体”交互作用的检验。
mainEffectModel <- glm(death~as.factor(patient.group) + as.factor(bmi.group), data = data, family = "binomial")
interactionModel <- glm(death~as.factor(patient.group) * as.factor(bmi.group), data = data, family = "binomial")
anova(mainEffectModel, interactionModel, test="Chisq")
给予
Analysis of Deviance Table
Model 1: death ~ as.factor(patient.group) + as.factor(bmi.group)
Model 2: death ~ as.factor(patient.group) * as.factor(bmi.group)
Resid. Df Resid. Dev Df Deviance Pr(>Chi)
1 54 81.159
2 48 70.579 6 10.58 0.1023
在这里,偏差的变化是一个得分测试,并作为卡方统计量分布在(4-1)x(3-1)= 6个自由度上。
这两种方法使用我的特定数据集会给出类似的答案,但它们可能并非总是如此。两者在统计上都是正确的,但是哪一种最合适则取决于您的特定情况。没有足够的信息要评论。
This excellent post提供了更多上下文。