R:如何将结果合并为唯一的输出?

标签 r merge output regression lapply

我需要将回归结果合并到一个唯一的表中。给你一个想法:

这是我的数据集的示例

> head(final, 20)
   nquest nord sex anasc    ireg eta staciv studio  tpens
1     173    1   1  1948      18  64      3      5  2500
2     375    1   2  1925      16  87      4      2  1340
3     629    1   1  1939       5  73      4      3  1188
4     632    1   1  1950       5  62      1      3  1320
5     633    1   2  1934       5  78      4      2  350
6    1238    1   1  1937      15  75      4      3  1000
7    7886    1   1  1950       9  62      1      5  2000
8   11972    2   1  1938      17  74      1      2  750
9   20174    1   1  1941       8  71      1      5  2000
10  20174    2   2  1942       8  70      1      3  132
11  20223    1   2  1938       3  74      1      5  800
12  20223    2   1  1939       3  73      1      4  980
13  20711    2   1  1944       4  68      1      2  1900
14  20837    1   1  1931       8  81      1      4  1600
15  20837    2   2  1928       8  84      1      2  430
16  21461    1   2  1918       5  94      4      2  600
17  22173    1   1  1938      15  74      1      2  1200
18  22208    1   2  1935       5  77      4      2  700
19  22222    1   1  1927       5  85      4      2  1100
20  22276    1   1  1949       8  63      2      5  1170

我正在运行这些回归

lm(log(tpens) ~ sex, data = final)
lm(log(tpens) ~ sex + eta, data = final)
lm(log(tpens) ~ sex + eta + ireg, data = final)
lm(log(tpens) ~ sex + eta + ireg + studio, data = final)

有没有办法让输出彼此相邻?

这是我正在寻找的示例(如果它可以包含来自回归的更多信息,那就更好了)

             Estimate                     
(Intercept)  7.47635***   8.5236948***     8.5814025***   7.4580630***
sex         -0.42052***  -0.4170048***    -0.4229487***  -0.4153185***      
eta                      -0.0146341***    -0.0145885***  -0.0068207***
ireg                                      -0.0057238***  -0.0035033***
studio                                                    0.1624156***
....                                                      .....

我从过去的问题中看到可以使用 mapplydo.call ,但我无法以正确的方式设置它们......谁能帮我?还有其他方法吗?

更新

感谢@akrun

# A tibble: 14 x 6
   fmla                                   term        estimate std.error statistic   p.value
   <chr>                                  <chr>          <dbl>     <dbl>     <dbl>     <dbl>
 1 log(tpens) ~ sex                       (Intercept)  7.48     0.0221      339.   0        
 2 log(tpens) ~ sex                       sex         -0.421    0.0148      -28.3  5.53e-162
 3 log(tpens) ~ sex + eta                 (Intercept)  8.52     0.0648      132.   0        
 4 log(tpens) ~ sex + eta                 sex         -0.417    0.0144      -29.0  2.92e-169
 5 log(tpens) ~ sex + eta                 eta         -0.0146   0.000854    -17.1  1.12e- 63
 6 log(tpens) ~ sex + eta + ireg          (Intercept)  8.58     0.0658      130.   0        
 7 log(tpens) ~ sex + eta + ireg          sex         -0.423    0.0144      -29.4  4.43e-173
 8 log(tpens) ~ sex + eta + ireg          eta         -0.0146   0.000853    -17.1  1.44e- 63
 9 log(tpens) ~ sex + eta + ireg          ireg        -0.00572  0.00125      -4.57 5.06e-  6
10 log(tpens) ~ sex + eta + ireg + studio (Intercept)  7.46     0.0602      124.   0        
11 log(tpens) ~ sex + eta + ireg + studio sex         -0.415    0.0119      -34.8  9.36e-234
12 log(tpens) ~ sex + eta + ireg + studio eta         -0.00682  0.000729     -9.36 1.24e- 20
13 log(tpens) ~ sex + eta + ireg + studio ireg        -0.00350  0.00104      -3.37 7.68e-  4
14 log(tpens) ~ sex + eta + ireg + studio studio       0.162    0.00367      44.2  0     

更新2

# A tibble: 5 x 5
  term        `log(tpens) ~ sex` `log(tpens) ~ sex + eta` `log(tpens) ~ sex + eta + ireg` log(tpens) ~ sex + eta + ireg ~1
  <chr>                    <dbl>                    <dbl>                           <dbl>                            <dbl>
1 (Intercept)              7.48                    8.52                           8.58                             7.46   
2 sex                     -0.421                  -0.417                         -0.423                           -0.415  
3 eta                     NA                      -0.0146                        -0.0146                          -0.00682
4 ireg                    NA                      NA                             -0.00572                         -0.00350
5 studio                  NA                      NA                             NA                                0.162  
# ... with abbreviated variable name 1: `log(tpens) ~ sex + eta + ireg + studio`

最佳答案

我们可以循环公式,创建线性模型,提取所需的信息(整洁)并返回单个数据

library(dplyr)
library(purrr)
library(broom)
out <- lst(log(tpens) ~ sex, log(tpens) ~ sex + eta,
  log(tpens) ~ sex + eta + ireg,
  log(tpens) ~ sex + eta + ireg + studio) %>% 
  map(lm, data = final) %>% 
  map(tidy) %>%
  list_rbind(names_to = 'fmla')

如果我们想要一个宽格式的“估计”

library(tidyr)
out %>%
  select(fmla, term, estimate) %>% 
  pivot_wider(names_from = fmla, values_from = estimate)

关于R:如何将结果合并为唯一的输出?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/75618679/

相关文章:

r - 为什么这一单向方差分析没有 F 统计量和 p 值?

python - 如何删除第一级索引,然后将剩余的索引值与 pd DataFrame 的自定义逻辑合并?

sql-server - 将多个sql数据表加载到单个数据表中,所有表共享一列

Gradle:任务的标准输出同时输出到文件和终端

r - 如何让ggplot根据特定类别对齐条形图

r - 查找向量中的第一组连续整数

r - 轴不绘制日期标签

sql - Redshift - 合并两列

c++ - vector 中字符串指针的覆盖输出运算符

c - 为什么我没有收到想要的输出 2.50000...?