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

  • 本文关键字:lm 模型 数据集 有没有 r lm
  • 更新时间 :
  • 英文 :


我使用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值。我想知道是否有比手动读取所有参数并用它们定义函数更好的方法。我有很多不同的线性模型,有很多参数,这似乎有点乏味。有没有一个内置函数可以为我做到这一点?

谢谢!

是的,您可以使用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 

试试这个:

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()可以使用该模型。只需注意新数据中变量的名称即可。在这里,我包含了一个伪数据头。

最新更新