[英]Format data for survival analysis using pandas
我正在嘗試找出將生存分析數據轉換為允許時變協變量的格式的最快方法。 基本上,這將是Stata中stsplit
的python實現。 舉一個簡單的例子,帶有以下信息:
id start end x1 x2 exit
1 0 18 12 11 1
這告訴我們觀察在時間0開始,在時間18結束。退出告訴我們這是“死亡”而不是正確的檢查。 x1和x2是隨時間不變的變量。
id t age
1 0 30
1 7 40
1 17 50
我想得到:
id start end x1 x2 exit age
1 0 7 12 11 0 30
1 7 17 12 11 0 40
1 17 18 12 11 1 50
最后退出僅是1,表示t = 18是死亡發生的時間。
假設:
>>> df1
id start end x1 x2 exit
0 1 0 18 12 11 1
和:
>>> df2
id t age
0 1 0 30
1 1 7 40
2 1 17 50
你可以做:
df = df2.copy() # start with df2
df['x1'] = df1.ix[0, 'x1'] # x1 column
df['x2'] = df1.ix[0, 'x2'] # x2 column
df.rename(columns={'t': 'start'}, inplace=True) # start column
df['end'] = df['start'].shift(-1) # end column
df.ix[len(df)-1, 'end'] = df1.ix[0, 'end']
df['exit'] = 0 # exit column
df.ix[len(df)-1, 'exit'] = 1
df = df[['id', 'start', 'end', 'x1', 'x2', 'exit', 'age']] # reorder columns
輸出:
>>> df
id start end x1 x2 exit age
0 1 0 7 12 11 0 30
1 1 7 17 12 11 0 40
2 1 17 18 12 11 1 50
這可以通過生命線 (尤其是add_covariate_to_timeline
函數)實現, 例如此處 。 該函數非常靈活,可以執行諸如累積和之類的操作。
對於上面的示例:
"""
id start end x1 x2 exit
1 0 18 12 11 1
"""
long_df = pd.DataFrame([
{'id': 1, 'start': 0, 'end': 18, 'x1': 12, 'x2': 11, 'exit': 1}
])
"""
id t age
1 0 30
1 7 40
1 17 50
"""
tv_covariates = pd.DataFrame([
{'id': 1, 't': 0, 'age': 30},
{'id': 1, 't': 7, 'age': 40},
{'id': 1, 't': 17, 'age': 50},
])
from lifelines.utils import add_covariate_to_timeline
add_covariate_to_timeline(long_df, tv_covariates, id_col='id', duration_col='t', event_col='exit', start_col='start', stop_col='end')
"""
start age x1 x2 end id exit
0 0 30 12.0 11.0 7.0 1 False
1 7 40 12.0 11.0 17.0 1 False
2 17 50 12.0 11.0 18.0 1 True
"""
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.