首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >scipy.stats.weibull_min.fit() -如何处理右审查数据?

scipy.stats.weibull_min.fit() -如何处理右审查数据?
EN

Stack Overflow用户
提问于 2017-12-14 12:33:03
回答 1查看 1.5K关注 0票数 2

非删失(完整)数据集

我正在尝试使用scipy.stats.weibull_min.fit()函数来拟合一些生活数据。示例生成的数据包含在下面的values中。

代码语言:javascript
运行
复制
values = np.array(
    [10197.8, 3349.0, 15318.6, 142.6, 20683.2, 
    6976.5, 2590.7, 11351.7, 10177.0, 3738.4]
)

我尝试使用以下函数进行拟合:

代码语言:javascript
运行
复制
fit = scipy.stats.weibull_min.fit(values, loc=0)

结果是:

代码语言:javascript
运行
复制
(1.3392877335100251, -277.75467055900197, 9443.6312323849124)

这与名义beta和ETA值1.4%和10000不远。

右删失数据

威布尔分布以其处理右删失数据的能力而闻名。这使得它对可靠性分析非常有用。如何在scipy.stats中处理右审查数据?也就是说,曲线适用于还没有经历过故障数据?

输入表单可能如下所示:

代码语言:javascript
运行
复制
values = np.array(
    [10197.8, 3349.0, 15318.6, 142.6, np.inf, 
    6976.5, 2590.7, 11351.7, 10177.0, 3738.4]
)

或者使用np.nan或简单地使用0

这两个np解决方案都会抛出RunTimeWarning,并且肯定不会接近正确的值。我使用数值--比如0-1 --删除了RunTimeWarning,但是返回的参数明显有缺陷。

其他软件

在一些可靠性或寿命分析软件(minitablifelines)中,需要有两列数据,一列用于实际数字,另一列用于指示项目是否失败。例如:

代码语言:javascript
运行
复制
values = np.array(
    [10197.8, 3349.0, 15318.6, 142.6, 0, 
    6976.5, 2590.7, 11351.7, 10177.0, 3738.4]
)

censored = np.array(
    [True, True, True, True, False,
    True, True, True, True, True]
)

我在文档中看不到这样的路径。

EN

回答 1

Stack Overflow用户

发布于 2021-06-14 16:01:29

老问题,但如果有人遇到这个问题,有一个新的python生存分析包,surpyval,它处理这个问题,以及其他审查和截断的情况。对于您上面提供的示例,它将简单地:

代码语言:javascript
运行
复制
import surpyval as surv
values = np.array([10197.8, 3349.0, 15318.6, 142.6, 6976.5, 2590.7, 11351.7, 10177.0, 3738.4])

# 0 = failed, 1 = right censored
censored = np.array([0, 0, 0, 0, 0, 1, 1, 1, 0])

model = surv.Weibull.fit(values, c=censored)
print(model.params)

(10584.005910580288, 1.038163987652635)

您可能还会对威布尔图感兴趣:

代码语言:javascript
运行
复制
model.plot(plot_bounds=False)

Weibull plot

完全公开,我是surpyval的创建者

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/47805978

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档