私が見る限り、コードや計算に問題はありません。ただし、発生率を取得することにより、数行のコードをスキップできます。2つのモデルは異なる仮定を行っており、これは異なる結果をもたらす可能性があります。exp(coef(mod))
ポアソン回帰は、一定のハザードを想定しています。Coxモデルは、ハザードが比例していることのみを前提としています。一定のハザードの仮定が満たされている場合、この質問
Cox回帰には基礎となるポアソン分布がありますか?
コックスとポアソン回帰の間の接続を説明します。
シミュレーションを使用して、一定のハザードと非一定の(しかし比例的な)ハザードの2つの状況を調査できます。まず、ハザードが一定の母集団からのデータをシミュレートしましょう。ハザード比は
λ(t)=λ0exp(β′x)、
ここで、はパラメーターのベクトル、は共変量のベクトル、は固定の正の数です。したがって、ポアソン回帰のハザードの一定の仮定が満たされます。今、私たちは、分布関数という(Therneau、P.13により、多くの本で見つけ例えばモデリングの生存データを)事実を使用して、このモデルからシミュレートで生存期間の、危険などのように見つけることができますX λ 0 F λβxλ0Fλ
F(t)=1−exp(∫t0λ(s) ds)。
これで我々はまた、の逆見つけることができる、。この関数を使用して、均一な変数を描画し、を使用してそれらを変換することにより、正しいハザードで生存時間をシミュレートします。やってみましょう。F - 1(0 、1 )F - 1FF−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)、
特定の主題に依存するいくつかの正の場合、は凸です。Kaplan-Meier推定器を使用して元のデータの推定値を取得すると、次のようになります。S SαSS
この関数は凹型に見えます。これは何も証明しませんが、このデータセットでは一定のハザードの仮定が満たされておらず、2つのモデル間の不一致が説明されている可能性があるというヒントになる可能性があります。
私の知る限り、が癌の再発までの時間と死亡までの時間の両方に関するデータを保持している限り、データに関する最後のコメント(各値について2つの観測値があります)。上記では、まったく同じようにモデル化しています。それはおそらく良い考えではありません。i dcolonid