无法在 matchit() 之后保存匹配样本:cbind_all(x) 中出错:参数 2 必须有名称

Cannot Save the Matched Sample after matchit(): Error in cbind_all(x) : Argument 2 must have names

我用了matchit()Method="nearest"。但是,当我尝试通过 match.data() 将输出保存到 data.frame 时,出现错误:

Error in cbind_all(x) : Argument 2 must have names.

我的代码:

a = matchit(Y ~ Year + IndustryCode + ROA + Debt, 
            data=data, method="nearest", ratio=1)
b = match.data(a)

这些是matchit()之后的警告:

Warning messages:
1: glm.fit: fitted probabilities numerically 0 or 1 occurred
2: In matchit2nearest(c(FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, TRUE, :
Fewer control than treated units and matching without replacement. Not all treated units will receive a match. Treated units will be matched in the order specified by m.order: largest.

你认为是什么原因?

第一个警告是因为您的倾向得分模型产生了完美的预测。这表明样本量较小或违反阳性(即,您的治疗组和对照组根本不同)。如果您仍然获得良好的平衡和良好的剩余样本量,您就不必担心这么多。

第二个警告是因为您的治疗组比对照组大。如果你在没有替换的情况下进行 1:1 匹配,所有控制单元将在所有处理过的单元得到匹配之前用完。要解决此问题,您需要进行替换匹配,或者考虑是否真的要推广到控制人群并切换治疗组的标签。您可以通过创建一个新变量来做到这一点,比如 notY,即 1 - Y,然后执行相同的操作。

该错误是因为我认为您使用的是 tibble 而不是标准数据框。 MatchIt 与 tibbles 不完全兼容。在您 运行 分析之前,请尝试 运行ning data <- as_data_frame(data) 将其转换回数据框。在执行此操作之前,您可能需要使用 library() 加载 tibble 包。我认为 tibble 可能是你的问题的原因是 match.data() 没有调用 cbind_all();它调用 cbind(),这是一个泛型方法,它分派到 class 方法,在本例中,是一个 tibble 的方法。 tibble 的 cbind 方法调用 cbind_all().

这个错误发生在我身上,这是因为 data 有组。所以,我确保先ungroup(data),我没有得到错误。