您提供的第一个链接实际上对它的工作原理有一个清晰的解释,还有一个可爱的例子。(谢谢你,这是一个很好的资源,我将在自己的工作中使用。)
要使用该curve
函数,您需要将某个函数作为参数传递。确实,*weibull
函数族对 Weibull 使用不同的参数化而不是survreg
,但它可以很容易地转换,如您的第一个链接所述。此外,从文档中survreg
:
有多种方法可以参数化 Weibull 分布。survreg 函数将其嵌入到一般的位置尺度族中,这是与 rweibull 函数不同的参数化,并且经常导致混淆。
survreg's scale = 1/(rweibull shape)
survreg's intercept = log(rweibull scale)
这是该简单转换的实现:
# The parameters
intercept<-4.0961
scale<-1.15
par(mfrow=c(1,2),mar=c(5.1,5.1,4.1,2.1)) # Make room for the hat.
# S(t), the survival function
curve(pweibull(x, scale=exp(intercept), shape=1/scale, lower.tail=FALSE),
from=0, to=100, col='red', lwd=2, ylab=expression(hat(S)(t)), xlab='t',bty='n',ylim=c(0,1))
# h(t), the hazard function
curve(dweibull(x, scale=exp(intercept), shape=1/scale)
/pweibull(x, scale=exp(intercept), shape=1/scale, lower.tail=FALSE),
from=0, to=100, col='blue', lwd=2, ylab=expression(hat(h)(t)), xlab='t',bty='n')
par(mfrow=c(1,1),mar=c(5.1,4.1,4.1,2.1))
我了解您在回答中提到您不想使用该pweibull
函数,但我猜您不想使用它,因为它使用了不同的参数化。pweibull
否则,您可以简单地使用 thatsurvreg
的参数化编写您自己的版本:
my.weibull.surv<-function(x,intercept,scale) pweibull(x,scale=exp(intercept),shape=1/scale,lower.tail=FALSE)
my.weibull.haz<-function(x,intercept,scale) dweibull(x, scale=exp(intercept), shape=1/scale) / pweibull(x,scale=exp(intercept),shape=1/scale,lower.tail=FALSE)
curve(my.weibull.surv(x,intercept,scale),1,100,lwd=2,col='red',ylim=c(0,1),bty='n')
curve(my.weibull.haz(x,intercept,scale),1,100,lwd=2,col='blue',bty='n')
正如我在评论中提到的,我不知道你为什么要这样做(除非这是家庭作业),但你可以手动编码pweibull
,dweibull
如果你喜欢:
my.dweibull <- function(x,shape,scale) (shape/scale) * (x/scale)^(shape-1) * exp(- (x/scale)^shape)
my.pweibull <- function(x,shape,scale) exp(- (x/scale)^shape)
这些定义直接来自?dweibull
. 现在只需包装那些较慢、未经测试的函数,而不是pweibull
直接包装dweibull
。