2014-10-28 32 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