运行多个模型并在r

时间:2017-08-04 19:45:50

标签: r dplyr tidyverse

我想运行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. 为什么我收到错误消息以及如何在数据帧中保存anova结果?
  2. 如果lm或anova在某些子集上不起作用,如何使整个过程工作?像try..catch ..
  3. 之类的东西

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

1 个答案:

答案 0 :(得分:2)

这是this.value = null函数与tidyr::nest()purrr结合使用的非常好的应用程序。你做的是: - 对数据框进行分组 - 使用broom应用模型 - 使用mutate(mod = map(data, model)汇总模型 - 提取相关统计数据。

有关此内容的更多信息,Hadley就此主题发表了精彩演讲:https://www.youtube.com/watch?v=rz3_FDVt9eg

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

broom::tidy()