2013-04-26 31 views
9

tôi có mô hình survreg sau:tồn tại Lô và chức năng nguy hiểm của survreg sử dụng đường cong()

Call: 
survreg(formula = Surv(time = (ev.time), event = ev) ~ age, 
    data = my.data, dist = "weib") 
      Value Std. Error z  p 
(Intercept) 4.0961  0.5566 7.36 1.86e-13 
age   0.0388  0.0133 2.91 3.60e-03 
Log(scale) 0.1421  0.1208 1.18 2.39e-01 
Scale= 1.15 

Weibull distribution 

Tôi muốn âm mưu nguy hiểm chức năng và tồn chức năng dựa trên các ước tính ở trên.
Tôi không muốn sử dụng predict() hoặc pweibull() (như đã trình bày ở đây Parametric Survival hoặc đây SO question.

Tôi muốn sử dụng chức năng curve(). Bất kỳ ý tưởng làm thế nào tôi có thể thực hiện điều này? Dường như chức năng Weibull của survreg sử dụng các định nghĩa khác về quy mô và hình dạng hơn so với bình thường (và khác nhau mà ví dụ rweibull)

UPDATE:. tôi đoán những gì tôi thực sự cần nó để bày tỏ mối nguy hiểm/tồn tại như một chức năng của dự toán Intercept, age (+ other potential covariates), Scale mà không sử dụng bất kỳ sẵn sàng thực hiện *weilbull chức năng.

Trả lời

8

thông số của bạn là:

scale=exp(Intercept+beta*x) trong ví dụ của bạn và cho phép nói rằng so với tuổi = 40

scale=283.7 

tham số hình dạng của bạn là đối ứng của quy mô mà các kết quả đầu ra mô hình

shape=1/1.15 

Sau đó, mối nguy là:

curve((shape/scale)*(x/scale)^(shape-1), from=0,to=12,ylab=expression(hat(h)(t)), col="darkblue",xlab="t", lwd=5) 

Chức năng rủi ro tích lũy là:

curve((x/scale)^(shape), from=0,to=12,ylab=expression(hat(F)(t)), col="darkgreen",xlab="t", lwd=5) 

Chức năng Survival là 1-chức năng nguy hiểm tích lũy, vì vậy:

curve(1-((x/scale)^(shape)), from=0,to=12,ylab=expression(hat(S)(t)), col="darkred",xlab="t", lwd=5, ylim=c(0,1)) 

Ngoài ra kiểm tra eha gói, và các chức năng hweibullHweibull

Weibull Functions

8

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)) 

Survival and hazard functions

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 pweibulldweibull 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 pweibulldweibull.

+0

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? –

+0

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

+0

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

Các vấn đề liên quan