gpt4 book ai didi

r - 定义生存分布::survreg()

转载 作者:行者123 更新时间:2023-12-04 02:06:28 29 4
gpt4 key购买 nike

我尝试使用 Gamma 分布拟合 survreg 模型。

关注 ?survreg.distributions我像这样定义了我的自定义发行版:

gamma <- list(name = 'gamma',
parms = c(2,2),
init = function(x, weights, ...){
c(median(x), mad(x))
},
density = function(x, parms){
shape <- parms[1]
scale <- parms[2]
cbind(pgamma(x, shape=shape, scale=scale),
1-pgamma(x, shape=shape, scale=scale),
dgamma(x, shape=shape, scale=scale),
(shape-1)/x - 1/scale,
(shape-1)*(shape-2)/x^2 - 2*(shape-1)/(x*scale) + 1/scale^2)
},
quantile = function(p, parms) {
qgamma(p, shape=parms[1], scale=parms[2])
},
deviance = function(...) stop('deviance residuals not defined')
)

但是我无法让它运行:
require(survival)
survreg(Surv(log(time), status) ~ ph.ecog + sex, lung, dist=gamma)
#Error in coxph.wtest(t(x) %*% (wt * x), c((wt * eta + weights * deriv$dg) %*% :
# NA/NaN/Inf in foreign function call (arg 3)

该错误来自一些 C 代码,但我认为它是更早生成的......

survreg 的任何提示/建议/替代方案?

最佳答案

我找到了 flexsurv实现广义 Gamma 分布的包。

对于威 bool 分布,估计来自 survregflexsurvreg是相似的(但请注意不同的参数化:

require(survival)
summary(survreg(Surv(log(time), status) ~ ph.ecog + sex, data = lung, dist='weibull'))

Call:
survreg(formula = Surv(log(time), status) ~ ph.ecog + sex, data = lung,
dist = "weibull")
Value Std. Error z p
(Intercept) 1.7504 0.0364 48.13 0.00e+00
ph.ecog -0.0660 0.0158 -4.17 3.10e-05
sex 0.0763 0.0237 3.22 1.27e-03
Log(scale) -1.9670 0.0639 -30.77 6.36e-208

Scale= 0.14

Weibull distribution
Loglik(model)= -270.5 Loglik(intercept only)= -284.3
Chisq= 27.62 on 2 degrees of freedom, p= 1e-06
Number of Newton-Raphson Iterations: 6
n=227 (1 observation deleted due to missingness)


require(flexsurv)
flexsurvreg(Surv(log(time), status) ~ ph.ecog + sex, data = lung, dist='weibull')

Call:
flexsurvreg(formula = Surv(log(time), status) ~ ph.ecog + sex, data = lung, dist = "weibull")

Maximum likelihood estimates:
est L95% U95%
shape 7.1500 6.3100 8.1000
scale 5.7600 5.3600 6.1800
ph.ecog -0.0660 -0.0970 -0.0349
sex 0.0763 0.0299 0.1230

N = 227, Events: 164, Censored: 63
Total time at risk: 1232.1
Log-likelihood = -270.5, df = 4
AIC = 549

使用 flexsurvreg,我们可以将广义 Gamma 分布拟合到此数据:
flexsurvreg(Surv(log(time), status) ~ ph.ecog + sex, data = lung, dist='gengamma')

Call:
flexsurvreg(formula = Surv(log(time), status) ~ ph.ecog + sex, data = lung, dist = "gengamma")

Maximum likelihood estimates:
est L95% U95%
mu 1.7800 1.7100 1.8600
sigma 0.1180 0.0971 0.1440
Q 1.4600 1.0200 1.9100
ph.ecog -0.0559 -0.0853 -0.0266
sex 0.0621 0.0178 0.1060

N = 227, Events: 164, Censored: 63
Total time at risk: 1232.1
Log-likelihood = -267.57, df = 5
AIC = 545.15

对数逻辑分布(与 survreg 相反)不是内置的,但可以轻松定制(参见 flexsurvreg 的示例)。

我没有测试太多,但是 flexsurv似乎是 survival 的不错选择.

关于r - 定义生存分布::survreg(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15890688/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com