【发布时间】:2017-03-31 04:33:17
【问题描述】:
我正在尝试绘制使用 MASS 包的 lda 函数创建的 lda 对象。
我使用的数据在这里: https://pastebin.com/yjfmsE3F
我当前的代码是:
types <- c('GO', 'GO', 'GO', 'GO', 'GO', 'OO', 'OR', 'OO', 'OO', 'GO', 'GR', 'OO', 'OO', 'GO')
bacDummy <- t(bacCountData)
bacDummy2 <- decostand(bacDummy, "freq")
bacDummy3 <- cbind(types, bacDummy2)
colnames(bacDummy3)[1] <- "Site"
bacDummy4 <- as.data.frame(bacDummy3)
decostand 构成 vegan 包。
然后我继续尝试使用lda-function:
bac.lda <- lda(bacDummy4[,2:170], grouping=types)
这给了我以下错误:
Error in lda.default(x, grouping, ...) :
variables 4 53 114 138 appear to be constant within groups
然后我删除了令人不安的列(即使我知道这是肮脏的工作):
bacDummy4 <- bacDummy4[,-139]
bacDummy4 <- bacDummy4[,-115]
bacDummy4 <- bacDummy4[,-54]
bacDummy4 <- bacDummy4[,-5]
这让我可以做 LDA,但是有警告:In lda.default(x, grouping, ...) : variables are collinear
当我尝试在散点图中绘制组时,出现以下错误:
plot(bac.lda)
Error in FUN(x, aperm(array(STATS, dims[perm]), order(perm)), ...) :
non-numeric argument to binary operator
我做错了什么?如果我这样做 str(bac.lda) 我会得到这个输出:
List of 8
$ prior : Named num [1:4] 0.5 0.0714 0.3571 0.0714
..- attr(*, "names")= chr [1:4] "GO" "GR" "OO" "OR"
$ counts : Named int [1:4] 7 1 5 1
..- attr(*, "names")= chr [1:4] "GO" "GR" "OO" "OR"
$ means : num [1:4, 1:165] 6.14 1 2.2 5 2.14 ...
..- attr(*, "dimnames")=List of 2
.. ..$ : chr [1:4] "GO" "GR" "OO" "OR"
.. ..$ : chr [1:165] "ReferenceOTU1484" "ReferenceOTU893" "ReferenceOTU1445" "ReferenceOTU623" ...
$ scaling: num [1:165, 1:3] -0.01649 -0.03767 -0.00607 0.04141 -0.03966 ...
..- attr(*, "dimnames")=List of 2
.. ..$ : chr [1:165] "ReferenceOTU1484" "ReferenceOTU893" "ReferenceOTU1445" "ReferenceOTU623" ...
.. ..$ : chr [1:3] "LD1" "LD2" "LD3"
$ lev : chr [1:4] "GO" "GR" "OO" "OR"
$ svd : num [1:3] 4.54 3.06 2.03
$ N : int 14
$ call : language lda(x = bacDummy4[, -1], grouping = bacDummy4$Site)
- attr(*, "class")= chr "lda"
非常感谢所有帮助!
【问题讨论】: