【问题标题】:Running multiple simple linear regressions from a nested dataframe/tibble从嵌套的数据框/小标题中运行多个简单的线性回归
【发布时间】:2018-08-13 17:43:16
【问题描述】:

我正在尝试根据嵌套数据框中的数据运行多个简单的线性回归,并使用 tidy() 将回归拟合系数存储在数据框中。我的代码块如下

library(tidyverse)     
library(broom)
library(reshape2)
library(dplyr)

Factors <- as.factor(c("A","B","C","D"))
set.seed(5)
DF <- data.frame(Factors, X = rnorm(4), Y = rnorm(4), Z= rnorm(4))
MDF <- melt(DF, id.vars=c("Factors","X"))
DFF <- MDF %>% nest(-Factors)

如果它是一个包含许多列的数据框,我可以使用多个简单的线性回归

MDF %>% group_by(variable) %>% do(tidy(lm(value ~ X, data =.)))

或者如果它是一个嵌套数据框并且我必须运行一个简单的线性回归,我可以尝试

MDF %>% nest(-Factors) 
%>% mutate(fit = map(data, ~lm(Y ~ X, data = .)), results = map(fit,tidy))
%>% unnest(results)

但我需要做的是结合上述两种情况。我需要从嵌套数据框中的数据运行多个简单的线性回归。

【问题讨论】:

    标签: r dplyr regression reshape2


    【解决方案1】:

    您可以通过两个分组变量nest

    MDF %>% nest(-Factors, -variable) %>% 
      mutate(fit = map(data, ~lm(value ~ X, data = .)), 
             results = map(fit,tidy)) %>% 
      unnest(results)
    

    您也可以使用split 并避免嵌套:

    split(MDF, list(MDF$Factors, MDF$variable)) %>% 
      map_df(~ tidy(lm(value ~ X, data=.x)) %>% 
               mutate(Factors=.x$Factors[1],
                      variable=.x$variable[1]))
    

    或者,如果您不介意单列中的组标识符:

    split(MDF, list(MDF$Factors, MDF$variable), sep="_") %>% 
      map_df(~ tidy(lm(value ~ X, data=.x)), .id="Factors_variable")
    

    【讨论】:

    • 谢谢@eipi10,它成功了。 Dint 认为答案就这么简单。
    猜你喜欢
    • 2020-06-19
    • 1970-01-01
    • 1970-01-01
    • 2016-09-20
    • 2020-06-20
    • 2018-06-06
    • 2022-01-12
    • 1970-01-01
    • 2013-03-15
    相关资源
    最近更新 更多