【发布时间】:2020-11-26 12:51:07
【问题描述】:
我想从单个数据框中的多个组的线性回归中预测值。 我发现以下博客文章几乎可以满足我的所有需求:https://www.r-bloggers.com/2016/09/running-a-model-on-separate-groups/
但是,我不能将它与 predict() 函数与 newdata 结合使用。 对于一组,我使用以下内容:
m <- lm(y ~ x, df)
new_df <- data.frame(x=c(5))
predict(m, new_df)
这给了我在 x=5 时 y 的预测值。
当我的 df 中有多个组时,我该怎么做?这是我尝试过的:
df %>%
nest(-group) %>%
mutate(fit = map(data, ~ lm(.$y ~ .$x)),
results = map(fit, predict)) %>%
unnest(results)
当我尝试使用 results = map(fit, predict(new_df)) 时,我只得到一个错误。有没有办法可以将我的 x 值(在本例中为 5)传递到上面的代码中?
理想情况下,我会得到一个新的 data.frame,其中包含两列、组和预测的 y 值。
这是一个示例 data.frame:
group x y
g1 1 2
g1 1.5 3
g1 2 4
g1 2.3 4.4
g1 3 6
g1 3.4 6.2
g1 4.11 7
g1 4.8 7.9
g1 5 8
g1 5.3 8.2
g2 2 5
g2 2.3 4
g2 4 2.2
g2 4.4 1.9
g2 7 0.3
编辑:
使用ggplot2绘制样本数据,得到如下图:
ggplot(df, aes(x,y,colour=group)) +
geom_point() +
stat_smooth(method="lm", se=FALSE)
使用下面的代码,我得到了预测的 y 值:
predict(lm(y ~ x, df[df$group =="g1", ]), new_df)
1
8.180285
predict(lm(y ~ x, df[df$group =="g2", ]), new_df)
1
1.732136
我想生成一个新的数据框,它应该看起来像这样并包含 x=5 处的预测 y 值:
group y_predict
g1 8.180285
g2 1.732136
【问题讨论】:
-
正如@Marcos Perez 下面所说,这是将数据框拆分为列表并在列表元素中应用 lm 函数的完美案例。
标签: r dplyr linear-regression predict