R 中的“预测”函数不预测测试集

问题描述

我试图在训练集上拟合数据,然后将其应用于完整集以查看结果。但问题是我必须使用 data.frame 来存储 x 和 y,因为我打算使用引导程序。我正在做一些这样的测试:

library(splines)

# generating the data

x_ = c(0.2,0.9,1.4,1.7)
y_ = c(2.5,4.3,5.2,2.5)
n = 50 - length(x_)
set.seed(0)
x = seq(0,3,length.out=n) + runif(n,0.1)
y = x*sin(3*x) + runif(n)
x = sort(c(x,x_))
y = c(y,y_)
df <- data.frame(x=sort(x),y=y)

# fitting the model

df1 <- df[c(2,4,6,8,16,20,25,30,35,40,45,50),]
ft <- lm(df1$y ~ bs(df1$x,knots=knots,degree=3))
pr <- predict(ft,df$x)
length(pr)

问题是 predict 不喜欢 df$x,它只适用于 data.frame(df$x)(为什么?)。此外,它拒绝预测超过 12 个值,这对我来说非常奇怪。

解决方法

因为 predict() 期望输入作为包含“x”列的 data.frame() 对象。所以当你传递一个向量时,它不会识别它。

ft <- lm(y ~ bs(x,knots=knots,degree=3),data=df1)
pr <- predict(ft,newdata=df)
length(pr)