"系统在计算上是单数的"当我使用' winsorize'时出错

时间:2016-04-04 12:55:01

标签: r syntax-error singular

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

1 个答案:

答案 0 :(得分:2)

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

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

你可以做几件事:

  1. 删除其中一个高度相关的变量,然后重试。
  2. 查看另一个包以使用winsorize
  3. 编写自己的winsorize函数。
  4. 第二步的最快捷方式:

    require(sos)
    findFn("winsorize")
    

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