"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,或者更确切地说,它们是彼此的线性组合。您可能想检查是否有重复的变量或相互转换的变量。
您可以做几件事:
- 删除一个高度相关的变量并重试。
- 检查另一个包以使用
winsorize
。
- 编写自己的 winsorize 函数。
完成第二步的最快方法:
require(sos)
findFn("winsorize")
这将生成描述中包含单词 "winsorize" 的所有函数的概览。只需查找描述为用于 winsorization 的函数。
我将 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,或者更确切地说,它们是彼此的线性组合。您可能想检查是否有重复的变量或相互转换的变量。
您可以做几件事:
- 删除一个高度相关的变量并重试。
- 检查另一个包以使用
winsorize
。 - 编写自己的 winsorize 函数。
完成第二步的最快方法:
require(sos)
findFn("winsorize")
这将生成描述中包含单词 "winsorize" 的所有函数的概览。只需查找描述为用于 winsorization 的函数。