2011-09-09 62 views
1

我當時正在使用R.代碼判別分析如下:判別分析有R

fit <- lda(group~ A+C1_1+C2+D1a_1+D2_1+D3_1+D3_2+D3_3+E1a_1+E1b_1+E1b_2+E2_1+E3_1+E3_2+E3_3+F2+G_1+G_2+G_3+G_4+H1_1+H2a_1+H2b_1+H3_1+H4_1_1+H1_2+H2a_2+H2b_2+ H3_2+H4_1_2+J1_1+J2_1+J3_1+K1a+K2_1+K2_2+K2_3+K2_4,data=data1) 

但不幸的是,我發現了以下錯誤:

Error in x - group.means[g, ] : non-conformable arrays 

這是海峽(DATA1 )輸出:

'data.frame': 210 obs. of 133 variables: 

$ A    : int 1 1 1 1 1 1 1 2 1 2 ... 

$ C1_1   : int 22 29 12 12 25 15 30 20 30 15 ... 
$ C2    : int 2 2 2 2 2 2 2 1 2 2 ... 
$ D1a_1   : int 40 50 160 15 150 105 150 45 100 80 ... 
$ D2_1   : int 100 100 100 100 100 100 100 90 95 100 ... 
$ D3_1   : int 5 15 40 10 30 25 30 40 25 60 ... 
$ D3_2   : int 10 30 30 15 30 25 60 40 20 10 ... 
$ D3_3   : int 10 30 30 10 10 15 10 20 20 30 ... 
$ E1a_1   : int 80 25 140 30 150 120 80 30 100 100 ... 
$ E1b_1   : int 100 50 50 25 80 70 80 75 10 75 ... 
$ E1b_2   : int 0 50 50 75 20 30 20 25 90 25 ... 
$ E2_1   : int 20 60 75 70 60 80 75 100 60 80 ... 
$ E3_1   : int 5 20 20 5 30 20 25 25 10 30 ... 
$ E3_2   : int 10 20 40 15 30 20 50 50 10 30 ... 
$ E3_3   : int 10 20 15 10 10 20 25 25 10 40 ... 
$ G_1    : int 5 50 20 25 80 10 30 25 35 5 ... 
$ G_2    : int 0 10 50 50 10 10 30 30 30 10 ... 
$ G_3    : int 90 30 20 25 10 50 5 30 15 80 ... 
$ G_4    : int 5 10 10 0 0 30 35 15 20 5 ... 
$ H1_1   : int 1 3 3 2 3 2 3 3 2 3 ... 
$ H2a_1   : int NA NA NA 1 NA 2 NA NA 1 NA ... 

$ H2b_1   : int NA 2 1 NA 2 NA 1 1 NA 1 ... 

$ H3_1   : int 2 2 2 2 2 3 3 3 2 2 ... 

$ H4_1_1   : int 6 5 7 6 3 6 5 6 5 5 ... 

$ J1_1   : int 4 6 4 4 4 4 6 7 3 3 ... 
$ J2_1   : int 2 6 5 3 4 4 1 2 3 3 ... 
$ J3_1   : int 4 5 3 3 4 4 6 7 3 4 ... 

$ K1a    : int 2 2 2 2 2 2 2 2 1 1 ... 

$ K2_1   : int NA NA NA NA NA NA NA NA 0 0 ... 
$ K2_2   : int NA NA NA NA NA NA NA NA 1 0 ... 
$ K2_3   : int NA NA NA NA NA NA NA NA 0 1 ... 
$ K2_4   : int NA NA NA NA NA NA NA NA 0 0 ... 

    [list output truncated 

]]

其次,有誰能夠告訴我怎麼走在判別分析中使用的變量的顯着性水平。

+0

語法錯誤:是你最後一次'數據= data1'之前缺少逗號。 – Andrie

+0

對不起Andrie!但是我在這裏犯了這個錯誤。我運行的代碼沒有這個錯誤。 – Beta

+1

請將'str(data1)'的結果粘貼到您的問題中。 – Andrie

回答

6

正常工作與一個隨機產生的數據,而不NA值來設置:

set.seed(101) 
z <- matrix(runif(210*133),nrow=210) 
zz <- data.frame(A=sample(1:2,size=210,replace=TRUE),z) 
m <- MASS::lda(A~.,data=zz) 

我可以重現該錯誤如果我添加足夠NA S:

z2 <- z 
z2[sample(length(z),size=2000)] <- NA 
zz2 <- data.frame(A=sample(1:2,size=210,replace=TRUE),z2) 
m <- MASS::lda(A~.,data=zz2) 

導致

Error in x - group.means[g, ] : non-conformable arrays 

(如果我敲少我得到的共線性的警告代替)

一開始,嘗試用任何NA值(或有以上幾個去除所有變量),看看你能得到它的工作。

對於p值部分的問題:谷歌搜索「+ r MASS lda判別分析」導致http://www.statmethods.net/advstats/discriminant.html並建議(並提供鏈接)MANOVA這些p值。

基於谷歌搜索一點點,它看起來像人們通常有Wilks的lambda使用MANOVA在LDA的情況下測試,例如:http://userwww.sfsu.edu/~efc/classes/biol710/discrim/discrim.pdf

Discriminant function analysis is broken into a 2-step process: (1) testing significance of a set of discriminant functions, and; (2) classification. The first step is computationally identical to MANOVA.

他們去展示一個例子使用Wilks的lambda,雖然?manova說,皮萊-Bartlett檢驗(這是manova默認值)可能會更好的......在任何情況下,這是很容易做到的考驗。

> summary(manova(z~zz$A),test="Wilks") 
      Df Wilks approx F num Df den Df Pr(>F) 
zz$A  1 0.38164 0.92587 133  76 0.6545 
Residuals 208  

當然這不正是你問什麼 - 你問(我認爲)與各個變量相關而不是與整個測試的顯着性水平。我可以想像,你可以通過適當的多重性校正邏輯迴歸做一些事情,但是這正在變成一個統計,而不是的R問題。如果你沒有得到任何進一步的答案,在這裏你可能會考慮要求對http://stats.stackexchange.com適當改寫的問題,引用了這個問題...

+0

是的。有效。謝謝你本!我實際上保持NA值的變量。 – Beta

+0

任何人都可以回答我的第二個問題嗎?謝謝! – Beta

+0

嘿!謝謝Ben!之前沒有看到您的回答,因此很遲纔回復。 – Beta