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

使用augsynth包运行交错合成控制时遇“x必须为数值型”错误求助

交错采纳场景下augsynth包multisynth函数报错:'x' must be numeric

问题描述

我用augsynth包针对交错采纳场景运行合成控制分析,严格遵循官方文档操作,但始终报错。已确认所有应属数值型的变量都是数值类型,仍收到如下错误:

> ppool_syn <- multisynth(y ~ treated, state_abb, year, nu = 0.5, t)
Adding missing grouping variables: `state_abb`
Adding missing grouping variables: `state_abb`
Error in colMeans(X[!is.finite(trt), , drop = F], na.rm = TRUE): 
  'x' must be numeric`

尝试重新转换变量为数值型后问题依旧,可通过以下代码复现数据集:

# 创建数据集
df <- data.frame(
  state_abb = c(rep("AL", 10), rep("AR", 10), rep("AZ", 10), rep("CA", 10), 
                rep("CO", 10), rep("FL", 10), rep("GA", 10), rep("IA", 10), 
                rep("ID", 10), rep("IL", 10), rep("IN", 10), rep("KS", 10), 
                rep("KY", 10), rep("LA", 10), rep("MD", 10), rep("ME", 10)),
  year = rep(2013:2022, 16),
  y = c(
    0, 0, 0, 34, 26, 19, 28, 39, 45, 12, # AL
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0,        # AR
    0, 0, 0, 11, 31, 27, 24, 45, 35, 16, # AZ
    0, 0, 0, 0, 46, 83, 146, 247, 314, 213, # CA
    0, 0, 0, 0, 0, 0, 0, 0, 27, 14,      # CO
    0, 19, 77, 250, 309, 341, 382, 430, 218, 92, # FL
    0, 15, 32, 11, 41, 27, 40, 76, 55, 21, # GA
    0, 0, 0, 0, 0, 11, 0, 22, 0, 0,      # IA
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0,        # ID
    0, 0, 42, 298, 550, 651, 660, 839, 625, 435, # IL
    0, 0, 0, 0, 51, 75, 112, 82, 29, 11, # IN
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0,        # KS
    0, 0, 36, 57, 76, 48, 66, 55, 22, 11, # KY
    0, 0, 0, 0, 17, 26, 80, 116, 79, 0,  # LA
    0, 10, 62, 312, 333, 257, 129, 67, 10, 0, # MD
    0, 0, 0, 0, 13, 26, 12, 23, 0, 0     # ME
  ),
  post_fts = c(
    rep(0, 9), 1,                       # AL
    rep(0, 10),                         # AR
    rep(0, 8), 1, 1,                    # AZ
    rep(0, 10),                         # CA
    rep(0, 6), 1, 1, 1, 1,              # CO
    rep(0, 10),                         # FL
    rep(0, 10),                         # GA
    rep(0, 10),                         # IA
    rep(0, 10),                         # ID
    rep(0, 10),                         # IL
    rep(0, 10),                         # IN
    rep(0, 10),                         # KS
    rep(0, 10),                         # KY
    rep(0, 9), 1,                       # LA
    rep(0, 5), 1, 1, 1, 1, 1,           # MD
    rep(0, 8), 1, 1                     # ME
  ),
  fts_year = c(
    rep(2022, 10),  # AL
    rep(Inf, 10),   # AR
    rep(2021, 10),  # AZ
    rep(Inf, 10),   # CA
    rep(2019, 10),  # CO
    rep(Inf, 10),   # FL
    rep(Inf, 10),   # GA
    rep(Inf, 10),   # IA
    rep(Inf, 10),   # ID
    rep(Inf, 10),   # IL
    rep(Inf, 10),   # IN
    rep(Inf, 10),   # KS
    rep(Inf, 10),   # KY
    rep(2022, 10),  # LA
    rep(2018, 10),  # MD
    rep(2021, 10)   # ME
  ),
  treated = c(
    rep(0, 9), 1,                       # AL
    rep(0, 10),                         # AR
    rep(0, 8), 1, 1,                    # AZ
    rep(0, 10),                         # CA
    rep(0, 6), 1, 1, 1, 1,              # CO
    rep(0, 10),                         # FL
    rep(0, 10),                         # GA
    rep(0, 10),                         # IA
    rep(0, 10),                         # ID
    rep(0, 10),                         # IL
    rep(0, 10),                         # IN
    rep(0, 10),                         # KS
    rep(0, 10),                         # KY
    rep(0, 9), 1,                       # LA
    rep(0, 5), 1, 1, 1, 1, 1,           # MD
    rep(0, 8), 1, 1                     # ME
  )
)

# 查看数据集前20行
head(df, 20)

解决方案

报错核心原因是**multisynth函数参数传递格式错误**,交错采纳场景下需明确指定处理时间变量,且参数顺序、格式需严格匹配:

  1. 修正函数调用格式:
    当前调用缺少处理时间变量的正确传递,且参数t未定义。应使用fts_year作为处理时间变量,调整参数顺序并指定数据集:

    library(augsynth)
    
    # 正确调用multisynth
    ppool_syn <- multisynth(y ~ treated, 
                            unit = state_abb, 
                            time = year, 
                            treatment = fts_year,  # 关键:指定处理时间变量
                            nu = 0.5,
                            data = df)
    
  2. 额外检查点:

    • 确认未处理单位(如AR、CA)的fts_year值为Inf,你的数据已满足该要求;
    • 确认treated变量为数值型(你的数据中已为0/1数值),无需额外转换。

运行修正后的代码即可正常执行合成控制分析。


内容的提问来源于stack exchange,提问作者Will H.

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.17 21:15:01