我尝试在一组物种X站点数据(物种是列,站点是行)上运行cv DFA,其中一个分组行名为" ZONE"。
我使用过之前成功使用的股票脚本,但现在我从预测功能中得到了一个我无法做出正面或反面的新错误。< / p>
我的代码很简单:
data2.lda<-lda(ZONE~SP1+SP2+SP3+SP4+SP5+SP6+SP7+SP8+SP9+SP10+SP11+SP12+SP13+SP14+SP15
,data=data2.x, Cna.action="na.omit",CV=TRUE)
list(data2.lda)
data2.lda.p<-predict(data2.lda,newdata=data2.lda.x(,c[2:17]))$class
data2.lda.p
我收到的错误是:
UseMethod出错(&#34;预测&#34;): 没有适用的方法来预测&#39;应用于类&#34;列表&#34;
的对象
我的数据与之前使用此代码的格式相同。 我哪里做错了? 感谢任何帮助,谢谢!
更新:我已经发现问题涉及代码的交叉验证部分。在R中进行编码时,是否有其他交叉验证LDA的规则?
答案 0 :(得分:1)
您的问题是predict
需要一个模型对象作为其第一个参数。使用lda
选项运行CV=T
时,它将返回列表对象而不是模型对象。 lda
文档说
如果CV = TRUE,则返回值是包含组件类MAP的列表 分类(一个因子),以及后验,后验概率 课程。
否则它是类&#34; lda&#34;的对象。含有 以下组件:
答案 1 :(得分:0)
根据PCantalupo的回答,我设法达到了我的目标。需要在预测模型期间应用交叉验证过程,而不是原始模型。功能代码是:
data2.lda<-lda(ZONE~SP1+SP2+SP3+SP4+SP5+SP6+SP7+SP8+SP9+SP10+SP11+SP12+SP13+SP14+SP15
,data=data2.x, Cna.action="na.omit")
list(data2.lda)
data2.lda.p<-predict(data2.lda,CV=TRUE,newdata=data1[c(2:17)])$class
data2.lda.p
tab<-table(data2.lda.p,data2[,1])
tab
summary(table(data2.lda.p,data2[,1]))
diag(prop.table(tab,1))
sum(diag(prop.table(tab)))