如何将预测函数用于存储在 tibbles 中的线性模型作为列
How to use the predict function for linear models stored in tibbles as columns
我有一些类似的代码:
library(tidyverse)
library(broom)
df <- tribble(~group, ~set, ~x, ~y,
0, "training", 1, 2,
0, "training", 2, 4,
0, "training", 4, 9,
0, "training", 5, 9,
0, "training", 15, 29,
0, "training", 20, 42,
0, "training", 21, 42,
0, "training", 25, 49,
0, "test", 10, NA,
)
df %>%
filter(set == "training") %>%
group_by(group) %>%
do(pm = lm(y ~ x, data = .)) %>%
left_join(df, ., by = "group")
所以我得到这样的结果:
group set x y model
<dbl> <chr> <dbl> <dbl> <list>
1 0. training 1. 2. <S3: lm>
2 0. training 2. 4. <S3: lm>
3 0. training 4. 9. <S3: lm>
4 0. training 5. 9. <S3: lm>
5 0. training 15. 29. <S3: lm>
6 0. training 20. 42. <S3: lm>
7 0. training 21. 42. <S3: lm>
8 0. training 25. 49. <S3: lm>
9 0. test 10. NA <S3: lm>
如何使用第 9 行的线性模型,其中 set 等于 "test" 从 x?
预先感谢您的帮助
我们可以 replace
'y' 中的 NA
元素与 predict
输出基于 lm
模型在同一行分组后 'group'
library(dplyr)
df %>%
filter(set == "training") %>%
group_by(group) %>%
do(pm = lm(y ~ x, data = .)) %>%
left_join(df, ., by = "group") %>%
group_by(group) %>%
mutate(y = replace(y, is.na(y), predict(pm[[1]],
newdata = data.frame(x = x[set == "test"]))))
# A tibble: 9 x 5
# Groups: group [1]
# group set x y pm
# <dbl> <chr> <dbl> <dbl> <list>
#1 0 training 1 2 <lm>
#2 0 training 2 4 <lm>
#3 0 training 4 9 <lm>
#4 0 training 5 9 <lm>
#5 0 training 15 29 <lm>
#6 0 training 20 42 <lm>
#7 0 training 21 42 <lm>
#8 0 training 25 49 <lm>
#9 0 test 10 20.0 <lm>
我有一些类似的代码:
library(tidyverse)
library(broom)
df <- tribble(~group, ~set, ~x, ~y,
0, "training", 1, 2,
0, "training", 2, 4,
0, "training", 4, 9,
0, "training", 5, 9,
0, "training", 15, 29,
0, "training", 20, 42,
0, "training", 21, 42,
0, "training", 25, 49,
0, "test", 10, NA,
)
df %>%
filter(set == "training") %>%
group_by(group) %>%
do(pm = lm(y ~ x, data = .)) %>%
left_join(df, ., by = "group")
所以我得到这样的结果:
group set x y model
<dbl> <chr> <dbl> <dbl> <list>
1 0. training 1. 2. <S3: lm>
2 0. training 2. 4. <S3: lm>
3 0. training 4. 9. <S3: lm>
4 0. training 5. 9. <S3: lm>
5 0. training 15. 29. <S3: lm>
6 0. training 20. 42. <S3: lm>
7 0. training 21. 42. <S3: lm>
8 0. training 25. 49. <S3: lm>
9 0. test 10. NA <S3: lm>
如何使用第 9 行的线性模型,其中 set 等于 "test" 从 x? 预先感谢您的帮助
我们可以 replace
'y' 中的 NA
元素与 predict
输出基于 lm
模型在同一行分组后 'group'
library(dplyr)
df %>%
filter(set == "training") %>%
group_by(group) %>%
do(pm = lm(y ~ x, data = .)) %>%
left_join(df, ., by = "group") %>%
group_by(group) %>%
mutate(y = replace(y, is.na(y), predict(pm[[1]],
newdata = data.frame(x = x[set == "test"]))))
# A tibble: 9 x 5
# Groups: group [1]
# group set x y pm
# <dbl> <chr> <dbl> <dbl> <list>
#1 0 training 1 2 <lm>
#2 0 training 2 4 <lm>
#3 0 training 4 9 <lm>
#4 0 training 5 9 <lm>
#5 0 training 15 29 <lm>
#6 0 training 20 42 <lm>
#7 0 training 21 42 <lm>
#8 0 training 25 49 <lm>
#9 0 test 10 20.0 <lm>