gpt4 book ai didi

r - 预测多个独立组的线性回归

转载 作者:行者123 更新时间:2023-12-04 13:11:15 25 4
gpt4 key购买 nike

我想预测单个数据框中多个组的线性回归值。我发现以下博客文章几乎可以满足我的所有需求:https://www.r-bloggers.com/2016/09/running-a-model-on-separate-groups/

但是,我无法将其与带有新数据的 predict() 函数结合使用。对于一组,我使用以下内容:

m <- lm(y ~ x, df)
new_df <- data.frame(x=c(5))
predict(m, new_df)

这给出了 y 在 x=5 时的预测值。

当我的 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)传递到上面的代码中吗?

理想情况下,我会得到一个包含两列、组和预测 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)

Plot

使用以下代码,我得到了预测的 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

最佳答案

使用注释中可重复显示的输入,因为我们只需要拟合值,所以我们不需要使用 nest 但可以只使用 mutate:

library(dplyr)

df %>%
group_by(group) %>%
mutate(pred = fitted(lm(y ~ x))) %>%
ungroup %>%
select(group, pred)

给予:

# A tibble: 15 x 2
group pred
<chr> <dbl>
1 g1 2.47
2 g1 3.19
3 g1 3.90
4 g1 4.33
5 g1 5.33
6 g1 5.90
7 g1 6.91
8 g1 7.89
9 g1 8.18
10 g1 8.61
11 g2 4.41
12 g2 4.15
13 g2 2.63
14 g2 2.27
15 g2 -0.0563

也可以这样做:

library(dplyr)

df %>%
mutate(pred = fitted(lm(y ~ x*group + 0, df))) %>%
select(group, pred)

或者像这样只使用 base R:

transform(df, pred = fitted(lm(y ~ x*group + 0, df)))[c("group", "pred")]

或使用 nlme 中的 lmList(它随 R 一起提供,因此不必安装):

library(dplyr)
library(nlme)

df %>%
mutate(pred = fitted(lmList(y ~ x | group, df))) %>%
select(group, pred)

或者在没有 dplyr 的情况下使用 lmList:

library(nlme)

transform(df, pred = fitted(lmList(y ~ x | group, df)))[c("group", "pred")]

注意事项

Lines <- "
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"
df <- read.table(text = Lines, header = TRUE)

已添加

关于注释,此代码按组生成 x = 5 的预测:

df %>%
group_by(group) %>%
summarize(pred = predict(lm(y ~ x), list(x = 5)), .groups = "drop") %>%
select(group, pred)
## # A tibble: 2 x 2
## group pred
## <chr> <dbl>
## 1 g1 8.18
## 2 g2 1.73

关于r - 预测多个独立组的线性回归,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65022406/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com