【问题标题】:Multiple linear regression models for a nested dataframe/tibble嵌套数据框/小标题的多元线性回归模型
【发布时间】:2020-06-19 03:09:42
【问题描述】:

我正在尝试在嵌套数据框上运行多个线性回归。 我有这个数据样本:


            data.frame(Subcat,Date, COMM1, COMM2,UOM, AUC_TYPE, WINNING_PRICE
                        #--|----------|-----|-----|----|---------|-------|
                        1, 2017-03-07, 40750,41400,"MT","English",35000
                        1, 2017-03-15, 40750,40000,"MT","English",35600

                        2, 2017-10-16, 41000,40500,"METER","Yankee",56440
                        2, 2017-11-06, 41010,40510,"METER","Yankee",52000
                        2, 2019-01-26, 50010,50510,"METER","English",50000

                        3, 2017-03-07, 40750,41400,"MT","English",56900
                        3, 2018-05-26, 50010,50510,"MT","English",47000
                        3, 2019-01-21, 40750,40200,"MT","English",56000
                        3, 2019-01-21, 40750,40200,"MT","English",55900

                        4, 2017-11-08, 37500,39000,"LTR","Dynamic Sealbid",67000
                        4, 2017-11-08, 37500,39000,"LTR","Dynamic Sealbid",65900)

Factors/Character 变量已转换为 dummy,然后在子类别的基础上进行嵌套。

                    df2= df[,-2] %>% group_by(Subcat)%>%  nest()

输出是一个带有子目录和数据列的嵌套数据框。 我正在尝试使用以下代码运行回归模型来预测每个子类别的获胜价格:

   df2= df[,-2] %>%  group_by(Subcat)%>%  nest() %>%  
      mutate(fit=map(data, ~ lm(WINNING_PRICE~.,data = .)),
         results=map(fit,augment)) %>%
  unnest()

显示错误输出错误:输入必须是向量列表 另外:警告信息: cols 现在是必需的。 请使用cols = c(data, fit, results)。此外,数据框 df2 未显示在控制台中。

我已经提到了这个查询'Running multiple simple linear regressions from a nested dataframe/tibble'

提前致谢!

【问题讨论】:

    标签: r tidyverse purrr tibble


    【解决方案1】:

    我认为这应该可行:

    model_fn <- function(df1){ 
      lm(WINNING_PRICE ~ AUC_TYPE, data = df1)
    }
    
    fitted_bestel <- df2 %>%
       mutate(fit = map(data, model_fn))
    

    错误来自您使用的两个点(一个代替所有协变量,一个代替数据)。

    【讨论】:

      【解决方案2】:

      如果您想为 WINNING_Price ~ Subcat 建模,我认为我们不必嵌套(第一个示例)。例如,如果需要在“数据”列中嵌套和拟合模型,则两个模型元素都应位于嵌套数据框 WINNING_PRICE ~ COMM1 中。以下是每个场景的两个示例: unnest() 错误还来自更改以使用 'cols = ' 参数指定要取消嵌套的列。

      library(tidyverse)
      df <- tribble(~Subcat, ~Date, ~COMM1, ~COMM2, ~UOM, ~AUC_TYPE, ~WINNING_PRICE,
                      #--|----------|-----|-----|----|---------|-------|
                      1, 2017-03-07, 40750,41400,"MT","English",35000,
                      1, 2017-03-15, 40750,40000,"MT","English",35600,
      
                      2, 2017-10-16, 41000,40500,"METER","Yankee",56440,
                      2, 2017-11-06, 41010,40510,"METER","Yankee",52000,
                      2, 2019-01-26, 50010,50510,"METER","English",50000,
      
                      3, 2017-03-07, 40750,41400,"MT","English",56900,
                      3, 2018-05-26, 50010,50510,"MT","English",47000,
                      3, 2019-01-21, 40750,40200,"MT","English",56000,
                      3, 2019-01-21, 40750,40200,"MT","English",55900,
      
                      4, 2017-11-08, 37500,39000,"LTR","Dynamic Sealbid",67000,
                      4, 2017-11-08, 37500,39000,"LTR","Dynamic Sealbid",65900)
      
      fit <- lm(WINNING_PRICE ~ Subcat, data = df)
      
      plot(df$Subcat, y = df$WINNING_PRICE)
      abline(fit)
      
      #to fit many model to data with 'data' next column  
      df2= df[,-2] %>% group_by(Subcat)%>%  nest()
      
      df3 <- df2 %>% 
        mutate(fit = map(data, ~lm(WINNING_PRICE~COMM1, data = .)),
               results = map(fit, broom::augment))
      #need to specify cols to unnest (this was changed recentlyish)
      df4 <- df3 %>% unnest(cols = data)
      

      【讨论】:

      • 那么,在这种情况下,使用以下代码可以帮助包含所有其他变量吗?如果我错了,请纠正我。 df3 % mutate(fit = map(data, ~lm(WINNING_PRICE~., data = .)), results = map(fit, broom::augment)) %>% unnest(cols = data)
      • 我用了另一种方式,df3=df2 %>% as_tibble %>% gather(key = "column", value = "value", c(3:37,39:44)) %> % # 首先设置长格式的数据 nest(WinningPrice, value) %>% # 现在嵌套依赖和独立的因素 mutate(model = map(data, ~lm(WinningPrice ~ value, data = .)))%>% # 使用 purrr 拟合模型 mutate(tidy_model = map(model, tidy)) %>% # 使用 broom 清理模型输出 select(-data, -model) %>% # 删除“不整洁”的部分 unnest()跨度>
      猜你喜欢
      • 2018-08-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-12-20
      • 2016-09-06
      • 2014-05-01
      • 2015-04-04
      • 1970-01-01
      相关资源
      最近更新 更多