有没有办法在不同的数据集上使用 lm() 生成的模型?

Is there a way to use a model generated by lm() on a different set of data?

我已经使用 R- 中的 lm() 函数生成了一个线性模型,例如,

lm.cars = lm(mtcars$mpg ~ mtcars$hp)

这会输出以下内容:

Call:
lm(formula = mtcars$mpg ~ mtcars$hp)

Coefficients:
(Intercept)    mtcars$hp  
   30.09886     -0.06823  

我现在处于一种情况,我想在不同的数据集上使用此模型定义的函数 (y = -0.07x + 30.1)(我有不同的数据,这样做更有意义,但思路是一样的)。因此,我有一组不同的 x 值,我想使用从 lm 拟合中获得的函数来预测 y 值。 我想知道是否有比手动读取所有参数并用它们定义函数更好的方法来做到这一点。我有很多具有许多参数的不同线性模型,这似乎有点乏味。是否有可以为我执行此操作的内置函数?

谢谢!

试试这个:

lm.cars <- lm(mtcars$mpg ~ mtcars$hp)

#New dummy data
NDummy <- mtcars
NDummy$Predict <- predict(lm.cars,NDummy)

                   mpg cyl disp  hp drat    wt  qsec vs am gear carb  Predict
Mazda RX4         21.0   6  160 110 3.90 2.620 16.46  0  1    4    4 22.59375
Mazda RX4 Wag     21.0   6  160 110 3.90 2.875 17.02  0  1    4    4 22.59375
Datsun 710        22.8   4  108  93 3.85 2.320 18.61  1  1    4    1 23.75363
Hornet 4 Drive    21.4   6  258 110 3.08 3.215 19.44  1  0    3    1 22.59375
Hornet Sportabout 18.7   8  360 175 3.15 3.440 17.02  0  0    3    2 18.15891
Valiant           18.1   6  225 105 2.76 3.460 20.22  1  0    3    1 22.93489

有了predict()你就可以使用模型了。只需注意新数据中变量的名称。这里我包含了一个虚拟数据头。

是的,您可以使用 predict。重要的是,您的新数据集必须具有与原始数据集中相同的列名。在这种情况下,这意味着您必须创建一个包含 hp 列的数据框:

my_model <- lm(mpg ~ hp, data = mtcars)
my_new_data <- data.frame(hp = runif(n=10, 50, 300))
predict(my_model, my_new_data)

输出

> predict(my_model, my_new_data)
       1        2        3        4        5        6        7        8 
22.40625 19.90452 12.62276 14.01068 18.85295 22.92663 20.56899 24.95091 
       9       10 
25.68709 18.39930