【问题标题】:Extracting the coefficients of each model by using a series of map functions使用一系列映射函数提取每个模型的系数
【发布时间】:2023-03-05 03:28:01
【问题描述】:

我正在创建以下模型:

models <- mtcars %>%
  split(.$cyl) %>%
  map(function(df) lm(mpg ~ wt, data = df))

根据您从中获得的结果,我正在尝试使用一系列映射函数来提取系数。

结果应该如下所示:

       4          6        8
-5.647025 -2.780106 -2.192438

我正在努力解决这个问题。任何帮助表示赞赏。

【问题讨论】:

  • 如果以下答案之一解决了您的问题,我们鼓励您点击复选标记接受它...

标签: r statistics


【解决方案1】:

您可以使用map_dbl 和coef 函数来挑选“wt”系数:

coefs <- mtcars %>%
  split(.$cyl) %>%
  map(function(df) lm(mpg ~ wt, data = df)) %>%
  map_dbl(~coef(.)[["wt"]])

【讨论】:

    【解决方案2】:

    看起来像

    coefs <- (mtcars 
      %>% split(.$cyl) 
      %>% map(lm, formula = mpg~wt) 
      %>% map_dbl(~coef(.)[["wt"]])
    )
    

    应该做你想做的事吗?如果您想获取更多信息,以map_dfr(broom::tidy) 结尾而不是map_dbl 会有所帮助(您也可以使用.id= 参数,尽管当列表没有命名参数时这不太有用)。

    这与@henryn 的答案非常相似,尽管map 语法(使用命名的formula 参数意味着数据被隐式替换为next 参数,所以你不要必须使用匿名函数 function(df) lm(mpg ~ wt, data = df) 或(使用 R >= 4.1.0)\(df) lm(mpg ~ wt, data = df):我认为通常的做法是,~ lm(mpg ~ wt, data = .) 可能被波浪号弄乱了公式,但我不确定...

    【讨论】:

    • 支持 - 实际上我更喜欢 map(lm, formula = mpg~wt) 而不是我的答案,它更干净(我有点不假思索地接受了 OP 已经完成的操作并通过管道传输到 map_dbl)
    【解决方案3】:

    这行得通吗:

    mtcars %>% split(.$cyl) %>% map(function(x) {
                                               c = lm(mpg ~ wt, data = x)
                                               c$coefficients[2]
                                                 }) %>% unlist
         4.wt      6.wt      8.wt 
    -5.647025 -2.780106 -2.192438 
    

    【讨论】:

      【解决方案4】:

      1) 这可以在直接 dplyr 中完成:

      mtcars %>%
        group_by(cyl) %>%
        summarize(wt = coef(lm(mpg ~ wt))[[2]], .groups = "drop")
      

      给予:

      # A tibble: 3 x 2
          cyl    wt
        <dbl> <dbl>
      1     4 -5.65
      2     6 -2.78
      3     8 -2.19
      

      2) 这种变化也适用:

      mtcars %>%
        group_by(cyl) %>%
        summarize(wt = cov(mpg, wt) / var(wt), .groups = "drop")
      

      3) 还要考虑这一点——省略 [2] 以获得两个系数。

      library(nlme)
      coef(lmList(mpg ~ wt | cyl, mtcars))[2]
      

      给予:

               wt
      4 -5.647025
      6 -2.780106
      8 -2.192438
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-05-02
        • 2011-10-22
        • 1970-01-01
        相关资源
        最近更新 更多