first link you provided thực sự có giải thích rõ ràng về lý thuyết về cách hoạt động của tính năng này, cùng với một ví dụ đáng yêu. (Cảm ơn vì điều này, nó là một nguồn tốt đẹp tôi sẽ sử dụng trong công việc của mình.)
Để sử dụng chức năng curve
, bạn sẽ cần phải chuyển một số chức năng làm đối số. Đúng là gia đình của các chức năng *weibull
sử dụng một tham số khác cho Weibull hơn survreg
, nhưng nó có thể dễ dàng chuyển đổi, như được giải thích liên kết đầu tiên của bạn. Ngoài ra, từ tài liệu trong số survreg
:
Có nhiều cách để tham số hóa phân phối Weibull. Chức năng sống sót được gắn trong một familiy quy mô vị trí chung, là một tham số khác nhau khác với hàm rweibull và thường dẫn đến để nhầm lẫn.
survreg's scale = 1/(rweibull shape)
survreg's intercept = log(rweibull scale)
Đây là một thực hiện mà chuyển đổi đơn giản:
# 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))

Tôi hiểu rằng bạn đề cập đến trong câu trả lời của bạn mà bạn không muốn sử dụng pweibull
chức năng, nhưng Tôi đoán rằng bạn không muốn sử dụng nó bởi vì nó sử dụng một tham số khác nhau. Nếu không, bạn chỉ có thể viết phiên bản của riêng bạn pweibull
sử dụng mà survreg
's tham số:
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')
Như tôi đã đề cập trong các ý kiến, tôi không biết tại sao bạn sẽ làm điều này (trừ khi điều này là bài tập về nhà), nhưng bạn có thể handcode pweibull
và dweibull
nếu bạn thích:
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)
Những định nghĩa đi thẳng ra khỏi ?dweibull
. Bây giờ, chỉ cần quấn các chức năng đó, chậm hơn, chưa được kiểm tra thay vì trực tiếp pweibull
và dweibull
.
Hơn ks cho email phức tạp của bạn nhưng tôi KHÔNG muốn sử dụng bất kỳ chức năng '* weibull' nào. Có thể biểu hiện mối nguy hiểm như một hàm của 'Intercept',' age (+ các covariates khác) ', và' scale' không? –
Hm, có lẽ bạn đã bỏ lỡ đoạn cuối cùng của tôi, nơi tôi chỉ cho bạn cách viết một hàm chỉ đơn giản là một trình bao bọc của «pweibull'. Tôi không biết tại sao bạn muốn viết lại 'pweibull', vì nó được mã hóa trong C, và rất nhanh và được thử nghiệm tốt. Trừ khi đây chỉ là bài tập về nhà. Dù sao, tôi chỉ cho bạn cách để mã hóa 'pweibull' và 'dweibull'. – nograpes
Tôi nghĩ rằng OP bỏ lỡ kết nối toán học giữa đầu ra R và hàm nguy hiểm/sinh tồn – ECII