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

时间:2018-10-26 13:27:21

标签: r cbind

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

  

cbind_all(x)中的错误:参数2必须具有名称。

我的代码:

a = matchit(Y ~ Year + IndustryCode + ROA + Debt, 
            data=data, method="nearest", ratio=1)
b = match.data(a)
  • 年份变量= 2003、2004等
  • IndustryCode = A02,A21等
  • 其他变量是数字。

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

  

警告消息:
1:glm.fit:拟合的概率为数字0   或发生1次
2:在matchit2nearest(c(FALSE,FALSE,FALSE,   FALSE,FALSE,FALSE,TRUE 、:
控制量少于处理单位   和匹配而无需更换。并非所有治疗的单位都会收到   一场比赛。处理后的单位将按照以下指定的顺序进行匹配   m.order:最大。

您认为原因是什么?

2 个答案:

答案 0 :(得分:1)

这个错误发生在我身上,这是因为data具有分组。因此,我确保首先ungroup(data),但没有得到错误。

答案 1 :(得分:0)

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

第二个警告是因为您的治疗组大于对照组。如果您要进行1:1匹配而不更换,则所有控制单元将在所有已处理单元匹配之前耗尽。为了解决这个问题,您需要与替换匹配,或者考虑您是否真正想将其推广到对照人群并在治疗组上切换标签。您可以通过创建一个名为notY的新变量1 - Y并执行相同的操作来完成此操作。

该错误是因为我想您正在使用小标题而不是标准数据帧。 MatchIt与小标题不完全兼容。在运行分析之前,请尝试运行data <- as_data_frame(data)将其转换回数据框。在执行此操作之前,您可能需要使用tibble装入library()软件包。我认为小问题可能是您的问题所在,是因为match.data()没有呼叫cbind_all();它调用cbind(),这是一个派发给类方法的通用方法,在本例中为类方法。 cbind的小方法调用cbind_all()