#python #pandas #scikit-survival
Вопрос:
Я пытаюсь запустить кривую выживаемости для полевых данных, и полученная кривая явно неверна. При последней полевой оценке выживаемость должна быть такой:
Юта: 0,5505464480874317
Гребень: 0,10817941952506596
Кактусовая шахта: 0,22146739130434784
Амаргоза: 0,005361930294906166
Вот код, который я использовал для генерации вышеуказанных чисел:
print('Utah:', UT['Garden'].loc[(UT['dummy']==True)amp;(UT['period']==5)].count() / UT['Garden'].loc[UT['period']==5].count())
print('Ridgecrest:', RC['Garden'].loc[(RC['dummy']==True)amp;(RC['period']==5)].count() / RC['Garden'].loc[RC['period']==5].count())
print('Cactus Mine:', CM['Garden'].loc[(CM['dummy']==True)amp;(CM['period']==5)].count() / CM['Garden'].loc[CM['period']==5].count())
print('Amargosa:', AM['Garden'].loc[(AM['dummy']==True)amp;(AM['period']==5)].count() / AM['Garden'].loc[AM['period']==5].count())
точка-это столбец оценки, фиктивная-это моя фиктивная колонка для живых/мертвых
Тем не менее, графики показывают, что Юта является худшим участком, а Амаргоза-лучшим: кривая выживаемости со всеми садами за 5 периодов оценки
Я попытался создать этот график как с помощью пакета scikit, так и с помощью пакета lifelines, и оба дали один и тот же результат. Что я делаю не так?
код scikit:
for value in df2["Garden"].unique():
mask = df2["Garden"] == value
time_cell, survival_prob_cell = kaplan_meier_estimator(df2["dummy"][mask],
df2["doyr"][mask])
plt.step(time_cell, survival_prob_cell, where="post",
label="%s (n = %d)" % (value, mask.sum()))
plt.ylabel("est. probability of survival $hat{S}(t)$")
plt.xlabel("time $t$")
plt.legend(loc="best")
код линий жизни:
kmf = KaplanMeierFitter()
X= df2['period'].loc[df2['Garden']=='Utah']
Y= df2['period'].loc[df2['Garden']=='Utah']
kmf.fit(X, event_observed = Y)
kmf.plot()
plt.title("Kaplan Meier estimates")
plt.xlabel("Time")
plt.ylabel("Survival")
plt.show()
и кривая выживаемости общих данных линий жизни, где выживаемость по какой-то причине равна 0 при последней оценке.