我正在使用polym,我无法弄清楚如何改变多项式回归中使用的向量数。该数字应取决于训练数据帧中有多少要素f。现在我发现了这样的事情:
if (f==1) {
model <- lm(Price ~ polym(X1,degree=3, raw=T), data=train)
} else if (f==2) {
model <- lm(Price ~ polym(X1,X2,degree=3, raw=T), data=train)
} else if (f==3) {
model <- lm(Price ~ polym(X1,X2,X3,degree=3, raw=T), data=train)
} else if (f==4) {
model <- lm(Price ~ polym(X1,X2,X3,X4,degree=3, raw=T), data=train)
} else if (f==5) {
model <- lm(Price ~ polym(X1,X2,X3,X4,X5,degree=3, raw=T), data=train)
}
我最初的方法是使用do.call(),如下所示:
features <- as.list(train[,1:f])
degree<-3
polym_args <- c(features, degree=degree, raw=T)
model <- lm(train$Price ~ do.call(polym,polym_args))
summary(model)
predict(model, newdata=test)
这适用于拟合模型和查看摘要信息,但在预测新问题时会产生一个特殊问题。在新数据上调用predict()会从训练数据中返回原始拟合数据点而不是新预测,以及以下错误:
Warning message:
'newdata' had 4 rows but variables found have 100 rows
(我通过删除它并尝试正常的聚合规范来验证这是do.call()的问题,这不会导致上述错误。)
是否有一种直接使用所有可用载体的方法?
示例列车数据:
X1 X2 Price
0.31 0.76 1312.07
0.99 0.23 717.1
0.84 0.29 607.91
0.28 0.45 270.4
0.07 0.83 289.88
0.66 0.8 830.85
0.73 0.92 1038.09
0.57 0.43 455.19
0.43 0.89 640.17
示例测试数据:
X1 X2
0.05 0.54
0.91 0.91
0.31 0.76
0.51 0.31