Python提供了一個簡單而強大的生存分析包——lifelines,可以非常方便的進行應用孽椰。這篇文章將為大家簡單介紹這個包的安裝和使用。
安裝
lifelines支持用pip的方法進行安裝,您可以使用以下命令進行一鍵安裝:
pip install lifelines
使用簡介
在python中框杜,可以利用lifelines進行累計生存曲線的繪制蝶押、Log Rank test踱蠢、Cox回歸等。下面以lifelines包中自帶的測試數(shù)據(jù)進行一個簡單的示例棋电。
一茎截、繪制S(t)
首先加載和使用自帶的數(shù)據(jù)集:
from lifelines.datasets import load_waltons
from lifelines import KaplanMeierFitter
from lifelines.utils import median_survival_times
df = load_waltons()
print(df.head(),'\n')
print(df['T'].min(), df['T'].max(),'\n')
print(df['E'].value_counts(),'\n')
print(df['group'].value_counts(),'\n')
運行一下將會看到以下結(jié)果,
數(shù)據(jù)有三列赶盔,其中T代表min(T, C)企锌,其中T為死亡時間,C為觀測截止時間于未。E代表是否觀到“死亡”撕攒,1代表觀測到了陡鹃,0代表未觀測到,即生存分析中的刪失數(shù)據(jù)抖坪,共7個萍鲸。 group代表是否存在病毒, miR-137代表存在病毒擦俐,control代表為不存在即對照組脊阴,根據(jù)統(tǒng)計,存在miR-137病毒人數(shù)34人蚯瞧,不存在129人嘿期。
利用此數(shù)據(jù)取擬合擬生存分析中的Kaplan Meier模型(專用于估計生存函數(shù)的模型),并繪制全體人群的生存曲線埋合。
kmf = KaplanMeierFitter()
kmf.fit(df['T'], event_observed=df['E'])
kmf.plot_survival_function()
median_ = kmf.median_survival_time_
median_confidence_interval_ = median_survival_times(kmf.confidence_interval_)
print(median_confidence_interval_)
圖中藍色實線為生存曲線秽五,淺藍色帶代表了95%置信區(qū)間。隨著時間增加饥悴,存活概率S(t)越來越小坦喘,這是一定的,同時S(t)=0.5時西设,t的95%置信區(qū)間為[53, 58]瓣铣。這并不是我們關(guān)注的重點,我們真正要關(guān)注的實驗組(存在病毒)和對照組(未存在病毒)的生存曲線差異贷揽。因此我們要按照group等于“miR-137”和“control”分組棠笑,分別觀察對應的生存曲線:
groups = df['group']
ix = (groups == 'miR-137')
kmf.fit(df['T'][ix], df['E'][ix], label='miR-137')
ax = kmf.plot()
treatment_median_confidence_interval_ = median_survival_times(kmf.confidence_interval_)
print("帶有miR-137病毒存活50%對應的存活時間95%置信區(qū)間:'\n'", treatment_median_confidence_interval_, '\n')
kmf.fit(df['T'][~ix], df['E'][~ix], label='control')
#共享一個畫布
ax = kmf.plot(ax=ax)
control_median_confidence_interval_ = median_survival_times(kmf.confidence_interval_)
print("未帶有miR-137病毒存活50%對應的存活時間95%置信區(qū)間:'\n'", control_median_confidence_interval_)
可以看到,帶有miR-137病毒的生存曲線在control組下方禽绪。說明其平均存活時間明顯小于control組蓖救。同時帶有miR-137病毒存活50%對應的存活時間95%置信區(qū)間為[19,29],對應的control組為[56,60]印屁。差異較大循捺,這個方法可以應用在分析用戶流失等場景,比如我們對一組人群實行了一些防止流行活動雄人,我們可以通過此種方式分析我們活動是否有效从橘。
二、cox回歸
該模型以生存結(jié)局和生存時間為應變量础钠,可同時分析眾多因素對生存期的影響恰力,能分析帶有截尾生存時間的資料,且不要求估計資料的生存分布類型旗吁。
對于回歸模型的假設(shè)檢驗通常采用似然比檢驗踩萎、Wald檢驗和記分檢驗,其檢驗統(tǒng)計量均服從卡方分布很钓。香府,其自由度為模型中待檢驗的自變量個數(shù)翻具。一般說來,Cox回歸系數(shù)的估計和模型的假設(shè)檢驗計算量較大回还,通常需利用計算機來完成相應的計算
通常存活時間與多種因素都存在關(guān)聯(lián)裆泳,因此我們的面臨的數(shù)據(jù)是多維的。下面使用一個更復雜的數(shù)據(jù)集柠硕。首先仍然是導入和使用示例數(shù)據(jù)工禾。
from lifelines.datasets import load_regression_dataset
from lifelines import CoxPHFitter
regression_dataset = load_regression_dataset()
print(regression_dataset.head())
print(regression_dataset['E'].value_counts())
[圖片上傳中...(24515569-a5987d05b5e05a26.png-4ed038-1600008755271-0)]
其中T代表min(T, C),其中T為死亡時間蝗柔,C為觀測截止時間闻葵。E代表是否觀察到“死亡”,1代表觀測到了癣丧,0代表未觀測到槽畔,即生存分析中的“刪失”數(shù)據(jù),刪失數(shù)據(jù)共11個胁编。var1,var2,var3代表了我們關(guān)系的變量厢钧,可以是是否為實驗組的虛擬變量,可以是一個用戶的渠道路徑嬉橙,也可以是用戶自身的屬性早直。
我們利用此數(shù)據(jù)進行Cox回歸
cph = CoxPHFitter()
cph.fit(regression_dataset, 'T', event_col='E')
cph.print_summary()
從結(jié)果來看,我們認為var1和var3在5%的顯著性水平下是顯著的市框。認為var1水平越高霞扬,用戶的風險函數(shù)值越大,即存活時間越短(cox回歸是對風險函數(shù)建模枫振,這與死亡加速模型剛好相反喻圃,死亡加速模型是對存活時間建模,兩個模型的參數(shù)符號相反)粪滤。同理斧拍,var3水平越高,用戶的風險函數(shù)值越大额衙。
文檔與更多資料
英文文檔:https://lifelines.readthedocs.io/en/latest/index.html
中文文檔:https://www.cnpython.com/pypi/lifelines
應用案例:https://www.pianshen.com/article/6276265616/
應用案例:https://zhuanlan.zhihu.com/p/56230746