2

我将使用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
4

1 回答 1

2

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

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

您可以做几件事:

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

第二步最快的方法:

require(sos)
findFn("winsorize")

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

于 2016-04-04T19:28:36.270 回答