Theo như tôi có thể thấy không có gì sai với mã hoặc tính toán của bạn. Tuy nhiên, bạn có thể bỏ qua một vài dòng mã bằng cách lấy tỷ lệ tỷ lệ mới mắc theo . Hai mô hình đưa ra các giả định khác nhau và điều này có khả năng dẫn đến các kết quả khác nhau.exp(coef(mod))
Hồi quy Poisson giả định các mối nguy hiểm liên tục. Mô hình Cox chỉ giả định rằng các mối nguy hiểm tỷ lệ thuận. Nếu giả định về các mối nguy hiểm không đổi được đáp ứng câu hỏi này
Cox Regression có phân phối Poisson cơ bản không?
giải thích mối liên hệ giữa hồi quy Cox và Poisson.
Chúng ta có thể sử dụng mô phỏng để nghiên cứu hai tình huống: mối nguy không đổi và mối nguy không liên tục (nhưng tỷ lệ). Trước tiên, hãy mô phỏng dữ liệu từ dân số với mối nguy hiểm thường trực. Tỷ lệ nguy hiểm có dạng
λ(t)=λ0exp(β′x)
βxλ0Fλ
F(t)=1−exp(∫t0λ(s) ds)
FF−1(0,1)F−1
library(survival)
data(colon)
data <- with(colon, data.frame(sex = sex, rx = rx, age = age))
n <- dim(data)[1]
# defining linP, the linear predictor, beta*x in the above notation
linP <- with(colon, log(0.05) + c(0.05, 0.01)[as.factor(sex)] + c(0.01,0.05,0.1)[rx] + 0.1*age)
h <- exp(linP)
simFuncC <- function() {
cens <- runif(n) # simulating censoring times
toe <- -log(runif(n))/h # simulating times of events
event <- ifelse(toe <= cens, 1, 0) # deciding if time of event or censoring is the smallest
data$time <- pmin(toe, cens)
data$event <- event
mCox <- coxph(Surv(time, event) ~ sex + rx + age, data = data)
mPois <- glm(event ~ sex + rx + age, data = data, offset = log(time))
c(coef(mCox), coef(mPois))
}
sim <- t(replicate(1000, simFuncC()))
colMeans(sim)
Đối với mô hình Cox, trung bình của các ước tính tham số là
sex rxLev rxLev+5FU age
-0.03826301 0.04167353 0.09069553 0.10025534
và cho mô hình Poisson
(Intercept) sex rxLev rxLev+5FU age
-1.23651275 -0.03822161 0.03678366 0.08606452 0.09812454
Đối với cả hai mô hình, chúng tôi thấy rằng giá trị này gần với các giá trị thực, ví dụ, nhớ rằng sự khác biệt giữa nam và nữ là -0,04, và ước tính là -0,038 cho cả hai mô hình. Bây giờ chúng ta có thể làm tương tự với chức năng nguy hiểm không cố định
λ(t)=λ0texp(β′x)
Bây giờ chúng tôi mô phỏng như trước đây.
simFuncN <- function() {
cens <- runif(n)
toe <- sqrt(-log(runif(n))/h)
event <- ifelse(toe <= cens, 1, 0)
data$time <- pmin(toe, cens)
data$event <- event
mCox <- coxph(Surv(time, event) ~ sex + rx + age, data = data)
mPois <- glm(event ~ sex + rx + age, data = data, offset = log(time))
c(coef(mCox), coef(mPois))
}
sim <- t(replicate(1000, simFuncN()))
colMeans(sim)
Đối với mô hình Cox bây giờ chúng tôi nhận được
sex rxLev rxLev+5FU age
-0.04220381 0.04497241 0.09163522 0.10029121
và cho mô hình Poisson
(Intercept) sex rxLev rxLev+5FU age
-0.12001361 -0.01937333 0.02028097 0.04318946 0.04908300
Trong mô phỏng này, trung bình của mô hình Poisson rõ ràng là xa hơn các giá trị thực so với mô hình Cox. Điều này không đáng ngạc nhiên vì chúng tôi đã vi phạm giả định về các mối nguy hiểm liên tục.
S
S(t)=exp(−α∗t)
αSS
Hàm này trông lõm. Điều này không chứng minh bất cứ điều gì, nhưng có thể là một gợi ý rằng giả định về các mối nguy không đổi không được đáp ứng cho tập dữ liệu này, điều này có thể giải thích sự khác biệt giữa hai mô hình.
colonid