在R中的线性判别分析 - 训练和验证样本

3

我正在使用lda命令分析一个包含2列、234行的数据集(x):列X1包含预测变量(度量),列X2包含自变量(分类,4个类别)。我想通过使用150个观测值构建线性判别模型,然后使用其他84个观测值进行验证。在对数据进行随机分割后,我得到了x.build和x.validation,分别包含150个和84个观测值。我运行以下命令:

fit = lda(x.build$X2~x.build$X1, data=x.build, na.action="na.omit")

接下来我会像这样运行预测命令:

pred = predict(fit, newdata=x.validation)

从命令描述中,我认为在pred$class中可以获得根据建立的模型对验证数据进行分类的结果,但实际上我得到了150个观测值的分类结果,而不是我打算用作验证数据的84个。我不太清楚发生了什么事情,请问有人可以给我一个如何进行这项分析的示例吗?
非常感谢您的帮助。
1个回答

2
尝试使用以下内容替代原文:
fit = lda(X2~X1, data=x.build, na.action="na.omit")
pred = predict(fit, newdata=x.validation)

如果您在构建模型时使用此公式x.build$X2~x.build$X1,则predict函数会期望在验证数据中存在x.build$X1列。显然,验证数据中没有这样的列,因此您将获得训练数据的预测结果。


1
更不用说当你在数据参数中有 x.build 时,x.build$X2 就是多余的。 - Señor O
非常感谢!我想知道为什么以xbuild$X2... 的方式引用数据列是错误的,请问您可以告诉我其他需要学习的内容吗?再次感谢您 :) - user2500444
有两个问题:1)告诉 Rx.build 中找到 X1 是不必要的(这就是 x.build$X1 所做的),因为你已经通过说 data=x.build 来做到了。但更重要的是:2)predict 将在 newdata 中查找您在 lda 中提供的名称的列。 如果您在 lda 中使用 x.build$X1,则 predict 将寻找 x.validation$x.build$X1!(当然找不到) - Señor O

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接