🌍

GBD 数据分析教程

Global Burden of Disease — 全球疾病负担分析

GBD 概述

GBD(全球疾病负担研究)由 IHME 主持,覆盖 200+ 国家/地区、300+ 疾病/危险因素的时间序列数据。 clinResearchKit 支持 EAPC 趋势分析、APC 年龄-时期-队列建模、BAPC 预测等。

常见发表场景

某疾病发病率 1990-2021 趋势分析、EAPC 计算、"近年来 XX 疾病负担显著上升"

数据来源

IHME GBD Results Tool 下载 CSV,含 1990-2021 或 1990-2024 最新数据

01 数据加载

library(clinResearchKit)

# 加载 GBD 数据(CSV / TSV)
gbd_data <- gbd_load("gbd")

# 查看数据结构
str(gbd_data)
head(gbd_data)

# 筛选:中国、发病率、1990-2021
china_inc <- gbd_data[gbd_data$location == "China" &
               gbd_data$measure == "Incidence" &
               gbd_data$year >= 1990 & gbd_data$year <= 2021, ]

GBD 数据预处理:从 IHME 下载时建议选择"Both Sex"和"All Ages", 再在 R 中按 age_group 拆分分析。

02 EAPC 趋势分析

EAPC(Estimated Annual Percentage Change):对数线性回归计算发病率/死亡率年均变化率。 "发病率每年增加 X% (95%CI: Y%-Z%)" 是期刊中常用的表述。

# 计算 EAPC(中国卒中发病率趋势)
eapc_result <- gbd_eapc(
  gbd_data,
  measure      = "Incidence",
  location     = "China",
  age_group    = "All Ages",
  sex          = "Both",
  cause        = "Stroke"
)

# 查看结果
print(eapc_result)
# 输出示例:EAPC = 1.23 (95%CI: 0.87 - 1.59), p < 0.001
# 批量计算多个疾病的 EAPC
eapc_multi <- gbd_eapc(
  gbd_data,
  measure     = "Incidence",
  location    = "China",
  sex         = "Both",
  group_by    = "cause"      # 按病种分组计算
)

# 筛选显著趋势的疾病
eapc_significant <- eapc_multi[eapc_multi$p_value < 0.05, ]

03 趋势图

# 绘制发病率趋势图(带 EAPC 标注)
p_trend <- gbd_trend_line(
  gbd_data,
  measure    = "Incidence",
  location   = "China",
  cause      = "Ischemic heart disease",
  age_group  = "All Ages",
  add_eapc   = TRUE,      # 自动在图上标注 EAPC
  ci_show    = TRUE       # 显示置信区间
)

print(p_trend)
ggsave("gbd_trend_ihd_china.pdf", p_trend, width = 10, height = 6)
# 多国家/地区对比趋势图
p_compare <- gbd_trend_line(
  gbd_data,
  measure    = "Incidence",
  location   = c("China", "United States", "Japan"),
  cause      = "Lung cancer",
  age_group  = "15 to 49",
  add_eapc   = TRUE
)
print(p_compare)

04 APC 年龄-时期-队列建模

APC 模型将年龄、时期、队列效应分离,是疾病时间趋势分析的标准方法。 BAPC 在 APC 基础上加入随机效应,更稳健。

# APC 模型(卒中发病率)
apc_result <- gbd_apc(
  gbd_data,
  measure    = "Incidence",
  location   = "China",
  cause      = "Stroke",
  sex        = "Both",
  model      = "APC",      # 或 "BAPC"
  n_sim      = 1000          # Bootstrap 次数
)

# 绘制 APC 图
p_apc <- plot_gbd_apc(apc_result)
print(p_apc)

# BAPC 预测(未来 5 年)
bapc_pred <- gbd_bapc(
  gbd_data,
  measure    = "Incidence",
  location   = "China",
  cause      = "Stroke",
  n_future   = 5           # 预测未来 5 年
)

APC vs BAPC:APC 适合数据质量高、队列效应明确的分析; BAPC 适合数据稀疏或存在过离散问题的情况。

05 热力图与国家排名

# 国家发病率热力图(特定年龄组)
p_heat <- gbd_heatmap(
  gbd_data,
  measure    = "Incidence",
  age_group  = "50 to 74",
  year_range = c(2010, 2019),
  top_n      = 20            # 显示前 20 个国家
)
print(p_heat)

# 发病率地区排名
rank_df <- gbd_area_rate(
  gbd_data,
  measure   = "Incidence",
  cause     = "Diabetes",
  year      = 2019,
  sort_by   = "rate",
  top_n     = 30
)