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

将含比例的宽表转换为带95%置信区间的比例表

为分组比例添加95%置信区间的R实现

现有代码可生成不同教育水平、地区分组下Diab=1的比例表,以下是为每个比例附加95%置信区间(格式:百分比(下限%-上限%))的实现方案:

步骤1:计算分组基础统计量

先统计每个教育水平-地区分组的总人数、Diab=1的人数及原始比例:

library(dplyr)

EduLevel_stats <- dta %>%
  filter(!is.na(Diab), !is.na(edulevel)) %>%
  group_by(edulevel, region_name) %>%
  summarise(
    n_total = n(),
    n_diab1 = sum(Diab == 1, na.rm = TRUE),
    perc = n_diab1 / n_total,
    .groups = "drop"
  )

步骤2:添加95%置信区间

提供两种常用方法,可任选其一:

方法1:使用binom包计算精确置信区间(推荐)

利用二项分布精确法计算置信区间,结果更严谨:

library(binom)

EduLevel_CI <- EduLevel_stats %>%
  rowwise() %>%
  mutate(
    # 计算精确置信区间
    ci_result = binom.confint(n_diab1, n_total, conf.level = 0.95, method = "exact"),
    lower = ci_result$lower,
    upper = ci_result$upper,
    # 合并比例与置信区间为指定格式
    perc_ci = sprintf("%.1f%% (%.1f%%-%.1f%%)", perc*100, lower*100, upper*100)
  ) %>%
  ungroup() %>%
  select(edulevel, region_name, perc_ci) # 保留需要的列

方法2:手动计算Wilson置信区间(无需额外包)

Wilson区间是比例置信区间的经典计算方法,无需安装额外包:

EduLevel_CI_manual <- EduLevel_stats %>%
  mutate(
    z = qnorm(0.975), # 95%置信区间对应的Z值
    # Wilson区间核心计算
    numerator = n_diab1 + z^2/2,
    denominator = n_total + z^2,
    p_hat = numerator / denominator,
    se = sqrt((p_hat*(1-p_hat))/denominator),
    lower = p_hat - z*se,
    upper = p_hat + z*se,
    # 修正边界值,确保区间在0-1范围内
    lower = ifelse(lower < 0, 0, lower),
    upper = ifelse(upper > 1, 1, upper),
    # 格式化输出
    perc_ci = sprintf("%.1f%% (%.1f%%-%.1f%%)", perc*100, lower*100, upper*100)
  ) %>%
  select(edulevel, region_name, perc_ci)

步骤3:转换为宽表

将结果转换为与原代码输出结构一致的宽表:

# 对应方法1的结果转宽表
wide_EduLevel_CI <- EduLevel_CI %>%
  spread(region_name, perc_ci)

# 对应方法2的结果转宽表
wide_EduLevel_CI_manual <- EduLevel_CI_manual %>%
  spread(region_name, perc_ci)

内容的提问来源于stack exchange,提问作者sam.cold

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.25 22:24:32