1

我正在尝试为现场数据运行生存曲线,结果曲线显然不正确。在最后一次现场评估中,幸存者应该是这样的:

犹他州:0.5505464480874317

里奇克莱斯特:0.10817941952506596

仙人掌矿:0.22146739130434784

阿马戈萨:0.005361930294906166

这是我用来生成上述数字的代码:

print('Utah:', UT['Garden'].loc[(UT['dummy']==True)&(UT['period']==5)].count() / UT['Garden'].loc[UT['period']==5].count())
print('Ridgecrest:', RC['Garden'].loc[(RC['dummy']==True)&(RC['period']==5)].count() / RC['Garden'].loc[RC['period']==5].count())
print('Cactus Mine:', CM['Garden'].loc[(CM['dummy']==True)&(CM['period']==5)].count() / CM['Garden'].loc[CM['period']==5].count())
print('Amargosa:', AM['Garden'].loc[(AM['dummy']==True)&(AM['period']==5)].count() / AM['Garden'].loc[AM['period']==5].count())

period 是评估栏,dummy 是我的alive/dead 虚拟栏

然而,图表显示犹他州是最差的地点,而阿马戈萨是最好的: 所有花园在 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。

生命线生存曲线

4

0 回答 0