首页 > 解决方案 > 在 R 中使用 synth() 时,“svd(c) 中的错误:'x' 中的值无限或缺失”

问题描述

我正在使用synthR 中的包来实现一种综合控制方法,其中我使用该dataprep()函数来构造要传递给的适当矩阵synth()。也就是说,我调用dataprep()如下:

dataprep_out <- dataprep(foo = csv_data,
                           predictors = vars_dep,      
                           predictors.op = "mean",
                           time.predictors.prior = 2000:2010,
                           dependent = "Log_gdp",    
                           unit.variable = "REG_FACTOR",
                           unit.names.variable = "REG_ID",
                           time.variable = "Year",
                           treatment.identifier = my_factor_treated,
                           controls.identifier = my_controls,
                           time.optimize.ssr = 2000:2010,
                           time.plot = 2000:2017
  )

之后我打电话synth()

synth_out <- synth(data.prep.obj = dataprep_out)

这很好用,并给了我期望的结果。但是,当我对另一个经过处理的观察重复相同的代码但使用完全相同的控件(即,my_factor_treated其中唯一的参数dataprep()已更改)时,调用时出现以下错误synth()

svd(c) 中的错误:“x”中的值无限或缺失。

我正在努力寻找导致此错误的原因,也是因为我不确定svd()在执行synth(). 返回的对象中没有一列dataprep()只包含零,并且它们不包含 Inf 值(这是有道理的,因为否则这个错误也应该发生在第一次处理的观察中,对吧?)。

如果有人能告诉我为什么会发生此错误以及如何防止它,我将不胜感激。我已经检查了多个相关问题,但无法找到我的答案。谢谢!

PS。我不确定如何提供合适的 MWE,因为我猜我的问题与数据有关,我将无法共享我正在使用的数据集。

标签: rsvd

解决方案


我遇到了同样的问题,和你一样,我确认我的数据集中没有缺失值或全为 0。后来我意识到这是由生成权重时使用的优​​化算法引起的。您可以尝试的一件事是在合成函数中添加参数“optimxmethod='All'”。这将尝试所有可用的方法,并向您报告性能最佳的方法。


推荐阅读