将新数据输入 predict() 进行多元回归?

Feeding new data into predict() for multiple regression?

假设我已经在 R 中拟合了一个具有多个预测变量的回归模型,如以下玩具示例所示:

n <- 20
x <- rnorm(n)
y <- rnorm(n)
z <- x + y + rnorm(n)
m <- lm(z ~ x + y + I(y^2))

现在我有了新的日期,由 x 和 y 值组成,我想预测相应的 z 值:

x.new <- rnorm(5)
y.new <- rnorm(5)

问题:我应该如何最好地调用 predict 以将拟合模型应用于新数据?

以下是我尝试过的一些方法,但它们不起作用:

尝试 1. 尝试使用 x.newy.new 作为新数据框的列:

> predict(m, data=data.frame(x=x.new, y=y.new))
         1          2          3          4          5          6          7 
-0.0157090  1.1667958 -1.3797101  0.1185750  0.7786496  1.7666232 -0.6692865 
         8          9         10         11         12         13         14 
 1.9720532  0.3514206  1.1677019  0.6441418 -2.3010431 -0.3228424 -0.2181511 
        15         16         17         18         19         20 
-0.8883275  0.4549592 -1.0377040  0.1750522 -2.4542843  1.2250101 

这给出了 20 个值而不是 5 个值,因此不正确。

尝试 2:可能 predict 感到困惑是因为未提供 y^2 值?尝试使用 model.frame 以正确的形式提供数据。

> predict(m, model.frame(~ x.new + y.new + I(y.new^2)))
         1          2          3          4          5          6          7 
-0.0157090  1.1667958 -1.3797101  0.1185750  0.7786496  1.7666232 -0.6692865 
         8          9         10         11         12         13         14 
 1.9720532  0.3514206  1.1677019  0.6441418 -2.3010431 -0.3228424 -0.2181511 
        15         16         17         18         19         20 
-0.8883275  0.4549592 -1.0377040  0.1750522 -2.4542843  1.2250101 
Warning message:
'newdata' had 5 rows but variables found have 20 rows 

同样,这会产生 20 个值(加上警告),所以不可能是正确的。

当告诉predict要预测什么时,参数是newdata(不是data)。

predict(m, newdata = data.frame(x = x.new, y = y.new))