R中的多元多项式回归(预测)

时间:2018-05-09 18:48:10

标签: r regression predict polynomials

我使用60/40测试分割构建预测模型。 我想构建一个包含10个解释变量的多项式回归模型。

首先,我建立了一个基于训练的模型,然后我在training$y上回归。

model_poly = lm(training$y ~ poly(training$x1, degree=2, raw=TRUE) +
     poly(training$x2, degree=2, raw=TRUE) +
     poly(training$x3, degree=2, raw=TRUE) +
     poly(training$x4, degree=2, raw=TRUE) +
     poly(training$x5, degree=2, raw=TRUE) +
     poly(training$x6, degree=2, raw=TRUE) +
     poly(training$x7, degree=2, raw=TRUE) +
     poly(training$x8, degree=2, raw=TRUE) +
     poly(training$x9, degree=2, raw=TRUE) +
     poly(training$x10, degree=2, raw=TRUE))

之后,我想使用此模型预测新数据(test)。

poly_predictions = predict(model_poly, poly(test$x1, degree=2, raw=TRUE)+
     poly(test$x2, degree=2, raw=TRUE) +
     poly(test$x3, degree=2, raw=TRUE) +
     poly(test$x4, degree=2, raw=TRUE) +
     poly(test$x5, degree=2, raw=TRUE) +
     poly(test$x6, degree=2, raw=TRUE) +
     poly(test$x7, degree=2, raw=TRUE) +
     poly(test$x8, degree=2, raw=TRUE) +
     poly(test$x9, degree=2, raw=TRUE) +
     poly(test$x10, degree=2, raw=TRUE))

测试数据大约有200k行,训练数据大约有300k行。

问题是,poly_predictions具有训练数据的维度,而不是测试数据的维度。因此,出了点问题。

我在这里缺少什么?使用简单的线性模型进行预测时,例如

model_lm = lm(training$y ~ ., training)
lm_predictions = predict(model_lm, test)

我没有问题。

1 个答案:

答案 0 :(得分:1)

您过度指定了问题。由于您的模型公式使用training$x1,因此它在执行预测时将会查找确切的变量。相反,请使用列共享名称的事实,并将模型创建为

model_poly = lm(y ~ poly(x1, degree=2, raw=T) +
  poly(x2, degree=2, raw=T), data=df.training)

这将根据抽象变量x1x2等产生模型。

然后您可以像这样使用预测(您可以在此处省略poly次调用,因为它已融入模型中):

predict(model_poly, df.test)

产生所需的结果。否则,您通常会收到一条警告,指出您的输出数据与提供的newdata不匹配,以预测它们的长度是否不同。