【问题标题】:Using a BY variable in coxph( ) or survreg( )在 coxph( ) 或 survreg( ) 中使用 BY 变量
【发布时间】:2012-07-15 23:31:24
【问题描述】:

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

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

有什么建议吗?

【问题讨论】:

  • 我不清楚你在追求什么(这可能是由于我对时间序列的无知)但复制可能是你追求的。
  • 我建议使用 plyr::ddplydata.table 而不是循环或子集。
  • @TylerRinker 同样的问题可能适用于像 lm() 这样的东西。本质上,如何获取数据集并在该变量的级别上应用 lm() 之类的东西。
  • @EpiGrad 然后 mnel 的响应与使用 base 的 split 然后 lapply 一样好。然后,您必须从应用 cox 模型中获取图片并使用 do.call 将它们作为数据框重新组合在一起。
  • nlme::lmList 可用于lm

标签: r plyr data.table


【解决方案1】:

使用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']

【讨论】:

    猜你喜欢
    • 2011-06-15
    • 1970-01-01
    • 2013-10-22
    • 2021-07-17
    • 2021-11-07
    • 2015-10-14
    • 1970-01-01
    • 2016-04-26
    • 1970-01-01
    相关资源
    最近更新 更多