R中的预测给出了错误的预测数量

时间:2019-03-17 21:18:14

标签: 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%>%预测(test $ cement)

->给我一个错误,说它不理解%>%

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

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

->两者都告诉我,尽管我同时打开了样条线和splines2库,但它们找不到函数predict.bSpline或predict.bSpline2。

predict.ns似乎不存在。

任何帮助将不胜感激。

2 个答案:

答案 0 :(得分:1)

我没有您的数据,但您应该尝试通过整个数据框测试:

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

库中也定义了“ %>%”运算符。

我认为预报.ns预报.b样条线覆盖了预报功能-查找它的文档。尽管我从未使用过样条线对象,但我读过的书建议您只使用带有常规“预测”功能的该库中的对象类型。

答案 1 :(得分:1)

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

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。 IT部门会花更多时间写出所有变量名,但是有时您会得到奇怪的结果,这可能就是您正在发生的事情。我将重新启动您的R会话,删除附件,然后重试。

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