代码之家  ›  专栏  ›  技术社区  ›  Balamurali N.R

从嵌套数据帧/TIBLE运行多重简单线性回归

  •  2
  • Balamurali N.R  · 技术社区  · 6 年前

    我试图基于嵌套数据框中的数据运行多个简单线性回归,并使用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)
    

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

    1 回复  |  直到 6 年前
        1
  •  2
  •   eipi10    6 年前

    你可以 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")