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

tidysynth中post_mspe与pre_mspe计算方法咨询

探究tidysynth中pre_mspe与post_mspe的计算逻辑,重点解析post_mspe

核心计算逻辑

tidysynth中的MSPE(均方预测误差)本质是处理组真实观测值与合成控制组预测值的残差平方的平均值,具体划分:

  • pre_mspe:干预前(i_time之前的所有时间点),处理组真实值与合成值的残差平方的均值
  • post_mspe:干预后(i_time及之后的所有时间点),处理组真实值与合成值的残差平方的均值

你手动计算结果不符,大概率是忽略了数据提取、时间范围划分或安慰剂组干扰这些细节,以下是验证复现步骤:

复现与验证步骤

1. 提取处理组与合成组的时间序列数据

首先用grab()获取核心对比数据,避免手动计算合成值的误差:

# 提取原始处理组与合成组的时间序列
synth_ts <- synth_data %>% grab(type = "original")

该数据框包含unit(处理组为"lyndhurst, nj",合成组为"lyndhurst, nj_synthetic")、week、pass_rate三列。

2. 划分干预时段并计算残差平方

# 定义干预时间点
intervention_date <- as.Date("2024-10-06")

# 分离处理组真实值与合成组预测值
treated_real <- synth_ts %>% 
  filter(unit == "lyndhurst, nj") %>% 
  select(week, pass_rate) %>% 
  rename(treated = pass_rate)

synthetic_pred <- synth_ts %>% 
  filter(unit == "lyndhurst, nj_synthetic") %>% 
  select(week, pass_rate) %>% 
  rename(synthetic = pass_rate)

# 合并数据并计算残差平方
mspe_data <- treated_real %>%
  left_join(synthetic_pred, by = "week") %>%
  mutate(residual_sq = (treated - synthetic)^2) %>%
  mutate(period = ifelse(week < intervention_date, "pre", "post"))

3. 手动计算MSPE并与工具输出对比

# 手动计算MSPE
manual_mspe <- mspe_data %>%
  group_by(period) %>%
  summarise(mspe = mean(residual_sq, na.rm = TRUE))

# 提取tidysynth输出的MSPE(仅保留处理组)
tool_mspe <- synth_data %>% 
  grab_significance() %>%
  filter(unit == "lyndhurst, nj") %>%
  select(unit, pre_mspe, post_mspe)

此时对比manual_mspe与tool_mspe的结果,应当完全一致。

常见偏差原因

  • 混淆了处理组与安慰剂组:generate_placebos = TRUE会生成所有安慰剂组的MSPE,需通过filter(unit == "lyndhurst, nj")筛选目标处理组结果
  • 时间范围错误:post_mspe包含i_time当天及之后所有时间点,不能仅计算部分时段
  • 缺失值忽略:tidysynth计算时自动忽略缺失值(na.rm = TRUE),手动计算需同步设置该参数

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.15 21:28:22