r-在coxph对象中使用公式进行范围界定



我正试图编写一组函数,其中第一个函数适合cox模型(通过Rsurvival包中的coxph(,第二个函数获得新数据集的估计生存率,给定第一个函数的拟合模型对象。我遇到了一些范围界定问题,如果不对代码进行实质性的重新分解,我不太知道如何解决这些问题(我唯一能想到的方法是不那么笼统,也更难阅读(。

我有一组非常相似的基于glm函数的函数,它们不会遇到相同的问题,并给出我所期望的答案。我在下面包含了一个简短的示例来演示这个问题。glue.coxglue.glm是具有我试图获得的基本功能的函数。glue.glm按预期工作(在全局环境中计算得出相同的值(,但glue.cox抱怨找不到用于拟合cox模型的数据,最终出现错误。我不知道如何使用substitute来做到这一点,但我怀疑这就是前进的方向。我的实验碰壁了。

library(survival)
data.global = data.frame(time=runif(20), x=runif(20))
newdata.global = data.frame(x=c(0,1))
f1 = Surv(time) ~ x # this is the part that messes it up!!!!! Surv gets eval
f2 = time ~ x # this is the part that messes it up!!!!! Surv gets eval
myfit.cox.global = coxph(f1, data=data.global)
myfit.glm.global = glm(f2, data=data.global)
myfit.glm.global2 = glm(time ~ x, data=data.global)

myfit.cox <- function(f, dat.local){
coxph(f, data=dat.local)
}
myfit.glm <- function(f, dat.local){
glm(f, data=dat.local)
}
mypredict.cox <- function(ft, dat.local){
newdata = data.frame(x=c(0,1))
tail(survfit(ft, newdata)$surv, 1)
}
mypredict.glm <- function(ft, dat.local){
newdata = data.frame(x=c(0,1))
predict(ft, newdata)
}
glue.cox <- function(f, dat.local){
fit = myfit.cox(f, dat.local)
mypredict.cox(fit, dat.local)
}
glue.glm <- function(f, dat.local){
fit = myfit.glm(f, dat.local)
mypredict.glm(fit, dat.local)
}
# these numbers are the goal for non-survival data
predict(myfit.glm.global, newdata = newdata.global)               

0.5950440 0.4542248

glue.glm(f2, data.global) 

0.5950440 0.4542248#这适用于

# these numbers are the goal for survival data
tail(survfit(myfit.cox.global, newdata = newdata.global)$surv, 1)

[20,]0.02300798 0.03106081

glue.cox(f1, data.global) 

eval(predvars,data,env(中的错误:找不到对象"dat.local">

这似乎是有效的,至少在使glue.cox()按需工作的狭义意义上是有效的:

myfit.cox <- function(f, dat.local){
environment(f) <- list2env(list(dat.local=dat.local))
coxph(f, data=dat.local)
}

这里的技巧是,大多数R建模/模型处理函数在与公式相关的环境中查找数据。

我不知道为什么glue.glm在不进行更多挖掘的情况下工作,除了[g]lm对象在内部(例如在$qr元素中(存储了比其他模型类型更多的下游处理所需的信息这一一般说法。

相关内容

  • 没有找到相关文章

最新更新