treatment time failure
37 1 12 1
38 1 15 1
39 1 17 1
40 1 22 1
41 1 23 1
In [36]:
data = data.dropna()
print data.head()
   treatment  time  failure
0          2     6        1
1          2     6        1
2          2     6        1
3          2     6        0
4          2     7        1
In [37]:
treatment = data['treatment'] == 2
In [38]:
T = data['time']
E = data['failure']
t = np.linspace(0,40,150)
In [39]:
kmf = KaplanMeierFitter()
kmf.fit(T[treatment], timeline=t, event_observed=E[treatment], label='With treatment')
ax = kmf.plot()

kmf.fit(T[~treatment], timeline=t, event_observed=E[~treatment], label="Without treatment")
kmf.plot(ax=ax)
ylim(0,1.05)
Out[39]:
(0, 1.05)

Hazards, too

In [40]:
naf = NelsonAalenFitter()
In [41]:
naf.fit(T[treatment],timeline=t, event_observed=E[treatment], label="With treatment")
ax = naf.cumulative_hazard_.plot()
naf.fit(T[~treatment], timeline=t, event_observed=E[~treatment], label="Without treatment")
ax = naf.cumulative_hazard_.plot(ax=ax)

Try regression models

In [42]:
from lifelines import AalenAdditiveFitter
In [43]:
aaf = AalenAdditiveFitter()
aaf.fit(data, duration_col='time', event_col='failure', timeline=t)
 [-----------------100%-----------------] 30 of 30 complete in 0.0 sec
Out[43]:
<lifelines.AalenAdditiveFitter: fitted with 42 observations, 12 censored>
In [49]:
aaf.plot()
Out[49]:
<matplotlib.axes._subplots.AxesSubplot at 0x111606790>
In [45]:
from lifelines import CoxPHFitter
In [46]:
cp = CoxPHFitter()
cp.fit(data, duration_col='time', event_col='failure')
Out[46]:
<lifelines.CoxPHFitter: fitted with 42 observations, 12 censored>
In [47]:
cp.print_summary()
n=42, number of events=30

             coef  exp(coef)  se(coef)       z      p  lower 0.95  upper 0.95     
treatment -1.5092     0.2211    0.4096 -3.6849 0.0002     -2.3121     -0.7063  ***
---
Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1 

Concordance = 0.690