r - 在 R 中使用 synth() 时,“svd(c) 中的错误:'x' 中的值无限或缺失”
问题描述
我正在使用synth
R 中的包来实现一种综合控制方法,其中我使用该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,因为我猜我的问题与数据有关,我将无法共享我正在使用的数据集。
解决方案
我遇到了同样的问题,和你一样,我确认我的数据集中没有缺失值或全为 0。后来我意识到这是由生成权重时使用的优化算法引起的。您可以尝试的一件事是在合成函数中添加参数“optimxmethod='All'”。这将尝试所有可用的方法,并向您报告性能最佳的方法。
推荐阅读
- scala - Scala 相当于 Angular 的漂亮过滤器
- go - 如何更新 Go 的 Delve 调试器?
- amazon-web-services - cloundfront compress 似乎不起作用
- python - 了解在剪刀石头布程序中字典/列表的这种用法吗?
- processing - 从秒到其他度量的 Java 转换在某些增量处失败
- c - ASM 约束副作用
- javascript - Javascript清除多选框
- jquery - 单击另一个元素时使用 .this 来切换类
- python - python更新后cs集合不起作用
- react-native - 在本机反应中减少长按 TouchableHighlight 的持续时间