据我所知,您的代码或计算没有任何问题。不过,您可以跳过几行代码,通过获取发生率比率exp(coef(mod)). 这两个模型做出不同的假设,这可能会导致不同的结果。
泊松回归假设风险不断。Cox 模型仅假设风险是成比例的。如果满足持续危险的假设,这个问题
Cox 回归是否具有潜在的泊松分布?
解释了 Cox 和 Poisson 回归之间的联系。
我们可以使用模拟来研究两种情况:恒定风险和非恒定(但成比例)风险。首先让我们模拟来自具有恒定危害的人群的数据。风险比的形式为
λ(t)=λ0exp(β′x),
在哪里β是参数向量,x是协变量的向量,并且λ0是一些固定的正数。因此,满足泊松回归的恒定风险假设。现在我们通过使用分布函数这一事实(在许多书籍中找到,例如 Therneau 的 Modeling Survival Data,p.13)从这个模型中进行模拟,F, 的生存时间λ因为危险可以被发现
F(t)=1−exp(∫t0λ(s) ds).
有了这个,我们还可以找到的倒数F,F−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)
对于 Cox 模型,参数估计的平均值是
sex rxLev rxLev+5FU age
-0.03826301 0.04167353 0.09069553 0.10025534
对于泊松模型
(Intercept) sex rxLev rxLev+5FU age
-1.23651275 -0.03822161 0.03678366 0.08606452 0.09812454
对于这两个模型,我们看到这接近于真实值,例如,记住男性和女性之间的差异为 -0.04,而这两个模型的估计值为 -0.038。我们现在可以对非常量风险函数做同样的事情
λ(t)=λ0texp(β′x).
我们现在像以前一样模拟。
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)
对于 Cox 模型,我们现在得到
sex rxLev rxLev+5FU age
-0.04220381 0.04497241 0.09163522 0.10029121
对于泊松模型
(Intercept) sex rxLev rxLev+5FU age
-0.12001361 -0.01937333 0.02028097 0.04318946 0.04908300
在这个模拟中,泊松模型的平均值显然比 Cox 模型的平均值更远离真实值。这并不奇怪,因为我们违反了持续危险的假设。
当危险恒定时,幸存者函数,S, 是形式
S(t)=exp(−α∗t),
对于一些积极的α取决于具体的主题,因此S是凸的。如果我们使用 Kaplan-Meier 估计来估计S对于原始数据,我们看到以下内容。
这个函数看起来是凹的。这并不能证明任何事情,但它可能暗示该数据集不满足持续危害的假设,这反过来又可以解释两个模型之间的差异。
据我所知,关于数据的最后评论colon保存有关癌症复发时间和死亡时间的数据(对于每个值有两个观察值id)。在上面,我们一直在建模它,就像它只是一样的东西。这可能不是一个好主意。