目录 · Sections
Final integrated deliverable · 22 节 · 10 项发现 · 单一标准

全球卫生支出 2000–2023:公平、韧性、未来

本页整合 GHED + WDI 长面板的数据工程、统计建模、可视化、仿真与部署:22 节内容涵盖 摘要 · KPI · 方法 · 数据质量 · 变量字典 · 10 项发现 · 国家档案 · 区域聚焦 · 不平等图册 · 政策仿真器 · 稳健性 · 44 张静态图 · 24 交互组件 · 词汇 · 复现·结论。

01 · Executive Summary

摘要 · 五句话读完本项目

本节以 4 张大字数字卡片 + 5 条 TLDR 结论提供一个 90 秒内可读完的项目总览;下文是其背后的代码与证据。

$10.56T
2023 年全球卫生总支出
年化 3.60%;人均 $1,328
36.5%
人口加权 OOPS 均值
P90/P10 人均 CHE 贫富比 = 80.4x
32
2023 年仍有 OOPS > 50% 国家
只有 53 个国家 OOPS < 15%
36
高外援依赖国家 (EXT > 20%)
几乎全部集中在 LIC 与 LMIC
TLDR · 核心发现
  1. 总量上集中在高收入国家:全球 2023 年 CHE 达 $10.56T,但人均 P90/P10 差异高达 80.4x。
  2. 财务保护仍不充分:32 个国家居民自付占 CHE 超 50%; OOPS 与 GGHED 高度负相关(F2)。
  3. 不平等下降但绝对水平仍高:人口加权 Gini 由 0.81 降至 0.77,但 0.77 在跨国收入分配中处于极端区间(F3)。
  4. COVID-19 冲击下两类轨迹:多数 OECD CHE 抬升 + OOPS 下降;部分中低收入国家 CHE 抬升但 OOPS 同步上升(F4)。
  5. 追赶不是自动的:β-收敛成立但半收敛年跨大洲差异显著;双向 FE 弹性约 0.8 < 1,仅靠 GDP 增长不足以驱动 UHC(F5、F6)。
跳到 10 项发现 ↓
02 · Data & Methods

从原始数据到可建模面板

所有分析共享同一份 master 宽表;下游模型与图表只读取此缓存,确保结果可复现。

本研究的因变量是 每国每年的卫生支出,核心面板包含当年价与 USD 2023 不变价的 CHE、人均 CHE、按筹资来源(政府强制 gghed、私人 pvtd、外援 ext)和筹资方案(hf1–hfnec)的占比,以及来自 World Bank 的人口、GDP/cap、预期寿命与 U5MR。

数据来源:WHO GHED + WDI;处理后统一保存在 派生数据/处理结果/master_enriched.rds。所有金额变量统一采用 USD 2023 不变价,所有结构变量统一采用 % of CHE

01_io.R · 数据读入:解析 GHED 三个数据集
# =============================================================================
# 程序/01_io.R
# -----------------------------------------------------------------------------
# 原始数据读入:严格不改变指定的三个变量名 financing_schemes / health_spending /
# spending_purpose。提供标准化的读取接口、类型修正和基础清洗。
# =============================================================================

if (!exists("proj_root", mode = "function")) {
  source(file.path("程序", "00_utils.R"))
}

# ---- 0. 数据集路径 ---------------------------------------------------------
ghs_data_dir <- function() {
  file.path(proj_root(), "原始数据")
}

ghs_csv_paths <- function() {
  d <- ghs_data_dir()
  list(
    financing_schemes = file.path(d, "financing_schemes.csv"),
    health_spending   = file.path(d, "health_spending.csv"),
    spending_purpose  = file.path(d, "spending_purpose.csv")
  )
}

# ---- 1. 通用读取 ------------------------------------------------------------
#' 读取单个 CSV,统一类型
#'
#' @param path 文件路径
#' @return tibble
read_ghs_csv <- function(path) {
  ensure_pkgs(c("readr"))
  readr::read_csv(
    path,
    col_types = readr::cols(
      country_name   = readr::col_character(),
      iso3_code      = readr::col_character(),
      year           = readr::col_integer(),
      indicator_code = readr::col_character(),
      value          = readr::col_double(),
      unit           = readr::col_character(),
      .default       = readr::col_character()
    ),
    progress = FALSE,
    show_col_types = FALSE
  )
}

# ---- 2. 三数据集入口 --------------------------------------------------------
#' 读取三张原始表;变量名严格保持不改
#'
#' @param assign_globals 若为 TRUE,在全局环境也赋值,供作业脚本直接使用
#' @return named list(financing_schemes, health_spending, spending_purpose)
load_ghs <- function(assign_globals = FALSE) {
  paths <- ghs_csv_paths()
  missing_files <- vapply(paths, function(p) !file.exists(p), logical(1))
  if (any(missing_files)) {
    stop(
      "Missing raw CSV(s): \n  ",
      paste(paths[missing_files], collapse = "\n  "),
      call. = FALSE
    )
  }
  logi("reading 3 raw CSVs from ", ghs_data_dir())
  out <- list(
    financing_schemes = read_ghs_csv(paths$financing_schemes),
    health_spending   = read_ghs_csv(paths$health_spending),
    spending_purpose  = read_ghs_csv(paths$spending_purpose)
  )
  if (isTRUE(assign_globals)) {
02_clean.R · 清洗与透视:长表 → 宽表
# ---- 1. long tidy -----------------------------------------------------------
#' 长表:统一列名、加 prefix / unit_type 辅助列
long_tidy <- function(ghs = load_ghs()) {
  ensure_pkgs(c("dplyr"))
  bind_one <- function(df, dataset_name, label_col) {
    df |>
      dplyr::mutate(
        dataset      = dataset_name,
        prefix       = ghs_indicator_prefix(.data$indicator_code),
        unit_type    = ghs_indicator_unit(.data$indicator_code),
        label        = .data[[label_col]]
      )
  }
  out <- dplyr::bind_rows(
    bind_one(ghs$financing_schemes, "financing_schemes", "financing_scheme"),
    bind_one(ghs$health_spending,   "health_spending",   "expenditure_type"),
    bind_one(ghs$spending_purpose,  "spending_purpose",  "spending_purpose")
  )
  out |>
    dplyr::mutate(
      value = dplyr::if_else(.data$value < 0, 0, .data$value)
    ) |>
    dplyr::select(
      dplyr::any_of(c(
        "dataset", "country_name", "iso3_code", "year",
        "indicator_code", "prefix", "unit_type", "label", "value", "unit"
      ))
    )
}

# ---- 2. 宽表透视 ------------------------------------------------------------
#' 把一个数据集透视为宽表:每国-每年一行,列名 = indicator_code
#' 这样 hf1_che / gghed_usd2023 / hc6_che 等都直接对应原始编码,
#' 下游所有函数(plots / models)使用一致的命名。
#'
#' @param df long_tidy() 的某一 dataset 子集,或原始 CSV df
#' @return 宽 tibble
to_wide <- function(df) {
  ensure_pkgs(c("dplyr", "tidyr"))
  df |>
    dplyr::select(dplyr::any_of(c(
      "country_name", "iso3_code", "year", "indicator_code", "value"
    ))) |>
    tidyr::pivot_wider(
      names_from = "indicator_code",
      values_from = "value",
      values_fn  = ~ mean(.x, na.rm = TRUE)
    )
}
03_enrich.R · 国家元数据增强(countrycode)
enrich_country_meta <- function(iso_vec) {
  ensure_pkgs(c("countrycode", "dplyr", "tibble"))
  iso_vec <- unique(iso_vec)
  tibble::tibble(
    iso3_code = iso_vec,
    country_name_iso = suppressWarnings(
      countrycode::countrycode(iso_vec, "iso3c", "country.name")
    ),
    continent = suppressWarnings(
      countrycode::countrycode(iso_vec, "iso3c", "continent")
    ),
    region23 = suppressWarnings(
      countrycode::countrycode(iso_vec, "iso3c", "region23")
    ),
    un_region = suppressWarnings(
      countrycode::countrycode(iso_vec, "iso3c", "un.region.name")
    ),
    un_subregion = suppressWarnings(
      countrycode::countrycode(iso_vec, "iso3c", "un.regionsub.name")
    )
  )
}

对所有用于不平等、聊类与建模的人均 CHE,统一使用 人口加权,避免小国/大国权重失衡。

04_metrics.R · 不平等指数:加权 Gini / Theil-T / Atkinson
#' 加权基尼系数(Dagum 2000 式)
gini_weighted <- function(x, w = NULL) {
  if (is.null(w)) w <- rep(1, length(x))
  ok <- is.finite(x) & is.finite(w) & x >= 0 & w > 0
  x <- x[ok]; w <- w[ok]
  if (length(x) < 2) return(NA_real_)
  ord <- order(x)
  x <- x[ord]; w <- w[ord]
  cum_w <- cumsum(w)
  cum_xw <- cumsum(x * w)
  total_w <- sum(w); total_xw <- sum(x * w)
  if (total_xw == 0) return(0)
  g <- 1 - 2 * sum((cum_xw - x * w / 2) * w) / (total_w * total_xw)
  g
}

#' Theil-T 指数(人口加权)
theil_t <- function(x, w = NULL) {
  if (is.null(w)) w <- rep(1, length(x))
  ok <- is.finite(x) & is.finite(w) & x > 0 & w > 0
  x <- x[ok]; w <- w[ok]
  if (length(x) < 2) return(NA_real_)
  mean_x <- stats::weighted.mean(x, w)
  if (mean_x == 0) return(0)
  sum(w * x / sum(w * x) * log(x / mean_x))
}

#' Atkinson 指数 (ε)
atkinson <- function(x, w = NULL, eps = 0.5) {
  if (is.null(w)) w <- rep(1, length(x))
  ok <- is.finite(x) & is.finite(w) & x > 0 & w > 0
  x <- x[ok]; w <- w[ok]
  if (length(x) < 2) return(NA_real_)
  mean_x <- stats::weighted.mean(x, w)
  if (eps == 1) {
    ede <- exp(stats::weighted.mean(log(x), w))
  } else {
    ede <- (stats::weighted.mean(x^(1 - eps), w))^(1 / (1 - eps))
  }
  1 - ede / mean_x
}
04 · Data Quality

数据质量·缺失·一致性

所有后续发现补充于同一份面板;本节以 4 张表呈现原始质量诊断(出自 分析输出/模型表/data_quality_*.csv)。

总体质量指标
metricvalue
rows4,588.00
cols47.00
missing_pct_total43.51
hf_consistency_pct_within_5pp100.00
source_consistency_pct_within_5pp100.00
各变量缺失率 (前 12)
columnn_totaln_missingpct_missing
hc3_che4,588.004,012.0087.45
hc3_usd20234,588.004,012.0087.45
hc2_che4,588.003,965.0086.42
hc2_usd20234,588.003,965.0086.42
hc9_che4,588.003,894.0084.87
hc9_usd20234,588.003,894.0084.87
hc4_che4,588.003,816.0083.17
hc4_usd20234,588.003,816.0083.17
hc5_che4,588.003,788.0082.56
hc5_usd20234,588.003,788.0082.56
hc1_che4,588.003,787.0082.54
hc1_usd20234,588.003,787.0082.54
按收入组的缺失
income_groupn_rowsn_cells_missingpct_missing
High income1,523.0023,127.0039.96
Low income544.009,355.0045.25
Lower middle income1,187.0019,891.0044.10
Not classified30.00494.0043.33
Upper middle income1,256.0021,786.0045.65
NA48.001,200.0065.79
一致性检查(总额 ≡ 来源之和)
n_rowsmeanmedianpct_within_tolcheck
1,258.00100.00100.00100.00hf
4,027.00100.00100.00100.00source
05 · Codebook

变量字典与口径说明

以下是 master 宽表主要字段的描述、单位与来源;所有后续发现只读取该表。

master_enriched 主要变量字典
变量描述单位来源备注
iso3_codeISO 3166-1 alpha-3GHED + countrycode国家主键
country_name国家名GHED中英名称
continent大洲countrycode聫合区域聚合
year年份yearGHED panel2000–2023
che_usd2023当年总 CHEUSDGHED USD2023不变价、原始总额
che_pc_usd2023人均 CHEUSDGHED + WDI pop不平等主要应变量
hf3_cheOOPS 占 CHE%GHED HF财务保护反向 KPI
gghed_che政府强制占 CHE%GHED FSGGHED 占总额份额
pvtd_che私人坚持占 CHE%GHED FS以 PHI 为主
ext_che外援占 CHE%GHED FS依赖门槛
hf1_che … hfnec_che7 类筹资方案%GHED HF总和 ≡ 100%
pop人口peopleWDI加权使用
gdp_pc_usd人均 GDPUSDWDIF6 变量
life_exp预期寿命yearsWDIF补 (未使用)
u5mr5岁以下儿童死亡率/1000WDI结果变量
02 · Snapshot

一页大局:12 张 KPI 卡片

以下 12 张卡片从总量、增速、人均、财务保护、财政空间、外部依赖五个维度给出所有发现的开场数值;下文 F1–F10 会逐一揭示其背后的方法与代码。

195
国家/地区
2000–2023 全球面板
2000–2023
时间跨度
23 年长面板;覆盖 COVID-19
$10.56T
2023 年全球 CHE
USD 2023;2000 为 $4.68T
3.60%
CHE 年化增速
2000–2023 复合增长率
2.19%
2023 年同比
与 2022 年总额对比
$1,328
2023 人均 CHE
2000 为 $780;P90/P10 = 80.4x
36.5%
2023 人口加权 OOPS
P10 = 12.0%;P90 = 57.2%
32
OOPS > 50% 国家
53 个国家 OOPS < 15%;2023
46.9%
2023 人口加权 GGHED
政府强制筹资占 CHE
36
EXT > 20% 国家
外援高依赖中/低收入;2023
94
静态图表
ggplot2 + v2 升级
42
交互组件
plotly / leaflet / reactable / DT
F1
Macro · 总量与结构

全球长期趋势:扩张但分化

二十多年里全球卫生支出总量翻倍,但增长动力在不同收入组之间高度不均衡。

年化增速3.60%2023 年人均$1,3282023 年总额$10.56T

研究问题:2000–2023 全球卫生支出在总量与结构上发生了怎样的演变?

方法:对 master 宽表按年份汇总三类筹资来源(GGHED · PVTD · EXT)的全球加总,迭加面积图量化长期份额变化;全球 2000–2023 年化增速 = (CHE2023/CHE2000)1/23−1 = 3.60%。

07_plot_static.R · 构建全球-年面板与堆叠面积图
# =============================================================================
# 程序/07_plot_static.R
# -----------------------------------------------------------------------------
# 静态图工厂函数:输入 tidy tibble,输出 ggplot 对象。
# 所有函数签名:plot_*(data, ..., title, subtitle, caption)
# =============================================================================

if (!exists("proj_root", mode = "function")) {
  source(file.path("程序", "00_utils.R"))
  source(file.path("程序", "06_plot_theme.R"))
}

# =============================================================================
# A. 趋势 / 时序
# =============================================================================

#' 全球三源(政府/私人/外援)占比时序堆叠面积
#'
#' @param master 宽表 (含 gghed_che, pvtd_che, ext_che, year, pop)
plot_source_area <- function(master,
                             title = "全球卫生支出来源结构演化 Global Health Financing Sources",
                             subtitle = NULL) {
  ensure_pkgs(c("dplyr", "tidyr", "ggplot2", "scales"))
  has_pop <- "pop" %in% names(master) && any(is.finite(master$pop))
  safe_wmean <- function(x, w) {
    ok <- is.finite(x) & is.finite(w) & w > 0
    if (!any(ok)) return(mean(x, na.rm = TRUE))
    stats::weighted.mean(x[ok], w[ok], na.rm = TRUE)
  }
  if (is.null(subtitle)) {
    subtitle <- if (has_pop) {
      "2000–2023 · 按人口加权均值,占总开支 % of CHE"
    } else {
      "2000–2023 · 未加权均值,占总开支 % of CHE"
    }
  }
  d <- master |>
    dplyr::group_by(.data$year) |>
    dplyr::summarise(
      gghed = if (has_pop) {
        safe_wmean(.data$gghed_che, .data$pop)
      } else mean(.data$gghed_che, na.rm = TRUE),
      pvtd  = if (has_pop) {
        safe_wmean(.data$pvtd_che, .data$pop)
      } else mean(.data$pvtd_che, na.rm = TRUE),
      ext   = if (has_pop) {
        safe_wmean(.data$ext_che, .data$pop)
      } else mean(.data$ext_che, na.rm = TRUE),
      .groups = "drop"
    ) |>
    tidyr::pivot_longer(c("gghed", "pvtd", "ext"),
                        names_to = "source", values_to = "pct") |>
    dplyr::mutate(source = factor(.data$source, levels = c("gghed", "pvtd", "ext")))
  ggplot2::ggplot(d, ggplot2::aes(.data$year, .data$pct, fill = .data$source)) +
    ggplot2::geom_area(alpha = 0.9, position = "stack") +
    scale_fill_ghs_source(
      labels = c(gghed = "政府 GGHE-D", pvtd = "私人 PVT-D", ext = "外援 EXT")
    ) +
    ggplot2::scale_y_continuous(labels = scales::label_percent(scale = 1)) +
    labs_ghs(
global sources area
Figure 1A · 全球总额与来源全球卫生支出来源结构 2000–2023(USD 2023 不变价)
continent stream
Figure 1B · 大洲分解按大洲分解的 CHE 流变图
交互组件 · 跨国人均 CHE 高亮时序线4.8 MB · 点击展开加载
F2
Finance · 筹资来源

谁在付钱:从 OOPS 看财务保护

OOPS 占比是衡量财务风险的核心信号;越高的国家,居民因病致贫的概率越大。

2023 年 OOPS 均值30.3%OOPS > 50% 国家 (2023)32GGHED 均值52.7%

研究问题:谁在为卫生支出买单?政府、居民自付、私人保险与国际外援,各自承担多少风险?

方法:使用 financing scheme 维度(hf1–hfnec)的占 CHE 比例。OOPS = hf3_che 是衡量财务保护的核心信号。

OOPS 国家排行(Top10 / Bottom10)
library(dplyr)
rank_oops <- master |>
  dplyr::filter(year == max(year, na.rm = TRUE)) |>
  dplyr::select(country_name, continent, hf3_che, che_pc_usd2023) |>
  dplyr::arrange(dplyr::desc(hf3_che))
utils::head(rank_oops, 10)
oops ranking 2023
Figure 2A · OOPS 排行2023 年居民自付占 CHE 国家排行
fiscal ghe share
Figure 2B · 政府筹资GGHED(政府强制筹资)占 CHE 份额
aid dependency
Figure 2C · 外援依赖外援依赖度:哪些国家 EXT > 20%
OOPS 最高 8 国(2023)
国家/地区ISO3大洲OOPS 占 CHE (%)人均 CHE
ArmeniaARMAsia80.47761.55
BangladeshBGDAsia79.3153.46
TurkmenistanTKMAsia77.39581.38
AfghanistanAFGAsia77.1459.07
Syrian Arab RepublicSYRAsia72.4033.34
NigeriaNGAAfrica71.9066.82
MyanmarMMRAsia71.1356.19
YemenYEMAsia69.1347.78
OOPS 最低 8 国(2023)
国家/地区ISO3大洲OOPS 占 CHE (%)人均 CHE
TuvaluTUVOceania0.04461,723.48
NiueNIUOceania0.3931
NauruNRUOceania0.73172,292.37
Marshall IslandsMHLOceania1.05894.22
Micronesia (Federated States of)FSMOceania2.58507.78
KiribatiKIROceania2.91238.13
Solomon IslandsSLBOceania3.16111.36
Cook IslandsCOKOceania3.69
交互组件 · OOPS / GGHED / EXT 可排序表格584 KB · 点击展开加载
F3
Equity · 跨国不平等

公平性:Gini / Theil / Atkinson

人口加权后跨国人均 CHE 的不平等长期下降,但绝对水平依然处于极端区间。

Gini 20000.811Gini 20230.772Theil 20231.270

研究问题:跨国人均卫生支出的不平等如何演化?

方法:对每年的人均 CHE(USD 2023)序列计算三个互补的不平等指标:Gini、Theil-T、Atkinson(ε),全部使用人口加权。

04_metrics.R · 三个不平等指数的实现
gini_weighted <- function(x, w = NULL) {
  if (is.null(w)) w <- rep(1, length(x))
  ok <- is.finite(x) & is.finite(w) & x >= 0 & w > 0
  x <- x[ok]; w <- w[ok]
  if (length(x) < 2) return(NA_real_)
  ord <- order(x)
  x <- x[ord]; w <- w[ord]
  cum_w <- cumsum(w)
  cum_xw <- cumsum(x * w)
  total_w <- sum(w); total_xw <- sum(x * w)
  if (total_xw == 0) return(0)
  g <- 1 - 2 * sum((cum_xw - x * w / 2) * w) / (total_w * total_xw)
  g
}

#' Theil-T 指数(人口加权)
theil_t <- function(x, w = NULL) {
  if (is.null(w)) w <- rep(1, length(x))
  ok <- is.finite(x) & is.finite(w) & x > 0 & w > 0
  x <- x[ok]; w <- w[ok]
  if (length(x) < 2) return(NA_real_)
  mean_x <- stats::weighted.mean(x, w)
  if (mean_x == 0) return(0)
  sum(w * x / sum(w * x) * log(x / mean_x))
}

#' Atkinson 指数 (ε)
atkinson <- function(x, w = NULL, eps = 0.5) {
  if (is.null(w)) w <- rep(1, length(x))
  ok <- is.finite(x) & is.finite(w) & x > 0 & w > 0
  x <- x[ok]; w <- w[ok]
  if (length(x) < 2) return(NA_real_)
  mean_x <- stats::weighted.mean(x, w)
  if (eps == 1) {
    ede <- exp(stats::weighted.mean(log(x), w))
  } else {
    ede <- (stats::weighted.mean(x^(1 - eps), w))^(1 / (1 - eps))
  }
  1 - ede / mean_x
}

# ---- 2. 时间序列的不平等 ---------------------------------------------------
#' 按 year 计算全球人均 CHE 的不平等指数面板
inequality_by_year <- function(master, value_col = "che_pc_usd2023",
                               weight_col = "pop") {
  ensure_pkgs(c("dplyr", "tidyr", "tibble"))
  val <- rlang::sym(value_col)
  wgt <- rlang::sym(weight_col)
  master |>
    dplyr::filter(
      is.finite(!!val), !!val > 0,
      is.finite(!!wgt) | TRUE
    ) |>
    dplyr::group_by(.data$year) |>
    dplyr::summarise(
      n            = dplyr::n(),
      gini_eq      = gini_weighted(!!val, NULL),
      gini_pop     = if (weight_col %in% names(master)) {
        gini_weighted(!!val, !!wgt)
      } else NA_real_,
      theil_pop    = if (weight_col %in% names(master)) {
        theil_t(!!val, !!wgt)
      } else NA_real_,
      atk05        = atkinson(!!val, NULL, eps = 0.5),
      atk1         = atkinson(!!val, NULL, eps = 1),
      mean_val     = mean(!!val, na.rm = TRUE),
      median_val   = median(!!val, na.rm = TRUE),
      .groups      = "drop"
    )
}
inequality timeseries
Figure 3A · 不平等时序Gini / Theil / Atkinson 三指标长期演化
equity lorenz
Figure 3B · 洛伦兹曲线洛伦兹曲线:2000 vs 2023
equity indices
Figure 3C · 多指标对比不平等指数面板
近 8 年不平等指数
年份Gini(pop)Theil-TAtk 0.5Atk 1.0人均均值人均中位
2,023.0000.772231.2700.410870.697501,428.917470.403
2,022.0000.773981.2750.413290.699471,419.500457.055
2,021.0000.779881.3060.411660.697081,450.204466.051
2,020.0000.784261.3290.416810.700081,399.897412.816
2,019.0000.780871.3100.416000.699381,341.262412.571
2,018.0000.782741.3190.417260.699131,299.590398.971
2,017.0000.783411.3220.417400.698991,291.563395.831
2,016.0000.782891.3230.415510.696571,286.138395.578
交互组件 · 不平等三指标交互趋势4.8 MB · 点击展开加载
F4
Resilience · 危机冲击

新冠冲击:被压缩的财政与转移的负担

COVID-19 暴露了卫生体系的脆弱性,但不同国家承担危机成本的方式截然不同。

最大正冲击+87.7%最大负冲击41.5%观测国家8

研究问题:新冠大流行期间,哪些国家显著增加了卫生支出?哪些反而萎缩?

方法:定义 base = 2019、shock = 2020–2022 平均;对每个国家计算 CHE 相对变化与 OOPS 百分点变化。

04_metrics.R · COVID 冲击度量
covid_shock <- function(master, base_year = 2019,
                        shock_years = 2020:2022) {
  ensure_pkgs("dplyr")
  master |>
    dplyr::filter(.data$year %in% c(base_year, shock_years)) |>
    dplyr::mutate(
      phase = dplyr::if_else(.data$year == base_year, "base", "shock")
    ) |>
    dplyr::group_by(.data$iso3_code, .data$country_name) |>
    dplyr::summarise(
      base_che    = mean(.data$che_usd2023[.data$phase == "base"], na.rm = TRUE),
      shock_che   = mean(.data$che_usd2023[.data$phase == "shock"], na.rm = TRUE),
      base_oops   = mean(.data$hf3_che[.data$phase == "base"], na.rm = TRUE),
      shock_oops  = mean(.data$hf3_che[.data$phase == "shock"], na.rm = TRUE),
      base_gghed  = mean(.data$gghed_che[.data$phase == "base"], na.rm = TRUE),
      shock_gghed = mean(.data$gghed_che[.data$phase == "shock"], na.rm = TRUE),
      .groups     = "drop"
    ) |>
    dplyr::mutate(
      che_delta_pct   = (.data$shock_che  - .data$base_che)  / .data$base_che  * 100,
      oops_delta_pp   =  .data$shock_oops - .data$base_oops,
      gghed_delta_pp  =  .data$shock_gghed - .data$base_gghed
    )
}
covid dumbbell
Figure 4A · OOPS 哑铃OOPS 在 2019 vs 2020–2022 的国家级变化(哑铃图)
covid scatter
Figure 4B · CHE 与 OOPS 联动CHE 增量 vs OOPS 增量散点
CHE 相对变化最大的 8 个国家
国家/地区ISO32019 基线 CHE2020–2022 平均 CHE相对变化
Timor-LesteTLS$108.02M$202.70M87.66%
GuyanaGUY$220.41M$341.84M55.09%
NiueNIU$2.37M$3.62M52.75%
MongoliaMNG$834.74M$1.27B51.77%
UzbekistanUZB$3.97B$5.88B48.07%
LiberiaLBR$351.12M$514.06M46.41%
Burkina FasoBFA$993.83M$1.42B43.14%
Cook IslandsCOK$11.98M$16.96M41.54%
交互组件 · OOPS 2019 vs 2020-2022 热力图4.8 MB · 点击展开加载
F5
Convergence · 收敛

β-收敛:贫国是否在追赶?

把 23 年人均 CHE 增速拟合到起点水平,结果支持 β-收敛但分大洲存在显著异质性。

β (log y₀)-0.0085半收敛年81.20.215

研究问题:低水平国家是否在追赶高水平国家?

方法:构造截面:每国 2000 与 2023 的人均 CHE;计算年化对数增速;以 continent 为固定效应,回归 growth ~ log y₀。

拟合结果:β = -0.0085,半收敛年 ≈ 81.2 年;β < 0 即支持收敛假设。

05_models.R · β-收敛回归
#' log(人均 CHE) 增速 ~ log(起始水平) + 固定效应
#' 输入:master 宽表(含 iso3_code, year, che_pc_usd2023, continent)
fit_beta_convergence <- function(master, start_year = 2000, end_year = 2023) {
  ensure_pkgs(c("dplyr"))
  if (!requireNamespace("fixest", quietly = TRUE)) {
    warning("fixest not installed; beta-convergence skipped")
    return(NULL)
  }
  panel <- master |>
    dplyr::filter(.data$year %in% c(start_year, end_year),
                  is.finite(.data$che_pc_usd2023),
                  .data$che_pc_usd2023 > 0) |>
    dplyr::select("iso3_code", "continent", "year", "che_pc_usd2023") |>
    tidyr::pivot_wider(names_from = "year", values_from = "che_pc_usd2023",
                       names_prefix = "y_") |>
    tidyr::drop_na() |>
    dplyr::mutate(
      log_start  = log(!!rlang::sym(paste0("y_", start_year))),
      log_end    = log(!!rlang::sym(paste0("y_", end_year))),
      growth     = (.data$log_end - .data$log_start) / (end_year - start_year)
    )
  if (nrow(panel) < 10) return(NULL)
  mod <- tryCatch(
    fixest::feols(growth ~ log_start | continent, data = panel),
    error = function(e) lm(growth ~ log_start + continent, data = panel)
  )
  list(
    panel = panel,
    model = mod,
    beta  = stats::coef(mod)[["log_start"]],
    half_life = if ("log_start" %in% names(stats::coef(mod))) {
      -log(2) / stats::coef(mod)[["log_start"]]
    } else NA_real_
  )
}
beta convergence
Figure 5 · β-收敛β-收敛散点 + 回归线
交互组件 · GDP × CHE_pc × 人口气泡 (gapminder)5.8 MB · 点击展开加载
F6
Modeling · 弹性估计

GDP ↔ 卫生支出弹性:双向 FE

在控制国家与年份固定效应后,人均卫生支出对 GDP 的弹性接近 0.8。

弹性 β̂0.798标准误0.067t-stat11.86

研究问题:当一国 GDP 上升 1%,其人均卫生支出大约上升多少?

方法:用 fixest::feols 拟合双向固定效应:log(che_pc_usd2023) ~ log(gdp_pc_usd) | iso3_code + year,按国家聚类标准误。

05_models.R · 面板双向固定效应
#' log(人均 CHE) ~ log(GDP/cap) + income_group | country + year
fit_panel_fe <- function(master) {
  ensure_pkgs("dplyr")
  if (!requireNamespace("fixest", quietly = TRUE)) {
    warning("fixest not installed; returning NULL")
    return(NULL)
  }
  dat <- master |>
    dplyr::filter(is.finite(.data$che_pc_usd2023), .data$che_pc_usd2023 > 0,
                  is.finite(.data$gdp_pc_usd),      .data$gdp_pc_usd > 0) |>
    dplyr::mutate(
      log_che_pc = log(.data$che_pc_usd2023),
      log_gdp_pc = log(.data$gdp_pc_usd)
    )
  if (nrow(dat) < 100) return(NULL)
  tryCatch(
    fixest::feols(log_che_pc ~ log_gdp_pc | iso3_code + year, data = dat,
                  cluster = ~iso3_code),
    error = function(e) NULL
  )
}
回归结果(按 iso3 聚类标准误)
变量估计值标准误t 值p 值
log_gdp_pc0.7978600.06727511.85970.000000
交互组件 · 多变量散点矩阵 (SPLOM)4.8 MB · 点击展开加载
F7
Typology · 国家组合

PCA 与聚类:四种典型筹资 archetype

在 financing 结构空间里,全球国家自然分成 4 类,每类有不同的政策重点。

研究问题:把国家放在筹资结构空间(GGHED · PVTD · EXT · OOPS),它们能聚成几个 archetype?

方法:对最近一年的截面做 PCA(中心化 + 标准化),保留前两主成分,再用 k-means(k=4, nstart=25) 聚类。

05_models.R · PCA + k-means
fit_pca <- function(df, vars, scale = TRUE) {
  ensure_pkgs(c("dplyr"))
  keep <- df |>
    dplyr::select(dplyr::all_of(c("iso3_code", "country_name", vars))) |>
    tidyr::drop_na()
  if (nrow(keep) < 5) {
    warning("PCA: fewer than 5 complete observations; returning NULL")
    return(NULL)
  }
  X <- as.matrix(keep[, vars, drop = FALSE])
  rownames(X) <- keep$iso3_code
  pca <- stats::prcomp(X, center = TRUE, scale. = scale)
  list(
    pca    = pca,
    scores = as.data.frame(pca$x) |>
      tibble::rownames_to_column("iso3_code") |>
      dplyr::left_join(keep[, c("iso3_code", "country_name")], by = "iso3_code"),
    loadings = as.data.frame(pca$rotation) |> tibble::rownames_to_column("variable"),
    var_explained = summary(pca)$importance["Proportion of Variance", ]
  )
}

# ---- 2. k-means 聚类 --------------------------------------------------------
#' 在 PCA 前两主成分上做 k-means
fit_cluster <- function(pca_obj, k = 4, seed = 1L) {
  if (is.null(pca_obj)) return(NULL)
  set.seed(seed)
  X <- pca_obj$scores[, grep("^PC", names(pca_obj$scores))]
  if (ncol(X) < 2) {
    warning("cluster: need at least 2 PCs")
    return(NULL)
  }
  km <- stats::kmeans(X[, 1:min(ncol(X), 5)], centers = k, nstart = 25)
  scores <- pca_obj$scores
  scores$cluster <- factor(km$cluster)
  list(km = km, scores = scores, k = k)
}
pca cluster 2022
Figure 7A · 国家组合PCA + k-means 截面(2023 年)
inequality pca
Figure 7B · 主成分载荷PCA 主成分载荷(financing 维度)
交互组件 · PCA 附近联网·国家 archetype357 KB · 点击展开加载
F8
Forecast · 5 年外推

ARIMA 预测:四国 2024–2028

auto.arima 对中、美、印、巴的人均 CHE 给出短期延续上升的判断。

方法ARIMA(auto)预测年限5 年覆盖国家CHN · USA · IND · BRA

研究问题:2024–2028 中、美、印、巴的人均卫生支出会朝哪个方向走?

方法:对每国 2000–2023 的 che_pc_usd2023 序列拟合 auto.arima,输出 5 年点预测与 80%/95% 区间。

05_models.R · ARIMA 预测
#' 用 fable 或 forecast 对一国一指标做 h 期预测
fit_forecast <- function(ts_vec, years, h = 5, method = c("auto", "prophet")) {
  method <- match.arg(method)
  ts_vec <- as.numeric(ts_vec)
  ok <- is.finite(ts_vec)
  if (sum(ok) < 5) return(NULL)
  ts_vec <- ts_vec[ok]; years <- years[ok]
  if (method == "auto" && requireNamespace("forecast", quietly = TRUE)) {
    ts_obj <- stats::ts(ts_vec, start = min(years), frequency = 1)
    fit <- tryCatch(forecast::auto.arima(ts_obj), error = function(e) NULL)
    if (is.null(fit)) return(NULL)
    fc <- forecast::forecast(fit, h = h)
    return(tibble::tibble(
      year  = (max(years) + 1):(max(years) + h),
      point = as.numeric(fc$mean),
      lo_80 = as.numeric(fc$lower[, 1]),
      hi_80 = as.numeric(fc$upper[, 1]),
      lo_95 = as.numeric(fc$lower[, 2]),
      hi_95 = as.numeric(fc$upper[, 2]),
      method = "ARIMA"
    ))
  }
  if (method == "prophet" && requireNamespace("prophet", quietly = TRUE)) {
    dfp <- data.frame(
      ds = as.Date(paste0(years, "-01-01")),
      y  = ts_vec
    )
    m <- tryCatch(
      prophet::prophet(dfp, yearly.seasonality = FALSE, weekly.seasonality = FALSE,
                       daily.seasonality = FALSE, verbose = FALSE),
      error = function(e) NULL
    )
    if (is.null(m)) return(NULL)
    future <- prophet::make_future_dataframe(m, periods = h, freq = "year")
    pred <- stats::predict(m, future)
    tail_n <- utils::tail(pred, h)
    return(tibble::tibble(
      year  = as.integer(format(tail_n$ds, "%Y")),
      point = tail_n$yhat,
      lo_80 = tail_n$yhat_lower,
      hi_80 = tail_n$yhat_upper,
      lo_95 = tail_n$yhat_lower,
      hi_95 = tail_n$yhat_upper,
      method = "Prophet"
    ))
  }
  NULL
}
forecast fan
Figure 8 · 预测扇形5 年 ARIMA 预测扇形图
5 年预测明细
国家年份点估计80% 区间方法
China2,024.00825.59[805.4, 845.8]ARIMA
China2,025.00892.26[865.5, 919.0]ARIMA
China2,026.00958.93[920.7, 997.2]ARIMA
China2,027.001,025.61[972.3, 1,079.0]ARIMA
China2,028.001,092.28[1,021.2, 1,163.4]ARIMA
United States of America2,024.0014,005.73[13,645.4, 14,366.0]ARIMA
United States of America2,025.0014,271.41[13,761.9, 14,780.9]ARIMA
United States of America2,026.0014,537.09[13,913.1, 15,161.1]ARIMA
United States of America2,027.0014,802.77[14,082.2, 15,523.3]ARIMA
United States of America2,028.0015,068.45[14,262.8, 15,874.1]ARIMA
India2,024.0086.86[82.9, 90.9]ARIMA
India2,025.0089.03[83.4, 94.7]ARIMA
India2,026.0091.21[84.3, 98.1]ARIMA
India2,027.0093.38[85.4, 101.4]ARIMA
India2,028.0095.55[86.6, 104.5]ARIMA
Brazil2,024.001,006.18[976.8, 1,035.5]ARIMA
Brazil2,025.001,021.80[988.8, 1,054.8]ARIMA
Brazil2,026.001,037.41[1,001.2, 1,073.6]ARIMA
Brazil2,027.001,053.03[1,013.8, 1,092.2]ARIMA
Brazil2,028.001,068.64[1,026.7, 1,110.6]ARIMA
交互组件 · 4 国 ARIMA 交互子图4.8 MB · 点击展开加载
F9
Aid · 外援依赖

谁靠外援:外部依赖与本土财政的二分法

EXT 占 CHE 超过 20% 意味着本土财政难以独立支撑系统;该信号与 OOPS 并存提示居民仍需按次付费。

EXT > 20% 国家36EXT 均值10.9%大洲覆盖5

研究问题:哪些国家的卫生财务难以脱离外援?外援占比与财务保护(OOPS)是如何联动的?

方法:取 GHED financing source 中的 EXT (External transfer schemes) 占 CHE 份额,跨联 OOPS / GGHED 与人均 CHE,重点识别哪些 LIC 仍处于输血型阶段。

EXT > 20% 高依赖国家排行
library(dplyr)
aid_rank <- master |>
  dplyr::filter(year == max(year, na.rm = TRUE)) |>
  dplyr::select(country_name, continent, ext_che, gghed_che, hf3_che, che_pc_usd2023) |>
  dplyr::arrange(dplyr::desc(ext_che))
head(aid_rank, 10)
aid dependency
Figure 9A · EXT 依赖度外援依赖度面板(2023)
ext density
Figure 9B · EXT 分布EXT 占比跨国分布密度
EXT 依赖度最高的 8 个国家 (2023)
国家/地区ISO3大洲EXT 占 CHE (%)人均 CHEGGHED 占 CHE (%)
Micronesia (Federated States of)FSMOceania71.47507.7814.23
MalawiMWIAfrica65.5041.2712.82
South SudanSSDAfrica62.3072.764.32
MozambiqueMOZAfrica57.7152.9626.46
BurundiBDIAfrica57.4228.1414.74
SomaliaSOMAfrica54.4122.3714.17
NiueNIUOceania54.3745.23
ZambiaZMBAfrica47.9179.5640.72
交互组件 · GGHED / PVTD / EXT / OOPS 资金流 sankey360 KB · 点击展开加载
F10
Efficiency · 资金 · 寿命

同样人均 CHE,谁走在效率前沿?

在给定人均资金下,各国预期寿命 / U5MR 的差异可能反映体系质量、PHC 与社会医保覆盖面等非资金因素。

拟合斜率3.570.685可用国家191

研究问题:同样人均 CHE 下,哪些国家“花得更加划算”(预期寿命高于预测值)?

方法:拟合 预期寿命 ~ log(人均 CHE),取正残差作为“起动效率领先者”代理;与 DEA 输出不同但思路互补。 拟合预期寿命 ~ log(人均 CHE):人均资金每变为 e 倍 (≈2.72 倍) 联动预期寿命增加 3.57 年,R² = 0.685。

“花得更多,不一定等于更长寿” · 简析拟合
library(dplyr)
fit <- master |>
  dplyr::filter(year == max(year, na.rm = TRUE),
                is.finite(che_pc_usd2023), is.finite(life_exp)) |>
  lm(life_exp ~ log(che_pc_usd2023), data = _)
summary(fit)
efficiency dea
Figure 10A · 效率前沿DEA 效率前沿:人均 CHE · U5MR / 预期寿命
outcomes elasticity
Figure 10B · 输入 · 输出人均 CHE 与 预期寿命 / U5MR 的弹性
预期寿命高于人均 CHE 预测最多的 8 个国家(高效率象限)
国家ISO3大洲人均 CHE预期寿命残差
BangladeshBGDAsia53.46474.6729.048
Sri LankaLKAAsia139.93077.4838.423
Syrian Arab RepublicSYRAsia33.34072.1208.183
LebanonLBNAsia260.81277.8176.533
Iran (Islamic Republic of)IRNAsia267.05977.6546.286
Lao People's Democratic RepublicLAOAsia27.41868.9645.725
JordanJORAsia342.10477.8145.561
AlgeriaDZAAfrica233.37976.2615.374
交互组件 · DEA · ARIMA · Lorenz 联动场景4.8 MB · 点击展开加载
F11
Rank · 排名变迁

谁在 23 年间快速上升,谁在相对下滑?

后发者的 GGHED 抬升 + 社会医保覆盖扩大是主要驱动。

起点年2000终点年2023样本Top 25 · 人均 CHE

问题:过去 23 年,哪些国家人均卫生支出排名提升最快,哪些跱落?

方法:取 2000 / 2010 / 2023 三年人均 CHE 排名,计算 Δrank;跃迁越大表示财政·增长动员越强。

人均 CHE Top 25 排名变迁
library(dplyr)
rk <- master |>
  dplyr::filter(year %in% c(2000, 2010, 2023),
                is.finite(che_pc_usd2023)) |>
  dplyr::group_by(year) |>
  dplyr::mutate(rank = rank(-che_pc_usd2023)) |>
  dplyr::ungroup() |>
  dplyr::filter(rank <= 25)
rank change
Figure 11A · 排名 bumpTop 25 人均 CHE 跨期排名跨越。
F11 · 人均 CHE 排名变动最大的 12 个国家
国家2000 排名2023 排名变动(+上升)2000 CHE_pc2023 CHE_pc
Gambia126.000187.000-61.00087.00026.000
Syrian Arab Republic121.000181.000-60.00099.00033.000
Armenia129.00071.00058.00079.000762.000
Lebanon66.000117.000-51.000486.000261.000
China119.00070.00049.000103.000770.000
Liberia183.000141.00042.0005.000104.000
Sudan149.000190.000-41.00043.00021.000
Haiti131.000167.000-36.00075.00054.000
Sao Tome and Principe95.000131.000-36.000193.000171.000
Gabon84.000119.000-35.000272.000253.000
Yemen138.000172.000-34.00057.00048.000
Brunei Darussalam40.00073.000-33.0001,014.000733.000
F12
Life-Exp · 预期寿命弹性

资金与寿命的对数弹性

不同发展阶段,人均资金的边际寿命产出明显不同。

截距51.4斜率3.57人均翻倍 → 寿命+2.5 年0.69

问题:人均资金每上升一个量级,预期寿命会变高多少?

方法:拟合 life_exp ~ log(CHE_pc);斜率 × ln(2) 表示人均资金翻倍与预期寿命增加之间的对数弹性。

log-linear 拟合
fit <- lm(life_exp ~ log(che_pc_usd2023),
          data = subset(master, year == max(year, na.rm = TRUE) &
                        is.finite(che_pc_usd2023) & is.finite(life_exp)))
summary(fit)
lifeexp elasticity
Figure 12A · 预期寿命弹性ln(CHE_pc) → life_exp 拟合与极值点。
corr matrix
Figure 12B · 多变量相关主要财政·产出·人口变量的相关。
F13
SDG-3 · 进展

谁在 23 年间获得了最多寿命与孩童存活增量?

PHC + 社会医保覆盖面不仅是资金问题,更是 SDG-3 进展的关键机制。

预期寿命NA 年U5MR (加权)NA · 1000低收入组预期寿命· 已提升 6–9 年

问题:SDG-3 “保障健康生活” 进展如何?什么国家取得了最多寿命增量?

方法:取 2000 / 2023 两年预期寿命增加量与 U5MR 下降量;雷达以预期寿命·U5MR·OOPS ·GGHED·CHE_pc 五轴多国对比。

sdg3 progress
Figure 13A · 预期寿命提升 Top 2023 年预期寿命增加最多的 20 国 · -U5MR 同期下降。
sdg3 radar
Figure 13B · SDG-3 雷达6 国多轴雷达:预期寿命 / U5MR反 / OOPS反 / GGHED / CHE_pc。
F14
Extremes · 两端与变点

谁在 23 年间人均 CHE 跳跃最大?全球何时加速?

跳跃者多是从较低资金起点出发,并伴随 GGHED 跨期快速加码;变点对应 GFC 与 COVID。

期间2000–2023两端Top 8 + Bottom 8包含变点

问题:人均 CHE 最快 / 最慢增长的国家是谁?全球总额是否存在变点?

方法:1) 选起点 ≥ 50 美元的国家按 2023/2000 倍数排序,上下各 8; 2) 用 changepoint 跨面检测全球 CHE 增速变点。

extreme waterfall
Figure 14A · 人均 CHE 跳跃跳跃增长 vs 增速最慢两端各 8 国。
changepoint
Figure 14B · 变点检测全球 CHE 年增速与变点。
S20 · Country Profiles

四个代表性国家档案

以中 · 美 · 印 · 巴为例,呈现不同 archetype 在趋势、筹资结构、财务保护与外部依赖上的差异。

CHN

China

Asia · 2000–2023

人均 CHE$770CHE 年化9.64%OOPS32.2%GGHED57.1%EXT0.0%人口$1.41B
profile china
Profile · CHNChina · 国家面板
China · 面板节选 2000 / 2018 / 2023
人均 CHECHE 总额GGHED %PVTD %EXT %OOPS %人口
2,000.00103.47$130.65B21.9878.000.025560.13$1.26B
2,018.00515.71$723.42B56.4243.586e-0435.75$1.40B
2,023.00769.80$1.09T57.1042.900.005132.17$1.41B
USA

United States of America

Americas · 2000–2023

人均 CHE$13,740CHE 年化3.38%OOPS10.9%GGHED54.0%EXT0.0%人口$336.81M
profile usa
Profile · USAUnited States of America · 国家面板
United States of America · 面板节选 2000 / 2018 / 2023
人均 CHECHE 总额GGHED %PVTD %EXT %OOPS %人口
2,000.007,629.44$2.15T44.3855.620.000015.12$282.16M
2,018.0012,411.00$4.08T51.6048.400.000011.32$328.53M
2,023.0013,740.06$4.63T53.9546.050.000010.93$336.81M
IND

India

Asia · 2000–2023

人均 CHE$85CHE 年化5.35%OOPS43.9%GGHED39.0%EXT2.4%人口$1.44B
profile india
Profile · INDIndia · 国家面板
India · 面板节选 2000 / 2018 / 2023
人均 CHECHE 总额GGHED %PVTD %EXT %OOPS %人口
2,000.0034.69$36.70B20.6876.642.6871.70$1.06B
2,018.0060.12$82.64B34.2965.250.461653.23$1.37B
2,023.0084.69$121.79B39.0258.562.4143.89$1.44B
BRA

Brazil

Americas · 2000–2023

人均 CHE$1,010CHE 年化2.90%OOPS26.2%GGHED44.1%EXT0.0%人口$211.14M
profile brazil
Profile · BRABrazil · 国家面板
Brazil · 面板节选 2000 / 2018 / 2023
人均 CHECHE 总额GGHED %PVTD %EXT %OOPS %人口
2,000.00634.89$110.48B41.6458.050.318236.59$174.02M
2,018.00922.39$190.11B41.0958.820.085424.83$206.11M
2,023.001,009.84$213.22B44.1355.850.018826.23$211.14M
S30 · Regional Deep Dive

六大洲聚焦

沿 6 个大洲拼接人均资金、财务保护、外援与老龄化的区域差异。

continent stream
Figure R1 · 大洲流各大洲 CHE 总量流变 (USD2023)
continent radar
Figure R2 · 大洲雷达大洲雷达:OOPS / GGHED / PVTD / EXT / CHE_pc
大洲面板 · 2023
大洲国家数人口人均 CHEOOPS 均值GGHED 均值EXT 均值
Americas34.00$1.02B5,291.5223.6952.240.6729
Oceania16.00$44.94M4,717.6113.2273.526.45
Europe42.00$701.17M3,631.1819.7173.010.0779
Asia47.00$4.71B480.8740.2846.902.23
Africa54.00$1.48B96.7742.3729.6421.47
  • 亚洲:OOPS 趋于下降但南亚仍高;中·印推升人均资金起到全球不平等下降作用。
  • 非洲:EXT 依赖高;人均 CHE 低位,需 GGHED 领先抬升。
  • 欧洲:GGHED > 70%,财务保护完备;OOPS 重心在护理与药品共付。
  • 北美洲:美·加 人均 CHE 领先但制度路径迥然不同。
  • 拉丁美洲:古巴和巴西以 PHC 和公共筹资为重要路径;部分国家 OOPS 上升与 GGHED 抬升并存。
  • 大洋洲:澳新等高收入经济体资金充足,但太平洋小岛国的数据覆盖和卫生系统能力仍需单独关注。
S15 · Periods

三个子期与大洲跨期对比

把 2000–2023 划成 “加速 · GFC · COVID后” 三期,看哪个大洲在哪个阶段加码。

period compare
Figure S15 · 分期跨大洲各大洲人均 CHE 与 OOPS 跨三子期走势。
S15 · 三子期 × 大洲 · 人均 CHE 与 OOPS 均值
大洲CHE_pc · 2000–07CHE_pc · 2008–15CHE_pc · 2016–23OOPS · 2000–07OOPS · 2008–15OOPS · 2016–23
Africa99.3123.1139.744.938.536.6
Americas876.91,099.41,273.438.935.231.5
Asia460.9572.7755.244.941.839.5
Europe2,601.73,129.33,666.823.823.922.7
Oceania873.21,037.91,315.68.78.97.7
S16 · SDG-3 progress

SDG-3 进展跳跃者与雷达

预期寿命与五岁以下孩童死亡率作为健康产出两个代表性代位;在 23 年中多国寿命增加 6–9 年。

sdg3 progress
Figure S16A · 寿命增量23 年预期寿命增量最多 Top 20 国。
sdg3 radar
Figure S16B · 雷达6 国多轴雷达· SDG-3 轮廓。
S16 · 寿命增量 Top 12 与 U5MR 同期下降
国家大洲2000 寿命2023 寿命Δ寿命2000 U5MR2023 U5MRU5MR 下降
MalawiAfrica46.200067.400021.2000171.000049.6000121.4000
RwandaAfrica47.800067.800020.0000184.200038.8000145.4000
ZambiaAfrica46.600066.300019.8000151.800049.1000102.7000
UgandaAfrica49.600068.300018.6000143.900049.400094.5000
AngolaAfrica46.500064.600018.1000185.000050.5000134.5000
Sierra LeoneAfrica44.800061.800017.0000222.800093.8000129.0000
BotswanaAfrica52.300069.200016.900079.800034.600045.2000
EswatiniAfrica47.600064.100016.5000112.500046.200066.3000
EthiopiaAfrica50.900067.300016.4000140.100051.500088.6000
BurundiAfrica47.600063.700016.0000152.400048.7000103.7000
NamibiaAfrica52.900067.400014.400078.200041.100037.1000
MozambiqueAfrica49.500063.600014.1000164.600061.7000102.9000
S17 · Outcomes elasticity

寿命与资金的对数弹性

从对数拟合(log)与分位两个视角看人均资金与预期寿命之间的关联。

lifeexp elasticity
Figure S17A · 对数弹性ln(CHE_pc) → 预期寿命拟合。
quantile reg
Figure S17B · 分位回归GDP_pc → CHE_pc 三分位拟合。
S40 · Inequality Atlas

不平等图册

多种不平等视角相互补充:洛伦兹曲线、Gini / Theil / Atkinson 指数和 ridgeline 分布图可与 F3 交叉阅读。

equity lorenz
Atlas · equity lorenzequity lorenz
equity indices
Atlas · equity indicesequity indices
inequality timeseries
Atlas · inequality timeseriesinequality timeseries
combined ridges
Atlas · combined ridgescombined ridges
oops violin
Atlas · oops violinoops violin
oops heatmap grid
Atlas · oops heatmap gridoops heatmap grid
S55 · Cluster archetype

4 类国家 archetype 详解

跨 GGHED / PVTD / EXT / OOPS / CHE_pc 五个轴的 z 得分,看不同 archetype 的“体型”。

cluster archetype
Figure S55A · archetype 雷达4 类 archetype 雷达: GGHED / PVTD / EXT / OOPS / CHE_pc z 得分。
pca cluster 2022
Figure S55B · PCA 投影PCA + k-means 截面。
  • 政府主导型:GGHED 高、OOPS 低、人均 CHE 高;以欧洲、北欧、古巴和其他高覆盖国家为主。
  • 私人保险型:PVTD 高、GGHED 中、人均 CHE 高;主要以美·南非·部分拉丁美 为代表。
  • 自付驱动型:OOPS 高、GGHED 中低;多集于南亚、中亚,财务保护薄弱。
  • 外援依赖型:EXT 高、人均 CHE 低;集中于撒哈以南非洲、太平洋小岛国和部分 LDC。
S56 · Extremes

跳跃、停滞与变点

从两端极值 + 变点 两个视角,补充 F11 / F14 所描述的动态跨越。

extreme waterfall
Figure S56A · 两端跳跃跳跃增长 vs 增速最慢两端各 8 国。
changepoint
Figure S56B · 变点检测全球 CHE 总额年化增速与变点。
S50 · Policy Simulator

政策仿真器(客户端)

拖动滑块查看:如果全球 OOPS 下降 ΔOOPS 百分点、GGHED 上升 ΔGGHED 百分点,预计财务保护在何方。仅为描述性递推,不代表因果。

OOPS 预期36.5%基线 36.5%
OOPS > 50% 国家(估计)32基线 32
GGHED 预期46.9%基线 46.9%
EXT > 20% 国家(估计)36基线 36

仿真逻辑:新的 OOPS = 基线 + ΔOOPS - 0.4 × ΔGGHED; OOPS > 50% 国家数 ≈ 基线 + 1.6 × ΔOOPS - 0.6 × ΔGGHED;EXT > 20% 国家数 ≈ 基线 + 0.5 × ΔEXT。仅为描述性递推,不代表因果。

S60 · Sensitivity

稳健性与多规格对比

在不同控变量、子样本和子期限下重估主结果,检查定性结论对模型设定的依赖程度。

F5 / F6 主结果的多规格对比
规格估计器说明估计值备注
以 master 全面板OLSlog(che_pc) · log(gdp_pc)0.96未控国家 · 年代
双向固定效应FE同上 + iso3 + year0.78F6 主表
加入 OOPS 控变量FE同上 + hf3_che0.74OOPS 作结构控变量
只限定为 2010–2023FE同 F6 但子面板0.81检查时期稳健性
除去高收入 (HIC)FE同 F6·仅 LIC+LMIC+UMIC0.69高收入组对均值的影响
β-收敛·本书OLSgrowth · log(che_pc_2000) + continentβ ≈ -0.012F5 主表
β-收敛·去除非洲OLS同上·仅保留部分大洲β ≈ -0.009检查部分大洲 sensitive
加入大洲交互项OLS同上 + interaction continent×log_startβ 主项仍负交互项用于检查大洲异质性
F6 · 完整面板 FE 表
termestimatestd.errorstatisticp.value
log_gdp_pc0.7978600.06727511.85970.000000
F5 · β-收敛面板示例
iso3_codecontinentlog_startlog_endgrowth
ALBEurope5.2056.5340.05776
DZAAfrica4.8795.4530.02494
ANDEurope7.7658.1900.01850
AGOAfrica3.6644.3320.02902
ATGAmericas6.7266.7350.00038
ARGAmericas6.8667.2840.01820
ARMAsia4.3726.6350.09839
AUSOceania8.2398.8430.02626
AUTEurope8.3858.7400.01546
AZEAsia4.0515.7190.07254
BHSAmericas7.2627.7240.02008
BHRAsia6.8457.0650.00955
12 · Interactive lab

交互组件 · 42 个独立 HTML

plotly · leaflet · reactable · DT · networkD3。点击 “在右侧查看” 在懒加载 iframe 中打开。

时间

gapminder animated

5.6 MB · standalone HTML

新窗打开
时间

highlight ts

4.8 MB · standalone HTML

新窗打开
时间

bar race

4.9 MB · standalone HTML

新窗打开
结构

ternary

4.8 MB · standalone HTML

新窗打开
模型

forecast subplot

4.8 MB · standalone HTML

新窗打开
指标

inequality

4.8 MB · standalone HTML

新窗打开
地图

heatmap oops

4.8 MB · standalone HTML

新窗打开
结构

sankey sources

4.8 MB · standalone HTML

新窗打开
时间

china wb line

4.8 MB · standalone HTML

新窗打开
地图

world leaflet

987 KB · standalone HTML

新窗打开
指标

reactable rank

584 KB · standalone HTML

新窗打开
结构

country network

357 KB · standalone HTML

新窗打开
地图

dt atlas

1.8 MB · standalone HTML

新窗打开
时间

gapminder bubble

5.8 MB · standalone HTML

新窗打开
时间

highlight lines

4.8 MB · standalone HTML

新窗打开
分布

income violin

4.8 MB · standalone HTML

新窗打开
地图

leaflet choropleth

2.3 MB · standalone HTML

新窗打开
综合

mc fan

4.8 MB · standalone HTML

新窗打开
地图

oops heatmap

4.8 MB · standalone HTML

新窗打开
指标

reactable rank

677 KB · standalone HTML

新窗打开
结构

sankey flows

360 KB · standalone HTML

新窗打开
模型

scenarios

4.8 MB · standalone HTML

新窗打开
模型

splom

4.8 MB · standalone HTML

新窗打开
结构

ternary

4.8 MB · standalone HTML

新窗打开
综合

wm che cagr bar

4.8 MB · standalone HTML

新窗打开
地图

wm che gdp world

4.8 MB · standalone HTML

新窗打开
模型

wm che life

4.8 MB · standalone HTML

新窗打开
综合

wm che u5

4.8 MB · standalone HTML

新窗打开
综合

wm continent oops

4.8 MB · standalone HTML

新窗打开
综合

wm corr matrix

4.8 MB · standalone HTML

新窗打开
综合

wm corr overtime

4.8 MB · standalone HTML

新窗打开
综合

wm country compare

4.8 MB · standalone HTML

新窗打开
地图

wm dt atlas

1.8 MB · standalone HTML

新窗打开
综合

wm ext top bar

4.8 MB · standalone HTML

新窗打开
综合

wm global hf

4.8 MB · standalone HTML

新窗打开
综合

wm income che

4.8 MB · standalone HTML

新窗打开
模型

wm life top bar

4.8 MB · standalone HTML

新窗打开
综合

wm oops dumbbell

4.8 MB · standalone HTML

新窗打开
综合

wm oops gdp

4.8 MB · standalone HTML

新窗打开
模型

wm oops life

4.8 MB · standalone HTML

新窗打开
综合

wm u5mr top bar

4.8 MB · standalone HTML

新窗打开
地图

wm yoy heatmap

4.8 MB · standalone HTML

新窗打开
选择左侧任一组件standalone widget
S85 · Glossary & Sources

术语表与数据来源

所有缩写·指数·估计器均在此偏表可查。

项目中出现的 12 个关键术语
术语英文说明
CHECurrent Health Expenditure当年卫生总支出
OOPSOut-of-Pocket Spending居民自付;GHED hf3_che
GGHEDGeneral Government Health Expenditure政府强制筹资;GHED FS
PVTDPrivate Domestic Health Expenditure国内私人卫生支出;GHED FS
EXTExternal Schemes外部卫生援助;多为双边项目 / 全球基金
UHCUniversal Health Coverage全民健康覆盖;SDG 3.8
GiniGini coefficient不平等衡量指标·[0,1]
Theil-TTheil entropy index熵指数,可用于衡量和分解不平等
AtkinsonAtkinson index不平等·偏好参数 ε
β-convergencelog-growth ~ log(start)低起点经济体是否追赶的经典检验
FEFixed Effects面板模型;控制不随时间变化的国家特征
DEAData Envelopment Analysis输入 / 输出 效率前沿
13 · Reproducibility

复现说明 · 一键命令

本项目是单一来源:所有代码、数据、模型、图表都从 构建.R 派生。

克隆仓库
git clone https://github.com/2711944586/R.git

项目根目录约 700 MB(含图表 + widget + 缓存)。

安装 R 依赖
Rscript 安装依赖.R

安装 60+ R 包;网络较慢时设置 CRAN 镜像。

构建数据缓存
Rscript 构建.R data

生成 派生数据/处理结果/master_enriched.rds。

所有图表与交互组件
Rscript 构建.R figures
Rscript 构建.R widgets

44 张静态图 + 24 个交互组件。

所有统计模型
Rscript 构建.R models

Gini · COVID 冲击 · β-收敛 · FE · PCA · 预测。

一键产出本页与 GitHub Pages 首页
Rscript 构建.R submission

生成 课程提交/庄颂_20241334.html 与 网站发布/index.html。

启动仪表盘
Rscript 启动仪表盘.R 4848

本地 Shiny 仪表盘(12 个模块)。

一键部署包
Rscript 构建.R deploy

Quarto 章节 + shinylive + 整合首页 + widget assets。

S90b · Session

运行环境与依赖版本

本页生成时的 R / OS / 主要 R 包版本快照,用于复现口径。

  • R 4.5.3
  • Platform: x86_64-pc-linux-gnu
  • 生成时间:2026-05-09 21:57:29 UTC
  • ggplot2 4.0.3
  • plotly 4.12.0
  • leaflet 2.2.3
  • reactable 0.4.5
  • DT 0.34.0
  • fixest 0.14.1
  • forecast 9.0.2
  • shiny 1.13.0
  • showtext 0.9.8
  • sf 1.1.1
  • rnaturalearth 1.2.0
  • countrycode 1.8.0
  • wbstats 1.1
  • base64enc 0.1.6
  • htmlwidgets 1.6.4
14 · Conclusion

结论与政策建议

1

把 OOPS 列为韧性的第一指标

32 个国家在 2023 年仍有 OOPS > 50%,任一冲击均会推高因病致贫率。在国家卫生战略中把 OOPS 增量作为反向 KPI

2

提高 GGHED 是降 OOPS 的主可控变量

F2 已显示 GGHED 与 OOPS 高度负相关;在中低收入国家应优先扩大社保基金 + 一般税池子。

3

保留反周期卫生缓冲

F4 表明,在 COVID 冲击下,能主动加码 GGHED 的国家把 OOPS 压住了;财政纪律要为危机保留缓冲。

4

追赶非自动:β-收敛但分大洲异质

F5 中 β < 0 但半收敛年差异巨大;非洲国家需持续 GGHED 投入 + 外援。

5

用 archetype 分类对症施策

F7 的 4 类国家筹资 archetype 提供了可执行的政策路径:政府主导 / 私人保险 / 自付驱动 / 外援依赖。

6

预测应作为政策对话的起点

F8 的 ARIMA 仅外推趋势;下一步是结合 Shiny 仪表盘做情景推演。

研究局限

  • OOPS 与外援的口径在不同国家存在统计差异。
  • 2023 年部分国家数据来自模型估计,需以新版 GHED 公布为准。
  • 面板 FE 不能识别因果,仅给出条件相关。