我在线性判别函数分析(DFA)中对新案例进行分类时遇到了麻烦 - 特别是从原始变量计算每个新测试用例的判别函数值,因此我可以绘制并覆盖训练数据中的点。
对于我的训练数据框ref
我在895行的数据集上执行了线性DFA,使用z <-lda(ref$species ~ ref$v1 + ref$v2 + ref$v3 ...etc... + ref$v14)
执行了14个测量变量。我得到了7个LD函数。然后我使用predict
通过z1 <-predict(z)$x
现在我想使用前两个判别函数对数千个新案例进行分类(假设它在一个简短的示例文件中有三行)。我将一个新文件test
调用到R中,其中包含与ref
中的名称相同的矢量(原始测量值)然后我调用z2 <- predict(z, test)
但是会收到一条警告消息:
&#34; 警告信息:&#39; newdata&#39;有3行,但找到的变量有895行&#34;
如何将具有这些分数的新向量添加到我的测试数据框test
?或者至少产生这些分数的矩阵。
尽管我从这两个好网站上阅读并尝试了一些内容,但我还是没有设法解决问题:here和here。对于第二个链接,滚动到&#34;判别函数的加载&#34;。
当然,这是一件我很想念的事情......也许ref
和test
数据框架不匹配......
答案 0 :(得分:1)
使用您列出的第二个网站的示例数据,我能够运行
wine <- read.table("http://archive.ics.uci.edu/ml/machine-learning-databases/wine/wine.data", sep=",")
wine.lda <- lda(V1 ~ V2 + V3 + V4 + V5 + V6 + V7 +
V8 + V9 + V10 + V11 + V12 + V13 + V14, wine)
#create "new" data
ss<-aggregate(.~V1, wine, mean)[-1]
#predict on new data
predict(wine.lda, ss)
所以我认为问题在于你如何指定模型(或者实际上是模型协变量的名称)。我认为预测将检查以确保
attr(wine.lda$terms,"term.labels") == names(ss)
您的lda模型中的所有条款都可能具有“ref $”部分,因此它们与您的新数据不匹配。我不知道为什么他们在那个指南上有那个可怕的公式表示法的例子。我建议像上面那样做。从每个术语中取出data.frame名称并提供data.frame作为第二个参数。这样就可以将名称与新数据相匹配。