MatchIt (R的倾向评分匹配包)抛出与生成的NAs相关的错误



我在128GB内存的系统上使用MatchIt包。

首先,我的数据没有任何NAs。我的第一个尝试是,使用广义线性模型(默认为逻辑回归)和"最近邻"模型。工作:

headache6MontsMatch1 <- matchit(Headache_past_six_months ~ sex + age + townsend + alcohol + smoking, method="nearest", distance="glm", data=reducedDF)

但是,从大约100,000条记录中,我从匹配中丢失了大约30,000条。我想试一试最优的"饱"。方法。

headache6MontsMatch2 <- matchit(Headache_past_six_months ~ sex + age + townsend + alcohol + smoking, method="full", link="probit", distance="glm", data=reducedDF) 

不幸的是,这会抛出错误:

NAs produced by integer overflowError in if ((nc * nr > getMaxProblemSize()) && warning.requested) { : 
missing value where TRUE/FALSE needed

进一步研究getMaxProblemSize(),似乎我受到了匹配的硬限制。所以我试过:

setMaxProblemSize()

然后用getMaxProblemSize对问题大小进行双重检查,得到Inf.

但是我仍然遇到同样的问题。我的机器在128GB内存中舒适地运行在56GB左右,CPU只消耗了6%,磁盘也没有真正被触动。

这是一种有趣的错误,与MatchIt无关。这与R不能将大数表示为整数有关。

我假设你们大约有35000个治疗单位和65000个控制单位。optmatch计算问题大小为nc * nr,其中nc为控制数,nr为处理数。optmatch将这些数字存储为整数,因为它们是内部使用的距离矩阵的维数。对于nr = 35000nc = 65000,nc * nr是一个非常大的数字。R不能表示像整数那么大的数字(见这里),而是为这个值生成NA。因为NA不能在if语句中使用,所以会抛出错误。

除了使用较小的样本或要求optmatch开发人员修复此错误之外,没有解决此问题的方法。他们可以通过在计算nc * nr之前将ncnr转换为双精度值来轻松解决这个问题。

编辑8/21/21:我联系了optmatch的维护者,他们修复了这个问题。这将在即将到来的optmatch版本中更正。

最新更新