我想在flexsurv
包中实现一个自定义生存函数,类似于第4节(第12页):
https://cran.r-project.org/web/packages/flexsurv/vignettes/flexsurv.pdf
假设我有一个 Dataframe df
,其中status
确定一个项目是否失败。1=failed
和0=non-failed
:
> library(flexsurv)
> library(survival)
> df
equip_id age status
1 20.33812 0
2 28.44830 1
3 22.47019 0
4 47.21489 1
5 30.42093 1
现在假设我有一个密度函数:
# must be named 'dcustom.weibull' to denote density function
dcustom.weibull <- function(shape, scale, t)
{
f_t <- (shape/scale) * ((t/scale)^(shape - 1)) * exp(-(t/scale)^shape)
return(f_t)
}
我尝试创建一个自定义函数,用于flexsurv
包:
custom.weibull <- list(name = "custom.weibull", pars = c("shape", "scale"),
location = "scale",
transforms = c(log, log),
inv.transforms = c(exp, exp),
inits = function(t){ c(1, median(t)) })
我尝试用flexsurv
包调用它:
flexsurvreg(Surv(age, status)~1, data = df, dist = custom.weibull)
我得到以下错误:
Forming integrated rmst function...
Forming integrated mean function...
Error in (function (shape, scale, t) :
unused arguments (x = c(28.4482952329068, 47.2148908312751, 30.4209324295688), log = TRUE)
现在我意识到有很多软件包可以为2参数Weibull函数(例如fitdistplus
)做这件事。我试图了解如何使用已知的密度函数设置它,以便最终实现一个不同的,不太传统的密度函数。
1条答案
按热度按时间djmepvbi1#
一般来说,我们必须为一个新的分布建立一个合适的函数族。我只看到了一个d-分布函数。此外,密度函数的“x”参数通常放在第一位,所以对我来说(R经验)眼睛,将其视为“t”并且处于第三位置是相当出乎意料的。所以我构建了一个自定义dweibull并添加了一个log参数,因为我的第一个版本抛出了一个错误,抱怨一个未使用的log参数。