从 R 中的 lm 中提取变量以使用预测

Pulling variables from lm in R to use predict

说我运行以下lm

my.model = lm(distance ~ speed, data = my.data)

我可以执行以下操作来进行单元素预测

predict(my.model, speed = c(40))

情况是这样的:我有一个 lm 并且我知道它的作用(它是距离对速度的回归)但我不知道回归量被命名为速度。我怎么还能做预测?

predict(my.model, ??? = c(40))

我可以通过 names(my.model$coefficients) 获得回归变量的名称,但我不知道如何将其传递给预测

predict(my.model, names(my.model$coefficients)[2] = c(40)) 不行

有什么建议吗?

谢谢!

使用内置 BOD 作为示例 运行 lm 然后传递一个单元素列表 或数据框 predict 使用 setNames 适当地设置名称:

fm <- lm(demand ~ Time, BOD)

predict(fm, setNames(list(5.5), variable.names(fm)[2]))
##        1 
## 17.98929 

另一种方法是根本不使用 predict。使用上面的 fm

coef(fm) %*% c(1, 5.5)
##          [,1]
## [1,] 17.98929

iris为例

myModel = lm(Petal.Width ~ Sepal.Length, data = iris)
predict(myModel, structure(list(1), .Names = attr(terms(myModel), "term.labels"), class = "data.frame"))
#        1 
#-2.447297 

说明

myModel中的自变量名恢复使用:

attr(terms(myModel), "term.labels")
#[1] "Sepal.Length"

如果我们想动态创建一个 data.frame 并在 myModel 中使用一个名为自变量的列,我们会这样做:

structure(list(1), .Names = attr(terms(myModel), "term.labels"), class = "data.frame")
#  Sepal.Length
#1            1

然后我们将 data.frame 传递给 lm 对象的 predict 方法,使用:

predict(myModel, structure(list(1), .Names = attr(terms(myModel), "term.labels"), class = "data.frame"))