将新数据输入 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.new
和 y.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))
假设我已经在 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.new
和 y.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))