预测失效时间/威布尔分析

机器算法验证 生存 威布尔分布
2022-04-10 20:57:27

假设我想预测未来三年有多少台机器会发生故障。收集的数据以天为单位,所以我们想预测没有。在接下来的 1095 天内失败。

所有机器(其中 100 台)都是从 1975 年开始生产的,直到今天,只有 13 台出现故障。现在,我想预测未来三年有多少人会倒闭。

在我看来,我遇到的一些问题:

  1. 理想情况下,我们有固定的时间在这些机器上运行测试,但在这种情况下,我们没有固定的时间。我可以假设今天的日期为最终日期,即我的测试时间间隔是[1975,今天的日期]

  2. 所以,我必须把所有其他没有失败的机器作为审查观察。

  3. 但是当我这样做时,我相信,数据并没有遵循 Weibull 分布,这是分析故障时间的标准过程(Weibull 分析)。

  4. 我们是否有足够的数据来提出合适的模型?如果这是我们必须处理的,我们该怎么做呢?

  5. 对于这种情况,我们是否仍然可以使用 Weibull 分析方法,并估计尺度和形状参数并使用它来找到预期的编号。失败次数由:

           N(t)=(1-e^(t/a)^b)n
    

其中a是尺度参数,b是形状参数;n是在同一时间 t=0 开始连续运行的机器数量


以下是一些任意故障时间(由于保密问题,我无法共享数据):

10162, 8300, 11110, 11520, 11520, 8460, 7320, 11424, 11112, 11321, 11584, 10436, 9560

这些是从 1975 年 1 月 1 日开始的几天内给出的。这些机器经久耐用,因此看到这种最小故障率并不少见。

1个回答

生存分析的精度通常受到事件数量的限制。一个经验法则是,每个要拟合的参数大约需要 15 个事件;您只有 13 个事件,而 Weibull(和许多参数生存模型)有 2 个参数。我不确定是否有足够的事件来排除 Weibull 分发,但 R 包中提供了许多其他分发系列survivalflexsurv您可以尝试,这些包还允许您定义自己的分发。

可以用您提供的 13 次故障时间的 Weibull 模型来说明从如此少的事件进行推断的问题。在最后一个事件时间(11584 天)审查其他 87 个案例,将数据放在一个数据框中,并使用flexsurv包进行拟合和绘图,得到以下结果:

ftimes <- c(10162, 8300, 11110, 11520, 11520, 8460, 7320, 11424, 11112, 11321, 11584, 10436, 9560)
allTimes <- c(ftimes,rep(11584,87))
events <- c(rep(1,13),rep(0,87))
failDF <- data.frame(time=allTimes,event=events)
library(flexsurv)
weiFit <- flexsurvreg(Surv(time,event)~1,data=failDF,dist="weibull")
plot(weiFit,t=seq(6000,15000,length.out=100),xlim=c(6000,15000),bty="n",xlab="Days",ylab="Survivl Probability")
abline(v=12679)

威布尔生存估计

这将 Weibull 拟合及其 95% 置信区间(红色)叠加在观测值的 Kaplan-Meier 图(黑色)上。垂直线是最后一个事件时间后 1095 天的预测时间。当时的生存点估计值为 75%(或当时仍在使用的 100 个原始设备中的 75 个),但 95% 的置信区间涵盖了大约 40% 到 84% 的范围。

因此,您可能会估计在接下来的 1095 天内会再损失 12 个单位,但合理的情况可能少至多 3 个,多至多 47 个。我玩过其他一些分布(gamma、lognormal、loglogistic);Weibull 是其中最保守的,置信区间最宽。