三分鐘教你入門生存分析之Cox比例風(fēng)險(xiǎn)模型
Cox比例風(fēng)險(xiǎn)模型(Cox proportional hazards model)是一種常用的生存分析方法,用于評(píng)估不同變量對(duì)于生存時(shí)間的預(yù)測(cè)能力。它是由David Cox于1972年首次提出的。Cox比例風(fēng)險(xiǎn)模型在生物信息學(xué)中有廣泛的應(yīng)用,主要用于生存分析和預(yù)測(cè)。在生存分析中,Cox比例風(fēng)險(xiǎn)模型可以用于評(píng)估不同基因或其他生物學(xué)因素對(duì)生存時(shí)間的影響。例如,對(duì)于癌癥研究,研究人員可以使用Cox比例風(fēng)險(xiǎn)模型來(lái)探索不同基因表達(dá)水平與癌癥患者生存時(shí)間的關(guān)系,并識(shí)別與生存時(shí)間相關(guān)的預(yù)測(cè)因子。此外,Cox比例風(fēng)險(xiǎn)模型還可以用于基于基因表達(dá)數(shù)據(jù)進(jìn)行生存預(yù)測(cè)。例如,在腫瘤研究中,研究人員可以根據(jù)某些基因的表達(dá)水平,使用Cox比例風(fēng)險(xiǎn)模型來(lái)預(yù)測(cè)患者未來(lái)的生存時(shí)間,并評(píng)估不同基因?qū)︻A(yù)測(cè)能力的貢獻(xiàn)。這種方法可以幫助醫(yī)生為患者制定個(gè)性化的治療方案,提高治療效果。在生物信息學(xué)中,Cox比例風(fēng)險(xiǎn)模型通常與高通量數(shù)據(jù)分析方法相結(jié)合,如基因芯片、RNA測(cè)序等,可以進(jìn)一步提高生存分析和預(yù)測(cè)的準(zhǔn)確性和可靠性。
Cox比例風(fēng)險(xiǎn)模型基于風(fēng)險(xiǎn)比(hazard ratio)的概念,即不同個(gè)體之間生存時(shí)間的比較。它假設(shè)生存時(shí)間是由兩個(gè)部分組成:基準(zhǔn)風(fēng)險(xiǎn)(baseline hazard)和可調(diào)整風(fēng)險(xiǎn)(adjustable hazard)。其中,基準(zhǔn)風(fēng)險(xiǎn)是所有個(gè)體都具有的風(fēng)險(xiǎn),可以看作未受到任何影響的基礎(chǔ)風(fēng)險(xiǎn);可調(diào)整風(fēng)險(xiǎn)是個(gè)體之間不同的風(fēng)險(xiǎn),可以由一些可調(diào)整的協(xié)變量(covariates)解釋。
Cox比例風(fēng)險(xiǎn)模型的基本形式為:
h(t|X) = h0(t) * exp(Xβ)
其中,h(t|X)是在給定協(xié)變量X的條件下,時(shí)間t的風(fēng)險(xiǎn)比;h0(t)是時(shí)間t的基準(zhǔn)風(fēng)險(xiǎn);exp(Xβ)是可調(diào)整風(fēng)險(xiǎn)的比率,也稱為協(xié)變量的風(fēng)險(xiǎn)比(hazard ratio);X是協(xié)變量的矩陣;β是協(xié)變量的系數(shù)向量。Cox比例風(fēng)險(xiǎn)模型的核心假設(shè)是協(xié)變量的風(fēng)險(xiǎn)比在時(shí)間軸上是恒定的,即不隨時(shí)間變化。
那么現(xiàn)在就讓小云帶大家一起在R中實(shí)踐一下吧~
我們可以先對(duì)數(shù)據(jù)做一些可視化,以檢視得出的結(jié)果和直觀上的數(shù)據(jù)是否一致
比如,通過(guò)小提琴圖觀察X1在不同status下的分布情況
ggplot(d, aes(x = factor(status), y = X1)) +
??geom_violin() +
??geom_boxplot(width = 0.1, fill = "white") +
??labs(title = "Distribution of Age by Status", x = "Status", y = "X1")

繪制散點(diǎn)圖,顯示X2和生存時(shí)間的關(guān)系
ggplot(d, aes(x = X2, y = time)) +
??geom_point() +
??geom_smooth(method = "lm", se = FALSE, color = "red") +
??labs(title = "X2 vs. Survival Time", x = "X2", y = "Survival Time")

## 載入相關(guān)的工具包:
library(rms)
library(riskRegression)
library(survival)
?
## 使用 prodlim 包生成生存數(shù)據(jù)
set.seed(100)
d <- SimSurv(100)
?
## 構(gòu)建Cox回歸模型并計(jì)算預(yù)測(cè)生存概率
coxmodel <- cph(Surv(time, status) ~ X1 + X2, data = d, surv = TRUE)
coxmodel

這個(gè)結(jié)果中的模型系數(shù)表示自變量對(duì)生存率的影響,系數(shù)越大表示影響越大,系數(shù)為正表示該變量與生存率正相關(guān),系數(shù)為負(fù)表示該變量與生存率負(fù)相關(guān)。當(dāng)模型系數(shù)顯著時(shí),P值通常小于0.05,表示變量對(duì)生存率的影響是顯著的;當(dāng)模型系數(shù)不顯著時(shí),P值通常大于0.05,表示變量對(duì)生存率的影響是不顯著的。
## 提取在選定時(shí)間點(diǎn)的預(yù)測(cè)生存概率
ttt <- quantile(d$time)
ndat <- data.frame(X1 = c(0.25, 0.25, -0.05, 0.05), X2 = c(0, 1, 0, 1))
predictSurvProb(coxmodel, newdata = ndat, times = ttt)
?
首先使用quantile()函數(shù)計(jì)算原始數(shù)據(jù)集d中生存時(shí)間變量time的5個(gè)分位數(shù),將結(jié)果存儲(chǔ)在向量ttt中。然后,創(chuàng)建一個(gè)新的數(shù)據(jù)框ndat,其中包含兩個(gè)自變量X1和X2,每個(gè)自變量有4個(gè)不同的取值。接著,使用predictSurvProb()函數(shù)對(duì)ndat進(jìn)行生存概率預(yù)測(cè),其中coxmodel是先前擬合的Cox回歸模型,newdata = ndat表示對(duì)ndat中的數(shù)據(jù)進(jìn)行預(yù)測(cè),times = ttt表示計(jì)算在5個(gè)分位數(shù)時(shí)間點(diǎn)下的生存概率。最終,函數(shù)將預(yù)測(cè)結(jié)果輸出到一個(gè)矩陣中,其中每一行表示一個(gè)樣本在不同時(shí)間點(diǎn)下的生存概率預(yù)測(cè)值。

在Cox比例風(fēng)險(xiǎn)模型中,常常存在某些自變量的效應(yīng)可能與風(fēng)險(xiǎn)群體有關(guān),即不同風(fēng)險(xiǎn)群體可能具有不同的自變量效應(yīng)。例如,在一個(gè)研究中,我們發(fā)現(xiàn)X1在不同年齡段的患者中可能具有不同的影響,因此我們需要根據(jù)年齡將樣本分為不同的群體,然后在每個(gè)群體中分別擬合Cox模型。
在這種情況下,我們可以使用strata()函數(shù)來(lái)實(shí)現(xiàn)分層。strata()函數(shù)將可以被用于為Cox模型中的自變量指定分層,這樣就可以在每個(gè)分層中分別擬合Cox模型。在這里,我們將X1變量作為分層變量,即將數(shù)據(jù)集中的樣本按照X1變量的不同取值分成不同的組,然后在每個(gè)組中擬合Cox模型,以便更好地捕捉X1變量的影響。
sfit <- coxph(Surv(time, status) ~ strata(X1) + X2, data = d, , x = TRUE, y = TRUE)
summary(sfit)

predictSurvProb(sfit, newdata = d[1:3, ], times = c(1, 3, 5, 10))

使用predictSurvProb()函數(shù)對(duì)數(shù)據(jù)集d中的前3個(gè)觀測(cè)值進(jìn)行生存概率預(yù)測(cè),其中newdata = d[1:3, ]表示對(duì)數(shù)據(jù)集d中的前3個(gè)觀測(cè)值進(jìn)行預(yù)測(cè),times = c(1, 3, 5, 10)表示預(yù)測(cè)在1、3、5和10個(gè)時(shí)間點(diǎn)下的生存概率。
## 使用plot()函數(shù)對(duì)生存曲線進(jìn)行可視化
sfit <- survfit(sfit)
plot(sfit, col=c("red", "blue"), main="Survival Curve", xlab="Time", ylab="Survival Probability")

?
還可以繪制森林圖:森林圖是一種用于顯示 Cox 回歸模型中各個(gè)變量的系數(shù)和置信區(qū)間的可視化方法。它通常用于顯示多個(gè)變量的結(jié)果,并將它們按照重要性排序。
coxm <- coxph(Surv(time, status) ~ X1 + X2, data = d)
library(ggplot2)
library(forestmodel)
forest_model(coxm,
?????????????theme = theme_forest(),
?????????????factor_separate_line=TRUE

這就是Cox比例風(fēng)險(xiǎn)模型的應(yīng)用過(guò)程啦~大家學(xué)會(huì)了嗎~有疑問(wèn)的小伙伴歡迎留言和小云交流哦~
更多方便實(shí)用的小工具在云生信平臺(tái)等著大家哦!
http://www.biocloudservice.com/home.html

