如何统计比较分组线性回归模型的两个预测值?
解决两组不同自变量取值下预测值的统计比较问题
你之前分开拟合两组模型的方式没法直接完成统计比较,因为两个独立模型的参数估计没有共享误差结构,无法计算预测值差值的标准误。正确的做法是合并两组数据,拟合包含分组与自变量二次项交互作用的模型,再通过对比检验目标预测值的差异。以下是具体步骤:
1. 合并数据并构造分组变量
将Healthy和CAD两组数据合并为一个数据框,新增一个标记分组的变量(比如group):
# 假设原数据框分别为df_healthy和df_cad df_healthy$group <- "Healthy" df_cad$group <- "CAD" df_combined <- rbind(df_healthy, df_cad)
2. 拟合带交互项的GLM模型
拟合包含分组、percent_power二次项,以及两者交互作用的模型,这样可以捕捉两组的二次曲线是否存在差异:
model <- glm(VE ~ group * poly(percent_power, 2), data = df_combined) summary(model)
这里的group * poly(...)等价于group + poly(...) + group:poly(...),交互项是检验两组曲线差异的关键。
3. 检验目标预测值的差异
推荐使用emmeans包来便捷计算并对比预测值,步骤如下:
# 安装并加载包(首次使用需安装) # install.packages("emmeans") library(emmeans) # 定义需要比较的两个预测点 target_points <- data.frame( group = c("Healthy", "CAD"), percent_power = c(70, 80) ) # 生成预测值并计算差异的统计检验结果 emm <- emmeans(model, ~ group, at = target_points) contrast(emm, list(healthy70_vs_cad80 = c(1, -1)))
contrast函数会输出两个预测值的差值、标准误、统计量和p值,直接给出统计显著性结果。
如果不想用第三方包,也可以手动计算:
- 提取模型系数和方差协方差矩阵(
vcov(model)) - 构造两个预测值差值的线性组合权重向量
- 计算差值的标准误,再通过t/z检验得到p值
但这种方法需要熟悉多项式项的编码规则(poly默认是正交编码),操作繁琐,不如emmeans高效。
内容的提问来源于stack exchange,提问作者MaxStudent
相关产品推荐
相关产品推荐

