2014-10-28 57 views
0

我正在嘗試運行判別式分析來識別分隔不同人羣和季節的變量。我有5個估計的連續變量,我正用它來確定這些人口和季節之間的分離。使用ade4對R進行判別分析

我的因素變量是季節和站點。我的連續變量是calcNDVI,meanNDVI,maxNDVI,minNDVI,cvNDVI,diffNDVIvals。

head(df) 

    X  x  y  date  dx  dy  dist dt  R2n abs.angle 
3 6677 15.380 52.210 2010-08-12 1.960 -5.900 6.2170411 86400 16.95890 -1.250063 
4 6678 17.340 46.310 2010-08-13 -3.300 -0.900 3.4205263 86400 105.41690 -2.875341 
5 6679 14.040 45.410 2010-08-14 -1.980 -0.055 1.9807637 86400 106.77890 -3.113822 
6 6680 12.060 45.355 2010-08-15 -0.495 0.675 0.8370484 86400 108.54852 2.203545 
7 6681 11.565 46.030 2010-08-16 -0.360 0.105 0.3750000 86400 96.40842 2.857799 
8 6682 11.205 46.135 2010-08-17 -0.245 -0.485 0.5433691 86400 95.70065 -2.038559 

    rel.angle   id  burst   SITE COUNTRY year month  newDate 
3 -0.02783079 21333_A31271 21333_A31271 SOUTH.SWEDEN SWEDEN 2010  8 X2010.08.12 
4 -1.62527754 21333_A31271 21333_A31271 SOUTH.SWEDEN SWEDEN 2010  8 X2010.08.13 
5 -0.23848141 21333_A31271 21333_A31271 SOUTH.SWEDEN SWEDEN 2010  8 X2010.08.14 
6 -0.96581813 21333_A31271 21333_A31271 SOUTH.SWEDEN SWEDEN 2010  8 X2010.08.15 
7 0.65425338 21333_A31271 21333_A31271 SOUTH.SWEDEN SWEDEN 2010  8 X2010.08.16 
8 1.38682762 21333_A31271 21333_A31271 SOUTH.SWEDEN SWEDEN 2010  8 X2010.08.17 

    calcNDVI meanNDVI maxNDVI minNDVI cvNDVI diffNDVIvals yDay seas 
3 7542.487 6296.268 8399  978 20.82924   7421 224 Aug-Sep 
4 5018.169 5906.929 7908 3181 22.97476   4727 225 Aug-Sep 
5 7513.909 6390.036 8172 3803 22.54474   4369 226 Aug-Sep 
6 5763.429 4564.911 7120 2456 25.60007   4664 227 Aug-Sep 
7 6161.736 6115.429 8052 1217 25.97495   6835 228 Aug-Sep 
8 7995.656 6207.036 7852 2191 20.11494   5661 229 Aug-Sep 

據我所知我的變量是正確的格式,如數字和因素。 現在,當我使用ade4包運行DA,我得到它我不知道這意味着什麼錯誤:

df.pca=dudi.pca(df[,19:24],scan=F) 

df.dis=discrimin(df.pca,interaction(df$SITE,df$seas),scan=F) 

Error in if (any(row.w < 0)) stop("row weight < 0") : 
    missing value where TRUE/FALSE needed 

起初我以爲這是由於NAS的可能,但它不是。 有什麼想法?

回答

0

mtcars複製的錯誤,因爲你沒有提供dput輸出,並從剪貼板粘貼沒有工作:

> df = mtcars 
> df.pca = dudi.pca(df,scannf=F) 
> df.disc = discrimin(dudi=df.pca,interaction(df$carb,df$cyl),scan=F) 

給出:

Error in if (any(row.w < 0)) stop("row weight < 0") : 
    missing value where TRUE/FALSE needed 

然而,一點點調整解決了問題:我只是指定了fac選項並將其設置爲factor,即使str(interaction(df$carb,df$cyl))返回factor

df.disc = discrimin(dudi=df.pca,fac=factor(interaction(df$carb,df$cyl)),scan=F) 

返回沒有錯誤

+0

真棒!感謝Bernardo。 – 2014-10-28 21:20:56

+0

@navindersingh,很高興能夠幫助!只是一個使用'Stackoverflow'的提示,但如果你的問題已經得到解答,請確保接受一個答案,以便進一步參考。 – Bernardo 2014-10-28 22:13:19