作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试复制图 1 中的 Kaplan Meier 表 here .图为:
这是我写的代码:
# Python code to create the above Kaplan Meier curve
from lifelines import KaplanMeierFitter
import pandas as pd
df = pd.DataFrame({
'T':[0,0,0,0,0,0,2.5,2.5,2.5,2.5,2.5,4,4,4,4,4,5,5,5,6,6],
'E':[0,0,0,0,0,0,1,0,0,0,0,1,1,0,0,0,1,0,0,0,0],
})
## create a kmf object
kmf = KaplanMeierFitter()
## Fit the data into the model
kmf.fit(df['T'], df['E'],label='Kaplan Meier Estimate')
## Create an estimate
kmf.plot(ci_show=False)
我的输出图不同(见比例):
当我打印生存函数时,它是不同的:
Kaplan Meier Estimate
timeline
0.0 1.0000
2.5 0.9375
4.0 0.7500
5.0 0.6000
6.0 0.6000
我想我没有正确地将数据转换为数据帧(可能?)。我试图弄乱数据框,将 1 事件添加到时间范围的开始和结束,但这并不重要。有人可以告诉我如何复制我正在尝试处理的示例吗?
最佳答案
@Arne 的评论是正确的。有 6 个主题,因此 T
和 E
向量中应该只有 6 个元素。回想一下,这些向量的每个元素都是一个主题。 T
表示该对象被观察了多长时间,E
表示对象的“死亡”是否被观察到。
有点相关,您可以使用生命线库中的实用函数将生存表转换为 T、E 向量:
from lifelines.utils import survival_events_from_table
df = pd.DataFrame([
{"observed": 1, "censored": 0, "time": 2.5},
{"observed": 2, "censored": 0, "time": 4.},
{"observed": 1, "censored": 0, "time": 5.},
{"observed": 0, "censored": 2, "time": 6.},
])
df = df.set_index("time")
T, E, W = survival_events_from_table(df)
kmf = KaplanMeierFitter().fit(T, E, weights=W)
kmf.plot()
关于python - 如何将 Pandas 数据框读入卡普兰迈尔曲线?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67291228/
我是一名优秀的程序员,十分优秀!