我使用了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)
这些是matchit()
之后的警告:
警告消息:
1:glm.fit:拟合的概率为数字0 或发生1次
2:在matchit2nearest(c(FALSE,FALSE,FALSE, FALSE,FALSE,FALSE,TRUE 、:
控制量少于处理单位 和匹配而无需更换。并非所有治疗的单位都会收到 一场比赛。处理后的单位将按照以下指定的顺序进行匹配 m.order:最大。
您认为原因是什么?
答案 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()
。