"system is computationally singular" 使用 'winsorize' 时出错

"system is computationally singular" error when I use 'winsorize'

我将 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

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

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

您可以做几件事:

  1. 删除一个高度相关的变量并重试。
  2. 检查另一个包以使用 winsorize
  3. 编写自己的 winsorize 函数。

完成第二步的最快方法:

require(sos)
findFn("winsorize")

这将生成描述中包含单词 "winsorize" 的所有函数的概览。只需查找描述为用于 winsorization 的函数。