【发布时间】:2014-06-07 14:36:56
【问题描述】:
我想将两个回归分析的结果并排显示,比如说逻辑回归和 COX 回归。变量以行表示,p、OR/HR 和置信区间的相应数据以列表示。所以,列名不匹配:左边是 OR,右边是 HR。
我试过cbind,但遇到以下问题:
(1) 如果一个变量(行)由于变量选择而只出现在一个表中怎么办?在这种情况下,如果将两者结合起来,则另一个表中必须有一个空白行。
(2) 两个表合并后,如何在每个表的四列上添加一个标题,以便将它们标记为逻辑或 COX?
我正在寻找的输出将通过 xtable 显示为乳胶表:
| Logistic regression | COX regression
| p | OR | 2.5% | 97.5% | p | HR | 2.5% | 97.5%
v1 | 0.849 | 0.936 | ... | ... | | | |
v2 | 0.249 | 0.595 | ... | ... | 0.026 | 1.916 | ... | ...
v3 | | | | | 0.023 | 0.140 | ... | ...
这里是一些示例代码:
library(xtable);library(survival)
# Creating a sample data frame
set.seed(1234)
event <- as.numeric(round(rnorm(10,5,5))>1);tte<-abs(round(rnorm(10,5,5)))
v1 <- round(rnorm(10,5,5));v2 <- round(rnorm(10,2,5));v3 <- round(rnorm(10,1,5))
df<-data.frame(event, tte, v1, v2, v3)
# Some logistic regression ...
LogReg <- glm(event~v1+v2,family=binomial,data=df)
LogRegTable<-round(cbind(summary(LogReg)$coef[, "Pr(>|z|)"], exp(coef(LogReg)), exp(confint(LogReg))),3)
colnames(LogRegTable)<-c("p","OR","2.5%","97.5%")
LogRegTable<-LogRegTable[!rownames(LogRegTable)=="(Intercept)",]
# ... and some COX regression
CoxReg <- coxph(Surv(df$tte, df$event)~v2+v3,data=df)
CoxRegTable<-round(cbind(summary(CoxReg)$coef[, "Pr(>|z|)"], exp(coef(CoxReg)), exp(confint(CoxReg))),3)
colnames(CoxRegTable)<-c("p","HR","2.5%","97.5%")
# There we go
LogRegTable
CoxRegTable
# Now, how to get them in one table?
xtable(
cbind(LogRegTable, CoxRegTable)
)
# ... messes up the correct row names
【问题讨论】:
-
如果你想根据变量名并排匹配,
merge()会比cbind更好。如果您想要精美的表格,请考虑使用xtables或stargazer之类的包来制作 LaTeX 输出(或编写代码以使 LaTeX 完全符合您的要求)。这里没有足够的信息来提出更具体的建议(考虑添加您尝试过的示例数据和代码) -
谢谢。事实上,我想通过 xtable 传递最终输出,使其在 LaTex 中看起来不错。当我使用 merge() 时,如何指定通过变量名匹配,即第一列?用“colnames(LogRegTable)”列出列名以“p”开头,所以第二列。