无法在 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)
- 年份变量 = 2003、2004 等
- 行业代码 = A02、A21 等
- 其他变量是数字。
这些是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)
,我没有得到错误。
我用了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)
- 年份变量 = 2003、2004 等
- 行业代码 = A02、A21 等
- 其他变量是数字。
这些是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)
,我没有得到错误。