You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

二分类分组下连续结局均值(95%CI)及组间p值提取方法

统计方法选择
  • 未校正分析:采用Welch t检验比较吸烟者、非吸烟者的血红蛋白变化值差异,同时分别计算两组的血红蛋白变化均值及单样本t检验对应的95%置信区间,组间比较p值直接从t检验结果提取。该结果等价于仅纳入吸烟状态作为自变量的单变量线性回归输出。
  • 校正混杂因素分析:拟合多元线性回归模型,因变量为血红蛋白变化值,自变量纳入吸烟状态、年龄、性别三个变量,通过估计边际均值(最小二乘均值)计算校正年龄、性别分布后两组的血红蛋白变化调整均值及对应的95%置信区间,模型中吸烟状态变量的系数显著性p值即为校正后组间差异的p值。
R语言实现代码
# 加载计算边际均值所需工具包
library(emmeans)

# 导入分析数据集
df <- data.frame(
  smoking_status = c(1,0,1,0,1,1,0,1,1,1),
  change_hemoglobin = c(2.5,-5.2,-2.0,1.7,0,0.1,0,9.05,6.0,-5.2),
  age = c(12,99,54,46,45,24,24,78,56,45),
  sex = c(0,0,1,1,1,1,1,0,0,0)
)
# 将吸烟状态转为因子变量,设置标签
df$smoking_status <- factor(df$smoking_status, levels = c(1,0), labels = c("吸烟者", "非吸烟者"))

## 未校正模型计算
# 组间t检验
t_test_unadj <- t.test(change_hemoglobin ~ smoking_status, data = df)
# 逐组计算均值与95%CI
unadj_smoker_vals <- df$change_hemoglobin[df$smoking_status == "吸烟者"]
unadj_smoker <- c(
  mean = mean(unadj_smoker_vals),
  lci = t.test(unadj_smoker_vals)$conf.int[1],
  uci = t.test(unadj_smoker_vals)$conf.int[2]
)
unadj_nonsmoker_vals <- df$change_hemoglobin[df$smoking_status == "非吸烟者"]
unadj_nonsmoker <- c(
  mean = mean(unadj_nonsmoker_vals),
  lci = t.test(unadj_nonsmoker_vals)$conf.int[1],
  uci = t.test(unadj_nonsmoker_vals)$conf.int[2]
)
# 整理未校正结果表
unadj_result <- data.frame(
  分组 = c("吸烟者", "非吸烟者"),
  `血红蛋白变化值, 均值 (95% CI)` = c(
    sprintf("%.2f (%.2f - %.2f)", unadj_smoker["mean"], unadj_smoker["lci"], unadj_smoker["uci"]),
    sprintf("%.2f (%.2f - %.2f)", unadj_nonsmoker["mean"], unadj_nonsmoker["lci"], unadj_nonsmoker["uci"])
  ),
  `吸烟者与非吸烟者组间差异p值` = c(
    ifelse(t_test_unadj$p.value < 0.001, "<0.001", sprintf("%.3f", t_test_unadj$p.value)),
    ""
  )
)

## 校正年龄、性别模型计算
# 拟合多元线性回归
lm_adjusted <- lm(change_hemoglobin ~ smoking_status + age + sex, data = df)
# 估计校正后的边际均值
emm_adjusted <- emmeans(lm_adjusted, ~ smoking_status)
emm_df <- as.data.frame(emm_adjusted)
# 提取组间比较p值
adj_p_val <- pairs(emm_adjusted)$p.value
# 整理校正后结果表
adj_result <- data.frame(
  分组 = c("吸烟者", "非吸烟者"),
  `血红蛋白变化值, 均值 (95% CI)` = c(
    sprintf("%.2f (%.2f - %.2f)", emm_df$emmean[1], emm_df$lower.CL[1], emm_df$upper.CL[1]),
    sprintf("%.2f (%.2f - %.2f)", emm_df$emmean[2], emm_df$lower.CL[2], emm_df$upper.CL[2])
  ),
  `吸烟者与非吸烟者组间差异p值` = c(
    ifelse(adj_p_val < 0.001, "<0.001", sprintf("%.3f", adj_p_val)),
    ""
  )
)
示例数据计算结果

未校正模型结果

分组血红蛋白变化值, 均值 (95% CI)吸烟者与非吸烟者组间差异p值
吸烟者1.31 (-1.80 - 4.41)0.790
非吸烟者-1.17 (-8.34 - 6.00)

校正年龄、性别后的模型结果

分组血红蛋白变化值, 均值 (95% CI)吸烟者与非吸烟者组间差异p值
吸烟者0.88 (-4.03 - 5.79)0.661
非吸烟者-0.01 (-8.95 - 8.93)

注:以上结果基于提供的10条示例数据计算,因样本量极小,置信区间范围较宽,实际分析需替换为完整研究数据集运行代码。

内容的提问来源于stack exchange,提问作者Wandering_geek

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.31 20:15:44