在coxph()或survreg()中使用BY变量

时间:2012-07-15 23:31:24

标签: r plyr data.table

我得到了一些类似的模拟输出:

Run,ID,Time,Var1,Outcome
1,1,6,0.5,1
1,2,4,0.25,1
1,3,2,0.9,1
2,1,5,0.07,1
...
10,3,9,0.08,1

基本上是N个人的一系列M研究(实际上M = 1000和N = 123)。我想运行Cox模型(最好)或参数回归模型(如果必须的话)来估计Var1对生存时间的影响。我想要做的是估计每个“运行”的效果(产生1,000个估计值),然后将所有这些估计值转储到单个数据框,矩阵等中,我可以查看它们的分布。

如果我使用SAS,代码看起来像这样:

ods output ParameterEstimates=work.parameters;
proc phreg model time*outcome(0) = Var1;
   BY Run;
run;
ods output close;

但是因为这是一个侧面项目,我试图强迫自己在R中做侧面项目以便学习它,所以我不能再回到SAS了。据我所知,在coxph()文档中,没有简单的方法来包含副变量。我猜这是涉及循环和子集。

有什么建议吗?

1 个答案:

答案 0 :(得分:4)

使用plyr或data.table

的示例
## some data
set.seed(123)
.data <- data.frame(run = rep(1:10, each = 50), x = runif(500))
.data$y <- .data$x * rep(runif(10),each = 50)

# ---------------------------------------------------------
# using plyr
library(plyr)
# ddply to extract just the coefficients
ddply(.data, .(run), function(data) data.frame(coef = coef(lm(y ~ x, data))))
    # or save the whole object
# the whole lm object 
lm_list <- dlply(.data, .(run), lm, formula = y ~ x)
# get the coefficients    
ldply(lm_list, coef)
# print the summaries
llply(lm_list, summary)

# ---------------------------------------------------------
# with data.table 
library(data.table)

DT <- data.table(.data)
setkeyv(DT, 'run')

DT[, list(coef = coef(lm(y~x, .SD))), by = 'run']