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

如何在Matchit输出PSM配对结果时保留原始账号信息?

解决Matchit PSM配对结果关联账号并导出的方法

核心思路

利用match.matrix中的观测序号,直接关联原始数据里的account number字段,将配对关系转化为包含双方账号的表格后导出。

具体步骤(以1:1匹配为例,多匹配可扩展)

假设你的Matchit结果对象名为m.out,原始数据框名为data,账号字段为account_number:

  1. 提取匹配关系矩阵

    # 取出匹配矩阵
    match_mat <- m.out$match.matrix
    # 转为数据框并给对照组序号列命名
    match_df <- as.data.frame(match_mat)
    colnames(match_df) <- "control_idx"
    
  2. 关联处理组与对照组账号

    # 提取处理组账号(行名对应处理组观测序号)
    match_df$treatment_account <- data$account_number[as.integer(rownames(match_df))]
    # 提取对照组账号(control_idx对应对照组观测序号)
    match_df$control_account <- data$account_number[as.integer(match_df$control_idx)]
    
  3. 整理并导出结果

    # 保留账号列,移除序号列
    final_results <- match_df[, c("treatment_account", "control_account")]
    # 导出为CSV文件
    write.csv(final_results, "psm_paired_accounts.csv", row.names = FALSE)
    

多匹配场景扩展(如1:3匹配)

如果每个处理组匹配多个对照组,按以下方式处理:

match_mat <- m.out$match.matrix
match_df <- as.data.frame(match_mat)
colnames(match_df) <- paste0("control_idx_", 1:ncol(match_df))

# 提取处理组账号并重复对应匹配次数
match_df$treatment_account <- rep(data$account_number[as.integer(rownames(match_df))], each = ncol(match_df))
# 批量提取所有对照组账号
control_accounts <- unlist(lapply(match_df[,1:ncol(match_df)], function(x) data$account_number[as.integer(x)]))
# 整理成长格式表格,标注匹配优先级
final_results <- data.frame(
  treatment_account = match_df$treatment_account,
  control_account = control_accounts,
  match_rank = rep(1:ncol(match_df), nrow(match_df))
)

# 导出结果
write.csv(final_results, "psm_multiple_paired_accounts.csv", row.names = FALSE)

注意事项

  • 确保原始数据data的行号未被修改(未做行删除、排序等操作),否则观测序号会与match.matrix中的值不匹配。
  • 若匹配结果存在NA(部分处理组未匹配到对照组),可通过na.omit()去除未匹配行后再导出。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.30 09:58:26