簡體   English   中英

格式化數據以使用熊貓進行生存分析

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM