【问题标题】:predict in R gives wrong number of predictionsR中的预测给出错误的预测数量
【发布时间】:2019-08-08 06:29:06
【问题描述】:

我将我的数据集分成 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 % predict(test$cement)

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

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

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

--> 虽然我打开了 splines 和 splines2 库,但它们都告诉我他们找不到函数 predict.bSpline 或 predict.bSpline2。

predict.ns 似乎也不存在。

任何帮助将不胜感激。

【问题讨论】:

  • newdata 应该与模型中的预测变量同名,因此请尝试 newdata = data.frame(cement=test$cement) 。请不要使用attach,因为这会导致很多问题。

标签: r


【解决方案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。写出所有变量名称需要更多的输入,但有时您可能会得到奇怪的结果,这可能是您正在发生的事情。我会重新启动您的 R 会话,删除附件,然后重试。

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

【讨论】:

    【解决方案2】:

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

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

    我相信 "tidyr" 库中也定义了“%>%”运算符。

    我认为 predict.ns predict.bSpline 会覆盖 predict 函数 - 查看它的文档。虽然我从未使用过样条对象,但我读到的建议您只需使用该库中的对象类型和普通的“预测”功能。

    【讨论】:

      猜你喜欢
      • 2014-06-03
      • 2018-01-09
      • 2016-01-16
      • 1970-01-01
      • 2020-11-12
      • 2015-08-16
      • 2017-05-15
      • 2018-06-12
      • 1970-01-01
      相关资源
      最近更新 更多