根据 R 中几个线性回归的输出创建数据框

问题描述 投票:0回答:0

我正在运行 5 个简单线性回归,然后是 1 个包含所有 5 个预测变量的多元线性回归。

我可以生成一个数据框,其中包含 5 个简单回归模型的所有 beta,以及第二个数据框,其中包含来自多元回归模型的调整后的 beta。我想以最有效的方式组合这些数据帧。我希望最终产品看起来像这样:

Coefficient      (Simp) Est.   (Simp) Std. Error   (Mult)Adj. Est.  (Mult) Adj. Std. Error
FEV1              74.1         14.1                31.255            27.041.        
AGE               -3.10        1.33                -3.236            1.257
etc.

这里是变量。对于所有模型,MWT1Best 是结果变量:

str(copd2)
 $ AGE         : int  77 79 80 56 65 67 67 83 72 75 ...
 $ COPDSEVERITY: chr  "SEVERE" "MODERATE" "MODERATE" "VERY SEVERE" ...
 $ MWT1Best    : int  120 176 201 210 210 216 237 237 237 240 ...
 $ FEV1        : num  1.21 1.09 1.52 0.47 1.07 1.09 0.69 0.68 2.13 1.06 ...
 $ gender      : int  1 0 0 1 1 0 0 1 1 0 ...
 $ comorbid2   : int  1 1 1 1 1 1 1 1 1 1 ...

5 简单线性回归模型代码:

copd2$COPDSEVERITY <- recode(copd2$COPDSEVERITY, "MILD" = 0, "MODERATE" = 1, "SEVERE" = 2, "VERY SEVERE" = 3)

f.MWT <- melt(data.frame(x = copd2$MWT1Best,
                    FEV1=copd2$FEV1,
                    AGE=copd2$AGE,
                    Gender=copd2$gender
                    Severity=copd2$COPDSEVERITY,
                    Comorbid=copd2$comorbid2),
               id.vars = "x")

MWT.simp - mergedf.MWT %>% group_by(variable) %>% do(tidy(lm(x ~ value, data = .)))

简单线性回归输出:

  variable term        estimate std.error statistic   p.value
  <fct>    <chr>          <dbl>     <dbl>     <dbl>     <dbl>
1 FEV1     (Intercept)   280.       24.6      11.4   1.15e-19
2 FEV1     value          74.1      14.1       5.26  8.47e- 7
3 AGE      (Intercept)   616.       93.4       6.60  2.14e- 9
4 AGE      value          -3.10      1.33     -2.34  2.13e- 2
5 Gender   (Intercept)   380.       17.7      21.5   7.77e-39
6 Gender   value          30.5      22.1       1.38  1.70e- 1
7 Severity (Intercept)   459.       16.4      28.0   1.60e-48
8 Severity value         -50.1      11.0      -4.55  1.54e- 5
9 Comorbid (Intercept)   423.       15.6      27.0   3.13e-47
10 Comorbid value        -43.0      21.1      -2.04  4.43e- 2

使用 MWT.mult 的多元回归输出<- tidy(model):

 term                    estimate std.error statistic     p.value
  <chr>                      <dbl>     <dbl>     <dbl>       <dbl>
1 (Intercept)               615.      116.       5.31  0.000000766
2 FEV1                       31.3      27.0      1.16  0.251      
3 AGE                        -3.24      1.26    -2.57  0.0117     
4 copd$gender1               29.3      24.2      1.21  0.228      
5 COPDSEVERITYMODERATE      -25.9      29.0     -0.894 0.374      
6 COPDSEVERITYSEVERE        -42.7      42.4     -1.01  0.317      
7 COPDSEVERITYVERY SEVERE  -135.       60.6     -2.22  0.0289     
8 comorbid1                 -45.3      18.6     -2.44  0.0167     

问题 1:我通过在简单数据框中将 COPDSEVERITY 编码为整数而丢失了一些 beta。有没有办法让简单模型中的所有 3 个 beta 都显示在我使用我使用的代码创建的简单数据框中?我想另一种方法是单独运行简单回归并手动合并结果输出。

lm 的输出(MWB1.Best ~ COPDSEVERITY)

            (Intercept)    COPDSEVERITYMODERATE      COPDSEVERITYSEVERE 
              458.08696               -51.08696               -89.42029 
COPDSEVERITYVERY SEVERE 
             -167.21196 

问题 2:是否有创建组合的简单和多元线性回归输出的包?为了组合这些数据框,我做了以下事情:

MWT.simp <- filter(MWT.simp, term=="value") #remove all intercepts
MWT.simp <- MWT.simp %>% select(variable, estimate, std.error) #select appropriate columns
MWT.mult <- MWT.mult %>% select(term, estimate, std.error) #select appropriate columns
MWT.mult <- MWT.mult %>% rename("variable" = "term") #rename to prepare for merge
MWT.compare <- merge(x = MWT.simp, y = MWT.mult, by = "variable", all.x = TRUE)

输出:

  variable estimate.x std.error.x estimate.y std.error.y
1     FEV1  74.110667   14.089604  31.254582   27.041458
2      AGE  -3.104007    1.326155  -3.235664    1.257062
3   Gender  30.510417   22.097009         NA          NA
4 Severity -50.130769   11.017792         NA          NA
5 Comorbid -42.951515   21.084591         NA          NA

查看我的输出后,我意识到变量 Gender 和 Comorbid 也需要在两个数据集中重命名,而且我没有解决 COPDSEVERITY 问题。在我进一步讨论之前,我想一定有更好的方法来做到这一点,因为这是在期刊中呈现数据的一种常见方式。

谢谢!

r dplyr regression linear-regression broom
© www.soinside.com 2019 - 2024. All rights reserved.