【问题标题】:"system is computationally singular" error when I use 'winsorize'当我使用“winsorize”时出现“系统在计算上是奇异的”错误
【发布时间】:2016-04-04 12:55:01
【问题描述】:

我要去winsorize 我的数据集使用包robustHD 去除一些异常值。这是我第一次遇到这个错误。该数据集包含 50 多个变量和 100 多个观察值。

我该如何解决这个问题?为什么矩阵奇点对于像winsorize 这样的计算很重要?谢谢。

df_win<-winsorize(df,prob=0.95)
Error in solve.default(R) : system is computationally singular: reciprocal condition number = 1.26103e-18

【问题讨论】:

  • 嗨,欢迎来到 StackOverflow。如果该示例是可重现的,那将非常有帮助。你能提供一个最小的数据集来复制这个错误吗?您能否还记下您从哪个包中获得了 winsorize 函数?多个包提供一个。
  • @Laterow 谢谢!我使用了“robustHD”包。对不起,我不能上传数据,因为它与工作有关......

标签: r syntax-error singular


【解决方案1】:

原因是robustHD中的winsorize使用solve。如果您深入查看代码,数据框上的winsorize 调用winsorize.data.frame 方法,它只是一个运行as.matrix 然后使用winsorize.matrix 方法的脚本。这反过来做了很多事情,但这里的问题是它使用了solve 函数。

您收到的错误来自solve。发生错误可能是因为您包含了一些高度相关的变量/列,或者更确切地说,它们是彼此的线性组合。您可能需要检查是否有重复的变量或相互转换的变量。

你可以做几件事:

  1. 删除高度相关的变量之一,然后重试。
  2. 签出一个不同的包来使用winsorize
  3. 编写您自己的 winsorize 函数。

第二步最快的方法:

require(sos)
findFn("winsorize")

这将生成描述中包含“winsorize”一词的所有函数的概览。只需查找描述为用于优化的函数。

【讨论】:

  • 谢谢@Laterow。好的,我明白了。 findFn 也非常有用。非常感谢!
猜你喜欢
  • 1970-01-01
  • 2018-06-20
  • 1970-01-01
  • 1970-01-01
  • 2016-08-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多