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