代码之家  ›  专栏  ›  技术社区  ›  Homer Jay Simpson

如何将R中的线性回归结果匹配为与group_by-dplyr相同的输出?

  •  0
  • Homer Jay Simpson  · 技术社区  · 3 年前

    我有一个R中的数据集:

    vec = c(200,300,400,500,600,100)
    char1 = c("a","a","a","b","b","a")
    char2 = c("c","c","d","c","d","d")
    df2 = tibble(vec,char1,char2);df2
    
    # A tibble: 6 × 3
        vec char1 char2
      <dbl> <chr> <chr>
    1   200 a     c    
    2   300 a     c    
    3   400 a     d    
    4   500 b     c    
    5   600 b     d    
    6   100 a     d    
    

    如果我想计算每个char1变量的列向量的平均值,可以使用以下方法来完成:

    df2%>%group_by(char1)%>%
      summarise(mean(vec))
    lm(df2$vec~df2$char1-1)
    

    对于char2变量:

    df2%>%group_by(char2)%>%
      summarise(mean(vec))
    lm(df2$vec~df2$char2-1)
    

    结果分别与这两种情况的线性回归系数相匹配。

    但如果我想计算每个char1和char2,我在R中这样做:

    df2%>%group_by(char1,char2)%>%
      summarise(mean(vec))
    
    

    这两个变量的线性回归等价性是什么?

    有什么帮助吗?

    0 回复  |  直到 3 年前
        1
  •  4
  •   thelatemail    3 年前

    指定之间的交互 char1 char2 喜欢 char1:char2 以获得:

    lm(vec ~ char1:char2 + 0, data=df2)
    
    #Call:
    #lm(formula = vec ~ char1:char2 + 0, data = df2)
    #
    #Coefficients:
    #char1a:char2c  char1b:char2c  char1a:char2d  char1b:char2d  
    #          250            500            250            600  
    

    符合预期结果:

    df2 %>% 
      group_by(char1,char2) %>%
      summarise(mean(vec))
    
    ## A tibble: 4 × 3
    ## Groups:   char1 [2]
    #  char1 char2    mv
    #  <chr> <chr> <dbl>
    #1 a     c       250
    #2 a     d       250
    #3 b     c       500
    #4 b     d       600