gpt4 book ai didi

运行多个模型并将模型比较结果保存在 r 中的数据框中

转载 作者:行者123 更新时间:2023-12-05 01:44:34 28 4
gpt4 key购买 nike

我想运行 lm 模型并保存模型比较结果并提取 p 值。我想将所有信息保存在数据框中。以钻石数据集为例:

    diamonds %>% 
group_by(cut) %>%
do(model1 = lm(price~carat, data=.),
model2 = lm(price~carat+depth, data=.)) %>%
mutate(anova = anova(model2,model1)) %>%
mutate(pval= anova$'Pr(>F'[2])

我收到以下错误消息:

Error in mutate_impl(.data, dots) : 
Column `anova` must be length 1 (the group size), not 6

我的问题是:

  1. 为什么我收到错误消息以及如何在数据框中保存方差分析结果?
  2. 如果 lm 或 anova 对某些子集不起作用,如何使整个过程起作用?类似 try..catch..

我的真实数据比这个更复杂。只需使用菱形和线性模型来说明这个想法。非常感谢。

最佳答案

这是 tidyr::nest() 函数与 purrrbroom 结合的非常好的应用。你所做的是:- 分组数据框- 使用 mutate(mod = map(data, model) 应用模型- 使用 broom::tidy() 总结模型- 提取相关统计数据。

有关这方面的更多信息,请参阅 Hadley 关于该主题的精彩演讲:https://www.youtube.com/watch?v=rz3_FDVt9eg

在你的情况下,我认为你可以这样做:

library(tidyverse)
library(broom)
diamonds %>%
group_by(cut) %>%
nest() %>%
mutate(
model1 = map(data, ~lm(price~carat, data=.)),
model2 = map(data, ~lm(price~carat+depth, data=.))
) %>%
mutate(anova = map2(model1, model2, ~anova(.x,.y))) %>%
mutate(tidy_anova = map(anova, broom::tidy)) %>%
mutate(p_val = map_dbl(tidy_anova, ~.$p.value[2])) %>%
select(p_val)

关于运行多个模型并将模型比较结果保存在 r 中的数据框中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45514426/

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