首页 > 解决方案 > 使用在 R 中设置为均值的控制变量获得拟合值

问题描述

我在 R 中有一个多元lm模型,我想为它获取因子变量的每个类别的预测值/拟合值,并将控制变量设置为它们的平均值。

例如,使用 mtcars 数据集:

data(mtcars)
fit <- lm(mpg ~ gear + am + drat)

我想知道mpg每个值的预测值是多少gear,同时持有amdrat以他们的方式。

我知道我会为此使用 predict ,但在 predict 中似乎没有选择以保持变量的方式。

标签: rpredictionlm

解决方案


data(mtcars)
fit <- lm(mpg ~ gear + am + drat, data=mtcars)

我们只需创建一个具有所需属性的新数据集(我在dplyr这里使用函数,但任何解决方案都可以,只要它生成一个具有正确命名的正确类型变量的 data.frame):

library(dplyr)
fixed_am_and_drat <- data.frame(mtcars) %>% 
  mutate(am = mean(am),
         drat = mean(drat)) %>% 
  select(gear, am, drat)

并传递这个新数据集以使用newdata参数进行预测:

fixed_am_and_drat$predicted <- predict(fit, newdata = fixed_am_and_drat)

fixed_am_and_drat

回报:

     gear      am     drat predicted
  1     4 0.40625 3.596563  19.59310
  2     4 0.40625 3.596563  19.59310
  3     4 0.40625 3.596563  19.59310
  4     3 0.40625 3.596563  21.18519
  5     3 0.40625 3.596563  21.18519
  6     3 0.40625 3.596563  21.18519
  7     3 0.40625 3.596563  21.18519
  8     4 0.40625 3.596563  19.59310
  9     4 0.40625 3.596563  19.59310
  10    4 0.40625 3.596563  19.59310
  11    4 0.40625 3.596563  19.59310
  12    3 0.40625 3.596563  21.18519
  13    3 0.40625 3.596563  21.18519
  14    3 0.40625 3.596563  21.18519
  15    3 0.40625 3.596563  21.18519
  16    3 0.40625 3.596563  21.18519
  17    3 0.40625 3.596563  21.18519
  18    4 0.40625 3.596563  19.59310
  19    4 0.40625 3.596563  19.59310
  20    4 0.40625 3.596563  19.59310
  21    3 0.40625 3.596563  21.18519
  22    3 0.40625 3.596563  21.18519
  23    3 0.40625 3.596563  21.18519
  24    3 0.40625 3.596563  21.18519
  25    3 0.40625 3.596563  21.18519
  26    4 0.40625 3.596563  19.59310
  27    5 0.40625 3.596563  18.00101
  28    5 0.40625 3.596563  18.00101
  29    5 0.40625 3.596563  18.00101
  30    5 0.40625 3.596563  18.00101
  31    5 0.40625 3.596563  18.00101
  32    4 0.40625 3.596563  19.59310

推荐阅读