从多个线性回归模型的输出创建 Dataframe

6rqinv9w  于 2023-04-27  发布在  其他
关注(0)|答案(1)|浏览(134)

我运行5个简单的线性回归,然后1个多元线性回归与所有5个预测。
我可以用5个简单回归模型的所有beta生成一个 Dataframe ,用多重回归模型的调整beta生成第二个 Dataframe 。我想以最有效的方式合并这些 Dataframe 。我希望最终产品看起来像这样:

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.

以下是变量。对于所有模型,MWT 1Best是结果变量:

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(模型):

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:是否有一个包可以创建组合的简单和多元线性回归输出?为了组合这些 Dataframe ,我做了以下操作:

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问题。在我继续之前,我认为必须有一种更好的方法来做到这一点,因为这是在期刊中呈现数据的常见方式。
谢谢!

qoefvg9y

qoefvg9y1#

我试着减少你的问题,并解决你的核心问题。做5个模型,并比较它们。有很好的软件包,做这项工作。

# 5 linear regression models 

ols1 <- lm(mpg ~ vs, data=mtcars)
ols2 <- lm(mpg ~ drat, data=mtcars)
ols3 <- lm(mpg ~ cyl, data=mtcars)
ols4 <- lm(mpg ~ disp, data=mtcars)
ols5 <- lm(mpg ~ vs + drat + cyl + disp, data=mtcars)

# model comparison 

library(modelsummary)
modelsummary(list("simple 1" = ols1,
                  "simple 2" = ols2, 
                  "simple 3" = ols3, 
                  "simple 4" = ols4,
                  "multiple" = ols5))

相关问题