1

我得到了一些模拟的输出,看起来像这样:

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() 文档中可以看出,没有简单的方法来包含一个副变量。我的猜测是这将涉及循环和子集。

有什么建议么?

4

1 回答 1

4

使用plyror 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']
于 2012-07-16T00:10:07.927 回答