如何改变polym中的参数/向量的数量?在lm()中使用do.call()调用会导致问题

时间:2017-07-23 03:02:34

标签: r regression

我正在使用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

0 个答案:

没有答案