系统在计算上是奇异的错误。

14

我正在使用r中的fastICA包。在这个包中,我正在使用fastICA函数,它有一些参数。如果我将n.comp设置为2,则可以正常工作,但是如果我在此函数中将此参数设置为3或更多,则会出现问题:

 ica<-fastICA(datalist,n.comp=3)

datalist在这里是一个20行4列的矩阵:

     [,1]    [,2]     [,3]   [,4]
 [1,] 567.00 324.225 281.0889 538.25
 [2,] 557.75 317.500 269.5556 529.15
 [3,] 543.75 309.900 264.5778 515.95
 [4,] 557.00 316.225 265.0889 528.25
 [5,] 538.25 307.750 266.6667 510.95
 [6,] 531.25 301.025 250.0222 503.70
 [7,] 545.00 311.800 270.9333 517.40
 [8,] 550.00 316.925 284.3778 522.65
 [9,] 514.75 290.300 235.6000 487.75
[10,] 518.00 293.800 245.1556 491.20
[11,] 553.75 318.125 281.6667 526.00
[12,] 563.50 325.925 297.2667 535.75
[13,] 540.00 303.300 241.1556 511.40
[14,] 546.00 310.350 261.6444 517.90
[15,] 567.25 324.425 281.4889 538.50
[16,] 577.75 330.125 285.2222 548.40
[17,] 560.75 317.425 262.3778 531.60
[18,] 570.00 323.925 272.8222 540.65
[19,] 569.00 324.700 278.8444 540.00
[20,] 565.50 324.150 284.1333 537.00

我遇到了这个错误:

Error in solve.default(w %*% t(w)) : 
  system is computationally singular: reciprocal condition number = 1.16873e-16

请问为什么我会遇到这个错误,应该如何解决?


1
你的数据可能没有3个独立的组件。我可以建议你学习 http://www.ee.columbia.edu/~dpwe/e6820/papers/HyvO00-icatut.pdf 和 http://sccn.ucsd.edu/~arno/indexica.html ? - Carl Witthoft
3
系统在计算上是奇异的 -> 这意味着您的设计矩阵不可逆。 - user1630938
1个回答

17

solve()中,使用更小的容忍度,例如solve(..., tol = 1e-17)。 这应该没问题,因为您得到了倒数条件数=1.16873e-16。 更多信息请参见帮助文件这个相关的问题


2
.@pidosaurus - 如果“倒数条件数”根据大型输入数据集而不断变化,该怎么办?在使用mahalanobis()时,我遇到了这个问题,因为它还调用solve()来计算距离。我已经在您参考的问题中留言问过了。只是想知道您可能对此有不同的看法。 - Chetan Arvind Patil
@ChetanArvindPatil 对我来说,这从来不是一个问题。可能存在线性相关的列或者列的数量级发生了巨大变化(从第200天到0.002)。也许你可以尝试深入计算反演,比如使用'svd()'。如果矩阵是奇异的,那么它就无法被反演。 - Konstantinos

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接