是否可以在R中安装灵活的危险模型并指定危险功能?例如,我有一个数据生成过程,我知道它会导致U形危险函数。如何拟合灵活的参数模型(并获得相应的估计值)?
我知道flexsurv
可以拟合样条风险模型,但我无法使其适合已知的形状危险函数模型。任何帮助或示例都将非常受欢迎。
答案 0 :(得分:3)
我的答案因为不单独使用R而有些作弊,但是使用可以从R内部运行的工具。你想要做的是相当高级的生存分析,我怀疑任何现有的R包都将是足够灵活。
以下示例基于Brad Carlin's software page上的代码,作为他们关于联合生存模型的论文的附录提供。 1 联合模型导致相当复杂的可能性,因此这种方法应该能够处理你想要实现的很多东西。
它使用了BUGS"一个技巧",如WinBUGS用户手册中所述。 2 这个技巧也可用于JAGS,我将使用它,因为它支持更多平台。该代码可用于拟合任意生存函数,因为它可以通过分析进行集成。从理论上讲,使用MCMC技术也可以处理更复杂的危险率,但是您必须从头开始编写自己的MCMC采样器并使用数值积分技术(或者组合各种随时间变化的危险函数)。
首先,调用模型的R代码:
library(rjags) # To enable JAGS within R
JAGSlist <- list("N" = N, # number of observations
"event" = event, # 1 for event, zero for censor
"T" = T # Survival time
)
#Construct the model
my.jags.model <- jags.model("MyJAGSmodel.jags",
JAGSlist,n.chains = 1,
n.adapt = 100)
my.results = coda.samples(my.jags.model,
c("alpha","beta"), # parameters to monitor
n.iter = 10000)
my.results <- my.results[[1]] #To unlist it
summary(my.results)
接下来,MyJAGSmodel.jags文件的内容:
data{
for (i in 1:N){
ones[i] <- 1
}
}
model{
for (i in 1:N) {
q[i]<-L[i]/C
ones[i]~dbern(q[i])
# Likelihood for survival data
# event=1 if event, and 0 if censoring
L[i]<-pow(h[i],event[i])*S[i]
# Hazard for individual i at their survival time
# This is where we specify it as U-shaped (quadratic)
h[i] <- alpha*T[i] + beta*(T[i]^2)
# Cumulative hazard H[t] = int_0^t (h[u] du)
H[i] <- (alpha)*(1/2)*(T[i]^2) + (beta)*(1/3)*(T[i]^3)
# Survival probability for individual i
# at their survival time
S[i]<-exp(-H[i])
# Density function
f[i]<-h[i]*S[i]
}
C<- 10000000 # part of trick
#priors
#Parameters of interest
alpha~dnorm(0,1.0E-6)
beta~dnorm(0,1.0E-6)
}
如您所见,代码构建了生存模型使用的实际可能性(有关此问题的详细信息,为什么不在Cross Validated上提问?!)
您还可以使用具有increment_log_likelihood
函数的Stan,因此它不需要JAGS使用的技巧来增加对数可能性。它也可以从R调用。如果你想要Stan代码,请告诉我或发布另一个问题。
您将不得不对此进行试验,看看它是否适用于您的方案。您想要做的是非常先进的生存分析,如果您想尝试更灵活的危险率,您可能必须编写自己的MCMC采样器。参见Gilks等(1996) 3 以获得良好的引物。
查看配有JAGS的模型的好地方是Doing Bayesian Data Analysis,以及该网站所基于的书。 4
更新,以防人们仍在访问此问题。
我一直致力于斯坦生存的例子,希望能在很多情况下工作,在这里找到它。这是一项正在进行的工作,但代码应该可用。我试图在那里解释我的工作(统计位,以及Stan位):
https://github.com/dwcoder/StanSurvivalBoilerplate
1 Guo,X.,Carlin,BP:使用标准计算机软件包对纵向和事件时间数据进行单独和联合建模,美国统计员 i> 58(1),16-24,2004
2 Spiegelhalter,D.,Thomas,A.,Best,N.,Lunn,D。: WinBUGS用户手册。请参阅提前使用BUGS语言。
3 Gilks,W.R.,Richardson,S.,Spiegelhalter,D。: Markov Chain Monte Carlo in Practice ,Taylor&amp;弗朗西斯,1996年
4 Kruschke,J。K.(2011)。 进行贝叶斯数据分析。