Berechnen Sie die Inzidenzraten mithilfe des Poisson-Modells: Beziehung zur Hazard Ratio aus dem Cox PH-Modell


9

Ich möchte Inzidenzraten berechnen, die entlang der Gefährdungsquoten dargestellt werden, um sowohl relative als auch absolute Risikomessgrößen darzustellen. Ich habe in anderen Studien gesehen, dass solche Inzidenzraten unter Verwendung von Poisson-Modellen mit Nachbeobachtungszeit im Modell als Offset berechnet werden können. Also habe ich das in R wie folgt versucht:

library(survival)

# Get example data
data(colon)
colon$status <- ifelse(colon$etype==1,0,1) # set to 0/1 (needed for poisson later on)

# Fit cox model for rx (age + sex adjusted)
coxph(Surv(time,status)~rx+sex+age, data=colon)
# HR (rxLev): 0.92  
# HR (rxLev+5FU): 0.74

# Get incidence rates using poisson models with same terms and log(time) as offset
mod <- glm(status~offset(log(time))+rx+sex+age, data=colon, family=poisson)

# Get rates using predict-function
Obs <- predict(mod, data.frame(time=1, rx="Obs", age=mean(colon$age),
                                   sex=mean(colon$sex)),  type="response")
Lev <- predict(mod, data.frame(time=1, rx="Lev", age=mean(colon$age), 
                                   sex=mean(colon$sex)),  type="response")
Lev5FU <- predict(mod, data.frame(time=1, rx="Lev+5FU", age=mean(colon$age), 
                                      sex=mean(colon$sex)),  type="response")

# Calculate incidence rate ratio's:
Lev/Obs # 0.98
Lev5FU/Obs # 0.84

Ich würde erwarten, dass die Inzidenzratenquoten den Hazard Ratios des Cox PH-Modells mit denselben Begriffen ähnlich sind, sich aber irgendwie unterscheiden. Benutze ich den richtigen Ansatz zur Berechnung der Inzidenzraten?

Jede Hilfe wäre sehr dankbar!

Antworten:


11

exp(coef(mod))

Die Poisson-Regression geht von konstanten Gefahren aus. Das Cox-Modell geht nur davon aus, dass die Gefahren proportional sind. Wenn die Annahme konstanter Gefahren erfüllt ist, ist diese Frage erfüllt

Hat Cox Regression eine Poisson-Verteilung zugrunde?

erklärt den Zusammenhang zwischen Cox- und Poisson-Regression.

Wir können die Simulation verwenden, um zwei Situationen zu untersuchen: konstante Gefahren und nicht konstante (aber proportionale) Gefahren. Lassen Sie uns zunächst Daten aus einer Population mit konstanter Gefahr simulieren. Die Hazard Ratio hat die Form

λ(t)=λ0exp(βx)

βxλ0Fλ

F(t)=1exp(0tλ(s) ds)

FF1(0,1)F1

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)

Für das Cox-Modell sind die Mittelwerte der Parameterschätzungen

        sex       rxLev   rxLev+5FU         age 
-0.03826301  0.04167353  0.09069553  0.10025534 

und für das Poisson-Modell

(Intercept)         sex       rxLev   rxLev+5FU         age 
-1.23651275 -0.03822161  0.03678366  0.08606452  0.09812454 

Wir sehen, dass dies für beide Modelle nahe an den wahren Werten liegt, wobei wir uns daran erinnern, dass der Unterschied zwischen Männern und Frauen beispielsweise -0,04 betrug und für beide Modelle auf -0,038 geschätzt wird. Dasselbe können wir jetzt mit der nicht konstanten Gefahrenfunktion tun

λ(t)=λ0texp(βx)

Wir simulieren jetzt wie zuvor.

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)

Für das Cox-Modell bekommen wir jetzt

        sex       rxLev   rxLev+5FU         age 
-0.04220381  0.04497241  0.09163522  0.10029121  

und für das Poisson-Modell

(Intercept)         sex       rxLev   rxLev+5FU         age 
-0.12001361 -0.01937333  0.02028097  0.04318946  0.04908300

In dieser Simulation sind die Mittelwerte des Poisson-Modells deutlich weiter von den wahren Werten entfernt als die des Cox-Modells. Dies ist nicht überraschend, da wir gegen die Annahme konstanter Gefahren verstoßen haben.

S

S(t)=exp(αt)

αSS

Geben Sie hier die Bildbeschreibung ein

Diese Funktion sieht konkav aus. Dies beweist nichts, aber es könnte ein Hinweis darauf sein, dass die Annahme konstanter Gefahren für diesen Datensatz nicht erfüllt ist, was wiederum die Diskrepanzen zwischen den beiden Modellen erklären könnte.

colonid

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.