2014-01-30 159 views
7

我在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嗎? –

+3

系統是計算奇異的 - >它意味着你的設計矩陣是不可逆的 – 2014-10-31 11:58:08

回答

5

solve()中,使用較小的公差,如solve(..., tol = 1e-17)。 這應該沒問題,因爲你得到reciprocal condition number = 1.16873e-16。 更多的信息在help filethis related question

+0

。@ pidosaurus - 如果'互惠條件號'基於大輸入數據集不斷變化會怎樣?我在'R'中使用'mahalanobis()'時遇到了這個問題,因爲它也會調用solve()來計算距離。我在你引用的問題中提出了評論。試想一下,你可能會有不同的看法。 –

+0

@ChetanArvindPatil它從來沒有真正成爲我的問題。可能存在線性相關的列或列大幅度變化的情況(從第200天到第0.002天)。也許你可以嘗試深入研究像'svd()'這樣的計算反演。如果矩陣是單數的,它不能倒置。 – pidosaurus