ডান সেন্সর দিয়ে কীভাবে খেলনা বেঁচে থাকার (ইভেন্টের সময়) ডেটা তৈরি করা যায়


12

আমি খেলনা বেঁচে থাকার (ইভেন্ট টু ইভেন্ট) ডেটা তৈরি করতে চাই যা সঠিকভাবে সেন্সর করা হয়েছে এবং আনুপাতিক বিপত্তি এবং ধ্রুবক বেসলাইন বিপত্তি সহ কিছু বিতরণ অনুসরণ করে।

আমি নিম্নলিখিত হিসাবে ডেটা তৈরি করেছি, তবে সিমুলেটেড ডেটাতে কক্স আনুপাতিক বিপদ মডেল লাগানোর পরে সত্যিকারের মানগুলির কাছাকাছি থাকা আনুমানিক বিপদ অনুপাতগুলি অর্জন করতে আমি অক্ষম।

আমি কি ভুল করছি?

আর কোডগুলি:

library(survival)

#set parameters
set.seed(1234)

n = 40000 #sample size


#functional relationship

lambda=0.000020 #constant baseline hazard 2 per 100000 per 1 unit time

b_haz <-function(t) #baseline hazard
  {
    lambda #constant hazard wrt time 
  }

x = cbind(hba1c=rnorm(n,2,.5)-2,age=rnorm(n,40,5)-40,duration=rnorm(n,10,2)-10)

B = c(1.1,1.2,1.3) # hazard ratios (model coefficients)

hist(x %*% B) #distribution of scores

haz <-function(t) #hazard function
{
  b_haz(t) * exp(x %*% B)
}

c_hf <-function(t) #cumulative hazards function
{
  exp(x %*% B) * lambda * t 
}

S <- function(t) #survival function
{
  exp(-c_hf(t))
}

S(.005)
S(1)
S(5)

#simulate censoring

time = rnorm(n,10,2)

S_prob = S(time)

#simulate events

event = ifelse(runif(1)>S_prob,1,0)

#model fit

km = survfit(Surv(time,event)~1,data=data.frame(x))

plot(km) #kaplan-meier plot

#Cox PH model

fit = coxph(Surv(time,event)~ hba1c+age+duration, data=data.frame(x))

summary(fit)            

cox.zph(fit)

ফলাফল:

Call:
coxph(formula = Surv(time, event) ~ hba1c + age + duration, data = data.frame(x))

  n= 40000, number of events= 3043 

             coef exp(coef) se(coef)     z Pr(>|z|)    
hba1c    0.236479  1.266780 0.035612  6.64 3.13e-11 ***
age      0.351304  1.420919 0.003792 92.63  < 2e-16 ***
duration 0.356629  1.428506 0.008952 39.84  < 2e-16 ***
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

         exp(coef) exp(-coef) lower .95 upper .95
hba1c        1.267     0.7894     1.181     1.358
age          1.421     0.7038     1.410     1.432
duration     1.429     0.7000     1.404     1.454

Concordance= 0.964  (se = 0.006 )
Rsquare= 0.239   (max possible= 0.767 )
Likelihood ratio test= 10926  on 3 df,   p=0
Wald test            = 10568  on 3 df,   p=0
Score (logrank) test = 11041  on 3 df,   p=0

কিন্তু সত্য মান হিসাবে সেট করা হয়

B = c(1.1,1.2,1.3) # hazard ratios (model coefficients)

1
আপনার কাজের জন্য, একটি দ্রুত শুরু হ'ল বিদ্যমান সিমুলেশন প্যাকেজটি ব্যবহার করা হবে: cran.r-project.org/web/packages/survsim/index.html
zhanxw

উত্তর:


19

আপনি কীভাবে আপনার ইভেন্টের সময় তৈরি করেন তা আমার কাছে পরিষ্কার নয় (যা আপনার ক্ষেত্রে হতে পারে ) এবং ইভেন্ট সূচক:<0

time = rnorm(n,10,2) 
S_prob = S(time)
event = ifelse(runif(1)>S_prob,1,0)

সুতরাং এখানে একটি জেনেরিক পদ্ধতি রয়েছে যার পরে কিছু আর কোড রয়েছে।


কক্স আনুপাতিক ঝুঁকি মডেলগুলি অনুকরণ করতে বেঁচে থাকার সময় উত্পন্ন করা

আনুপাতিক ঝুঁকিপূর্ণ মডেল থেকে ইভেন্টের সময় উত্পন্ন করতে আমরা বিপরীত সম্ভাবনা পদ্ধতিটি ব্যবহার করতে পারি (বেন্ডার এট আল।, 2005) : যদি অন ​​হয় এবং যদি শর্তসাপেক্ষ বেঁচে থাকার কাজটি হ'ল আনুপাতিক বিপদ মডেল থেকে উত্পন্ন, যেমন তারপর এটি একটি সত্য যে এলোমেলো পরিবর্তনশীল আছে ফাংশনV(0,1)S(|x)

S(t|x)=exp(H0(t)exp(xβ)()
T=S1(V|x)=H01(log(V)exp(xβ))
S(|x)। এই ফলাফলটি `` বিপরীত সম্ভাবনা ইন্টিগ্রাল ট্রান্সফর্মেশন '' নামে পরিচিত। সুতরাং, একটি বেঁচে থাকা সময় জেনারেট করতে covariate ভেক্টর দেওয়া, এটা আঁকা যথেষ্ট থেকে এবং বিপরীত রূপান্তর করতে ।TS(|x)vVU(0,1)t=S1(v|x)

উদাহরণ [ওয়েইবুল বেসলাইন বিপদ]

যাক আকৃতি সঙ্গে এবং স্কেল । তারপর এবং। বিপরীত সম্ভাবনা পদ্ধতি অনুসরণ করে, উপলব্ধি দ্বারা গণনা করে প্রাপ্ত হয় সঙ্গে উপর একটি অভিন্ন variate । র্যান্ডম ভেরিয়েবল রূপান্তরের উপর ফলাফল ব্যবহার, যেটা খেয়াল করতে পারেন একটি শর্তাধীন WEIBULL বন্টন আছে (প্রদত্ত ρ > 0h0(t)=λρtρ1ρ>0λ>0H0(t)=λtρ টিএস(⋅)H01(t)=(tλ)1ρt = ( - লগ ( ভি )TS(|x) v(0,1)টিএক্সρλএক্সপ্রেস(xβ)

t=(log(v)λexp(xβ))1ρ
v(0,1)Tx) আকৃতির সাথে এবং স্কেল ।ρλexp(xβ)

আর কোড

নিম্নলিখিত আর ফাংশনটি একটি একক বাইনারি কোভারিয়েট (যেমন একটি চিকিত্সার সূচক) সহ একটি ডেটা সেট তৈরি করে gene বেসলাইন বিপত্তিটির একটি ওয়েইবুল ফর্ম রয়েছে। সেন্সরিং সময়গুলি এলোমেলোভাবে একটি ঘৃণ্য বিতরণ থেকে আঁকা drawnx

# baseline hazard: Weibull

# N = sample size    
# lambda = scale parameter in h0()
# rho = shape parameter in h0()
# beta = fixed effect parameter
# rateC = rate parameter of the exponential distribution of C

simulWeib <- function(N, lambda, rho, beta, rateC)
{
  # covariate --> N Bernoulli trials
  x <- sample(x=c(0, 1), size=N, replace=TRUE, prob=c(0.5, 0.5))

  # Weibull latent event times
  v <- runif(n=N)
  Tlat <- (- log(v) / (lambda * exp(x * beta)))^(1 / rho)

  # censoring times
  C <- rexp(n=N, rate=rateC)

  # follow-up times and event indicators
  time <- pmin(Tlat, C)
  status <- as.numeric(Tlat <= C)

  # data set
  data.frame(id=1:N,
             time=time,
             status=status,
             x=x)
}

পরীক্ষা

এখানে দিয়ে কিছু দ্রুত সিমুলেশন রয়েছে :β=0.6

set.seed(1234)
betaHat <- rep(NA, 1e3)
for(k in 1:1e3)
{
  dat <- simulWeib(N=100, lambda=0.01, rho=1, beta=-0.6, rateC=0.001)
  fit <- coxph(Surv(time, status) ~ x, data=dat)
  betaHat[k] <- fit$coef
}

> mean(betaHat)
[1] -0.6085473

আপনার দুর্দান্ত উত্তরের জন্য ধন্যবাদ। আমি বুঝতে পারি যে ইভেন্টের সময়গুলি এলোমেলো করে দেওয়ার পরে আমি ইভেন্টের স্থিতি পেয়ে ইভেন্টের সময়ে গোলযোগ পেয়েছি, যা বোধগম্য হয় না .. বোকা আমার!
stats_newb

আমি জিজ্ঞাসা করতে পারি যে কোনও তাত্পর্যপূর্ণ বিতরণ থেকে আপনি সেন্সর দেওয়ার সময়টি কেন সুনির্দিষ্ট কারণে রয়েছে?
পিটিওও

@ আপথা: এর কোনও নির্দিষ্ট কারণ নেই (এটি কেবলমাত্র একটি চিত্র যেখানে আমি
ঘৃণ্য

1
সেন্সরিং সময়ের জন্য বিতরণ পছন্দ করার জন্য কোনও গাইডলাইন আছে?
পিটিওও

@ ক্রম মজার বিষয় হল, যখন আমি flexsurvreg(Surv(time, status) ~ x, data=dat, dist = "weibull")একই সিমুলেটেড ডেটা চালাই , তখন সহগ হিসাবে উপস্থিত হয় 0.6212। কেন?
-এ নয় বা

3

ওয়েইবুল বিতরণের জন্য,
এস (টি) =e(λe(xβ)t)ρ

" " কেবল লগ (ভি) এর জন্য থাকবে(1/rho)

সুতরাং, আমি এটির মতো পরিবর্তন করেছি

Tlat <- (- log(v))^(1 / rho) / (lambda * exp(x * beta))

যদি rho = 1, ফলাফল একই হবে।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.