有没有办法在不同的数据集上使用 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
我已经使用 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