我运行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问题。在我继续之前,我认为必须有一种更好的方法来做到这一点,因为这是在期刊中呈现数据的常见方式。
谢谢!
1条答案
按热度按时间qoefvg9y1#
我试着减少你的问题,并解决你的核心问题。做5个模型,并比较它们。有很好的软件包,做这项工作。