如何解决创建线性或非线性模型的分组摘要以连接到表并预测值
我有一个包含三列的表格:x 和 y,以及 id。我想为每个 id 创建一个线性模型。
id x y
1 a 1 2
2 b 5 10
3 a 8 16
4 b 1 2
5 a 6 12
6 c 9 18
7 a 2 4
8 a 9 18
9 b 1 2
10 b 6 12
11 b 10 20
12 c 12 24
13 c 2 4
14 c 4 8
15 c 5 10
我可以使用 split/apply 或使用 nlme 的 lmList
函数来做到这一点。我究竟如何创建一个带有 id 的汇总表,并将其各自的线性模型存储在一个小的汇总表中?
另外,我如何将汇总表连接回上述数据框(或另一个带有 ID 列和 x 列的数据框)?那么,是否也可以使用连接的线性模型并使用给定行中的相应 x 值预测结果
# Representation of what it would look like to join and predict the linear model
id x lm
1 a 1 <first lm here>
2 b 5 <second lm here>
是否可以使用上面的示例,使用给定 x 值的相应 lm 预测 y?这是否也可以扩展到其他模型,例如 knn3
和 loess
?
解决方法
尝试使用这种方法。只要您知道 id 的顺序,您就可以在 tibble 中定义它们,并将它们各自的线性模型存储在列表列中。
进一步解释:定义 map
的 summarydata$lm
命令根据 df1
的值将 id
拆分为三个独立的数据帧,然后为这些数据帧中的每一个拟合线性模型。然后将生成的模型对象存储在 summarydata$lm
中。
library(tidyverse)
# Reproducing your data
df1 <- tibble(
id = c("a","b","a","c","c"),x = c(1,5,8,1,6,9,2,10,12,4,5),y = c(2,20,26,18,24,10)
)
summarydata <- tibble(
id = c("a",7),lm = map(group_split(df1,id),~ lm(y ~ x,data = .))
)
然后,为了从每个线性模型中获得预测,我们可以在 mutate 中使用另一个 map 命令。这从 x
获取每个线性模型和 summarydata
的每个值,并使用 predict
计算 y 的预测值。
summarydata %>%
mutate(
prediction = map2_dbl(lm,x,~ predict(.x,newdata = tibble(x = .y)))
)
输出:
# A tibble: 3 x 4
id x lm prediction
<chr> <dbl> <list> <dbl>
1 a 1 <lm> 1.69
2 b 5 <lm> 12.0
3 c 7 <lm> 14
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。