【问题标题】:Linear Regression fit (augment) on a different dataset不同数据集上的线性回归拟合(增强)
【发布时间】:2021-04-07 11:38:03
【问题描述】:

我只是尝试在使用 dplyr 和增强函数构建回归模型的不同数据集上计算预测(拟合值)。但是我不断收到错误。即使不使用 dplyr,augment 函数似乎也只接受构建模型的数据集。有什么解决方案可以解决吗?以下是我的尝试之一。谢谢。

data1 <- head(mtcars,20)

model <- mtcars %>%
  group_by(cyl) %>%
  do(fit = lm(wt ~ mpg, .),
     data = (.)) %>%
  augment(fit, data1)

【问题讨论】:

    标签: r dplyr regression


    【解决方案1】:

    mutate 中使用augment,在augment 中使用map 一次传递一个模型。

    library(broom)
    library(dplyr)
    library(purrr)
    
    mtcars %>%
      group_by(cyl) %>%
      do(fit = lm(wt ~ mpg, .),
         data = (.)) %>%
      ungroup() %>%
      mutate(col   = map(fit, augment, newdata = data1))
    

    此外,由于 do 已被取代,您可以在 summarise 中拟合模型。

    mtcars %>%
      group_by(cyl) %>%
      summarise(fit = list(lm(wt ~ mpg)), 
                data = list(cur_data())) %>%
      mutate(col   = map(fit, augment, newdata = data1))
    
    #    cyl fit    data               col               
    #  <dbl> <list> <list>             <list>            
    #1     4 <lm>   <tibble [11 × 11]> <tibble [20 × 14]>
    #2     6 <lm>   <tibble [7 × 11]>  <tibble [20 × 14]>
    #3     8 <lm>   <tibble [14 × 11]> <tibble [20 × 14]>
    

    【讨论】:

    • 谢谢!这几乎就是我想要做的。但是我怎样才能取消嵌套 col?这样做时我不断收到错误消息。
    • 那是因为您的数据中已经有cyl 列,它也存在于col 中。您可以从colunnest 它们中select 您需要的列。将最后的mutate 行更改为mutate(col = map(fit, augment, newdata = data1), col = map(col, ~.x %&gt;% select(.fitted, .resid))) %&gt;% unnest(col)
    • 我相信有些记录会被多次评估。原始数据只有 11 条记录,其中 cyl ==4。结果表有超过 11 条记录,其中 cyl==4
    • 是的,那是因为我们在 augment 中使用了 data1,它有 20 条记录,因此每个 cyl 值有 20 条记录。
    • 这是有道理的。谢谢你。您知道将数据 1 分组在一起的简单方法吗?换句话说,有没有办法将 group_by、summary 函数应用于 data1 评估?
    猜你喜欢
    • 2020-10-22
    • 1970-01-01
    • 1970-01-01
    • 2017-08-20
    • 2018-05-08
    • 1970-01-01
    • 2018-03-17
    • 2020-07-21
    • 2018-11-18
    相关资源
    最近更新 更多