用Python做生存分析--lifelines庫簡介

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é)果,


運行結(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_)
運行結(jié)果

圖中藍色實線為生存曲線秽五,淺藍色帶代表了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_)
運行結(jié)果

可以看到,帶有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())
運行結(jié)果

[圖片上傳中...(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é)果

從結(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

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末饮焦,一起剝皮案震驚了整個濱河市怕吴,隨后出現(xiàn)的幾起案子窍侧,更是在濱河造成了極大的恐慌,老刑警劉巖转绷,帶你破解...
    沈念sama閱讀 221,548評論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件伟件,死亡現(xiàn)場離奇詭異,居然都是意外死亡议经,警方通過查閱死者的電腦和手機斧账,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,497評論 3 399
  • 文/潘曉璐 我一進店門谴返,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人咧织,你說我怎么就攤上這事嗓袱。” “怎么了习绢?”我有些...
    開封第一講書人閱讀 167,990評論 0 360
  • 文/不壞的土叔 我叫張陵渠抹,是天一觀的道長。 經(jīng)常有香客問我闪萄,道長梧却,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 59,618評論 1 296
  • 正文 為了忘掉前任败去,我火速辦了婚禮放航,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘圆裕。我一直安慰自己广鳍,他們只是感情好,可當我...
    茶點故事閱讀 68,618評論 6 397
  • 文/花漫 我一把揭開白布吓妆。 她就那樣靜靜地躺著搜锰,像睡著了一般。 火紅的嫁衣襯著肌膚如雪耿战。 梳的紋絲不亂的頭發(fā)上蛋叼,一...
    開封第一講書人閱讀 52,246評論 1 308
  • 那天,我揣著相機與錄音剂陡,去河邊找鬼狈涮。 笑死,一個胖子當著我的面吹牛鸭栖,可吹牛的內(nèi)容都是我干的歌馍。 我是一名探鬼主播,決...
    沈念sama閱讀 40,819評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼晕鹊,長吁一口氣:“原來是場噩夢啊……” “哼松却!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起溅话,我...
    開封第一講書人閱讀 39,725評論 0 276
  • 序言:老撾萬榮一對情侶失蹤晓锻,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后飞几,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體砚哆,經(jīng)...
    沈念sama閱讀 46,268評論 1 320
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,356評論 3 340
  • 正文 我和宋清朗相戀三年屑墨,在試婚紗的時候發(fā)現(xiàn)自己被綠了躁锁。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片纷铣。...
    茶點故事閱讀 40,488評論 1 352
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖战转,靈堂內(nèi)的尸體忽然破棺而出搜立,到底是詐尸還是另有隱情,我是刑警寧澤槐秧,帶...
    沈念sama閱讀 36,181評論 5 350
  • 正文 年R本政府宣布儒拂,位于F島的核電站,受9級特大地震影響色鸳,放射性物質(zhì)發(fā)生泄漏社痛。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,862評論 3 333
  • 文/蒙蒙 一命雀、第九天 我趴在偏房一處隱蔽的房頂上張望蒜哀。 院中可真熱鬧,春花似錦吏砂、人聲如沸撵儿。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,331評論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽淀歇。三九已至,卻和暖如春匈织,著一層夾襖步出監(jiān)牢的瞬間浪默,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,445評論 1 272
  • 我被黑心中介騙來泰國打工缀匕, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留纳决,地道東北人。 一個月前我還...
    沈念sama閱讀 48,897評論 3 376
  • 正文 我出身青樓乡小,卻偏偏與公主長得像阔加,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子满钟,可洞房花燭夜當晚...
    茶點故事閱讀 45,500評論 2 359