কক্স বেসলাইন বিপত্তি


19

ধরা যাক আমার একটি "কিডনি ক্যাথেটার" ডেটা সেট রয়েছে। আমি একটি কক্স মডেল ব্যবহার করে বেঁচে থাকার কার্ভকে মডেল করার চেষ্টা করছি। যদি আমি একটি কক্স মডেল বিবেচনা করি:

h(t,Z)=h0exp(bZ),
আমার বেসলাইন বিপদের প্রাক্কলন প্রয়োজন। অন্তর্নির্মিত survivalপ্যাকেজ আর ফাংশনটি ব্যবহার করে basehaz(), আমি এটি সহজেই এটি করতে পারি:
library(survival)

data(kidney)
fit <- coxph(Surv(time, status) ~ age , kidney)
basehaz(fit)

তবে যদি আমি প্যারামিটারের একটি নির্ধারিত অনুমানের জন্য বেসলাইন বিপদের এক ধাপে ধাপে লিখতে চাই তবে আমি bকীভাবে এগিয়ে যেতে পারি? আমি চেষ্টা করেছিলাম:

bhaz <- function(beta, time, status, x) {

    data <- data.frame(time,status,x)
    data <- data[order(data$time), ]
    dt   <- data$time
    k    <- length(dt)
    risk <- exp(data.matrix(data[,-c(1:2)]) %*% beta)
    h    <- rep(0,k)

    for(i in 1:k) {
        h[i] <- data$status[data$time==dt[i]] / sum(risk[data$time>=dt[i]])          
    }

    return(data.frame(h, dt))
}

h0 <- bhaz(fit$coef, kidney$time, kidney$status, kidney$age)

কিন্তু এটি হিসাবে একই ফলাফল দেয় না basehaz(fit)। সমস্যাটা কি?


@ গুং আপনি এই প্রশ্নে সাহায্য করতে পারেন ? আমি বেশ কয়েকদিন সংগ্রাম করেছি ...
হাইতাও ডু

উত্তর:


21

স্পষ্টতই, basehaz()বিপদটি নিজেই বিপজ্জনক হারের চেয়ে সংখ্যক বিপজ্জনক হারের গণনা করে। সূত্র হিসেবে অনুসরণ করা সঙ্গে 0 ( Y ( ) ) = D ( )

H^0(t)=y(l)th^0(y(l)),
যেখানেY(1)<Y(2)<বোঝাতে স্বতন্ত্র ঘটনা বার()এ ঘটনা সংখ্যাY(), আরআর(y(l))হ'লy(l)এ ঝুঁকিপূর্ণ সেট
h^0(y(l))=d(l)jR(y(l))exp(xjβ)
y(1)<y(2)<d(l)y(l)R(y(l))y(l)সব ব্যক্তিদের এখনও এতে ইভেন্টে সমর্থ ধারণকারী y(l)

এর চেষ্টা করুন। (নীচের কোডটি কেবল উদাহরণের জন্য রয়েছে এবং এটি খুব ভালভাবে লেখার উদ্দেশ্যে নয়))

#------package------
library(survival)

#------some data------
data(kidney)

#------preparation------
tab <- data.frame(table(kidney[kidney$status == 1, "time"])) 
y <- as.numeric(levels(tab[, 1]))[tab[, 1]] #ordered distinct event times
d <- tab[, 2]                               #number of events

#------Cox model------
fit<-coxph(Surv(time, status)~age, data=kidney)

#------cumulative hazard obtained from basehaz()------
H0 <- basehaz(fit, centered=FALSE)
H0 <- H0[H0[, 2] %in% y, ] #only keep rows where events occurred

#------my quick implementation------
betaHat <- fit$coef

h0 <- rep(NA, length(y))
for(l in 1:length(y))
{
  h0[l] <- d[l] / sum(exp(kidney[kidney$time >= y[l], "age"] * betaHat))
}

#------comparison------
cbind(H0, cumsum(h0))

আংশিক আউটপুট:

       hazard time cumsum(h0)
1  0.01074980    2 0.01074980
5  0.03399089    7 0.03382306
6  0.05790570    8 0.05757756
7  0.07048941    9 0.07016127
8  0.09625105   12 0.09573508
9  0.10941921   13 0.10890324
10 0.13691424   15 0.13616338

আমার সন্দেহ হয় যে সামান্য পার্থক্যটি coxph()ডেটার সাথে সম্পর্কের কারণে আংশিক সম্ভাবনার কাছাকাছি হওয়ার কারণে হতে পারে ...


অনেক ধন্যবাদ. হ্যাঁ, আনুমানিক পদ্ধতিতে সামান্য পার্থক্য রয়েছে। তবে বন্ধনের সাথে time 76 টি টাইম পয়েন্ট রয়েছে, যদি আমি প্রতিবার পয়েন্টের জন্য বেসলাইন বিপত্তিটি খুঁজে পেতে চাই। আমি কি করতে পারি? আর কোডে কোন ধরণের পরিবর্তন প্রয়োজন?
দিহান

1
বিচ্ছিন্ন বিপদটি শূন্য, ইভেন্টের সময় ব্যতীত। এটি প্রকৃতপক্ষে সবচেয়ে বড় অবদান দেয় যদি একটি বিচ্ছিন্ন ঝুঁকি ফাংশন অনুমিত হয়। আপনি ধরে নিতে যে কোনও দুটি অনুমানের মধ্যে বিভক্ত করতে চাইতে পারেন, উদাহরণস্বরূপ, বিপত্তিটি স্থির থাকে।
অক্টোবরে

ব্রেসলো পদ্ধতি (1974)
tomka

kidney$time >= y[l]ystatus=0status=1d=2d=1status=0

যেমন @ টমকা উল্লেখ করেছেন। coxphকলটির সাথে প্রতিস্থাপন fit<-coxph(Surv(time, status)~age, data=kidney, method="breslow")পদ্ধতিগুলির মধ্যে পার্থক্য ঠিক করবে।
mr.bjerre
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.