首页 > 解决方案 > R中的预测给出错误的预测数量

问题描述

我将我的数据集分成 2 个数据框:训练(有 830 行)和测试(200 行)。列名相同且顺序相同。

我建立了一个自然样条模型来预测单个变量水泥的强度。

当我尝试使用该模型对我的测试集进行预测时,我得到的不是预期的 200 个预测,而是 830 个预测。我不知道为什么会这样。我已经浏览了帮助页面和网络,但我没有找到任何解决此问题的方法。

我检查了 test$cement 的尺寸,它确实只有 200 个条目。

这是我现在的代码:

library(tidyverse)
library(caret)
library(splines)

attach(train)
fit1 <- lm(strength~ns(cement, 4), data = train)
summary(fit1)
pred1 <- predict(fit1, newdata = data.frame(test$cement), se=T)
pred1
detach(train)

我也尝试过这些预测版本:

pred2 <- fit1 %>% predict(test$cement)

--> 这给了我错误,说它不理解 %>%

pred = predict.bSpline(fit1, newdata = test$cement, se=T)

pred = predict.bSpline2(fit1, newdata = test$cement, se=T)

--> 两者都告诉我他们找不到函数 predict.bSpline 或 predict.bSpline2,尽管我打开了 splines 和 splines2 库。

predict.ns 似乎也不存在。

任何帮助将不胜感激。

标签: r

解决方案


我认为我们需要查看您的数据集的可重复示例,因为我认为这可能会导致您的问题。当我使用以下代码时,我得到了正确的结果:

library(dplyr)
library(splines)

train <- sample_frac(mtcars, .8)

test <- setdiff(mtcars, train)

fit1 <- lm(mpg~ns(wt, 4), data = train)

pred1 <- predict(fit1, newdata = test, se=T)

pred1

想想caret我会确保您在创建训练/测试拆分时没有创建列表对象(createDataPartition(list = FALSE)

此外,我不会使用attach. 写出所有变量名称需要更多的输入,但有时您可能会得到奇怪的结果,这可能是您正在发生的事情。我会重新启动您的 R 会话,删除附件,然后重试。

不是最好的解决方案,但我会试一试。


推荐阅读