我正在运行 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 问题。在我进一步讨论之前,我想一定有更好的方法来做到这一点,因为这是在期刊中呈现数据的一种常见方式。
谢谢!