【问题标题】:Regression estimates by group with p.value stars具有 p.value 星的组的回归估计
【发布时间】:2021-05-23 19:51:48
【问题描述】:

我使用以下命令按组运行多个 lm 回归

by_country <- group_by(df, country)

print(do(by_country,
   tidy(lm(y ~ x*z, data=.))), n=500)

我添加打印语句只是为了查看完整的表格。 现在我想将输出更改为显示星号以显示重要性级别。

如果我将代码更改为

df %>%
  do(by_country,
     tidy(lm(y ~ x*z, data=.))) %>%
  mutate(signif = stars.pval(p.value))

我得到错误: 错误:只能提供一个未命名的参数,而不是 2 个。

如何将 lm 和 mutate 组合在一起?还是有其他更方便的方法?

我正在寻找以下/类似的输出:

|Country|term|estimate|std.error|stars
|:---- |:------:| -----:|-----:|-----:|
| UK  | x:z    | ... | ... | ***|

【问题讨论】:

    标签: r dplyr regression


    【解决方案1】:

    do 已被取代。此代码似乎适用于默认的 mtcars 数据。

    library(dplyr)
    
    df <- mtcars
    
    df %>%
      group_by(cyl) %>%
      summarise(model = list(broom::tidy(lm(disp ~ mpg*am, data = cur_data())))) %>%
      tidyr::unnest(model) %>%
      mutate(signif = gtools::stars.pval(p.value))
    
    #     cyl term        estimate std.error statistic  p.value signif
    #   <dbl> <chr>          <dbl>     <dbl>     <dbl>    <dbl> <chr> 
    # 1     4 (Intercept)   -69.4     129.     -0.537  0.608    " "   
    # 2     4 mpg             8.96      5.64    1.59   0.156    " "   
    # 3     4 am            270.      132.      2.04   0.0806   "."   
    # 4     4 mpg:am        -12.8       5.73   -2.23   0.0609   "."   
    # 5     6 (Intercept)  -147.      225.     -0.653  0.561    " "   
    # 6     6 mpg            18.4      11.7     1.56   0.216    " "   
    # 7     6 am             64.7     682.      0.0949 0.930    " "   
    # 8     6 mpg:am         -6.84     33.4    -0.205  0.851    " "   
    # 9     8 (Intercept)   566.      106.      5.36   0.000320 "***" 
    #10     8 mpg           -13.9       6.91   -2.00   0.0729   "."   
    #11     8 am          -1203.     1736.     -0.693  0.504    " "   
    #12     8 mpg:am         76.4     113.      0.678  0.513    " "   
    

    【讨论】:

      【解决方案2】:

      示例数据:

      set.seed(111)
      df = data.frame(country = sample(c("A","B"),100,replace=TRUE),
      x=runif(100),y=runif(100),z=runif(100))
      

      你不需要传递data.frame:

      by_country <- group_by(df, country)
      
      do(by_country,
         tidy(lm(y ~ x*z, data=.))) %>%
        mutate(signif = stars.pval(p.value))
      

      或者:

      df %>%
      group_by(country) %>%
      do(tidy(lm(y ~ x*z, data=.))) %>%
      mutate(signif = stars.pval(p.value))
      

      两者都给出:

      # A tibble: 8 x 7
      # Groups:   country [2]
        country term        estimate std.error statistic    p.value signif
        <fct>   <chr>          <dbl>     <dbl>     <dbl>      <dbl> <chr> 
      1 A       (Intercept)   0.808      0.154     5.25  0.00000324 "***" 
      2 A       x            -0.552      0.307    -1.80  0.0780     "."   
      3 A       z            -0.491      0.326    -1.50  0.139      " "   
      4 A       x:z           0.853      0.552     1.55  0.129      " "   
      5 B       (Intercept)   0.0658     0.194     0.339 0.736      " "   
      6 B       x             0.503      0.300     1.68  0.101      " "   
      7 B       z             0.866      0.400     2.17  0.0360     "*"   
      8 B       x:z          -0.857      0.609    -1.41  0.167      " "   
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2020-03-13
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-08-10
        • 1970-01-01
        相关资源
        最近更新 更多