主要内容

检测信号的爆发和重大变化

这个例子展示了如何通过累积和和变点检测来确定信号的变化或突变。

通过累积总和检测爆发

在许多实际应用程序中,您正在监视数据,并且希望在底层流程发生更改时尽快得到警报。一种非常流行的实现方法是使用累积和(CUSUM)控制图。

为了说明CUSUM是如何工作的,首先检查2014年西非埃博拉疫情的报告病例总数疾病控制和预防中心

负载WestAfricanEbolaOutbreak2014plot(WHOreportdate, [TotalCasesGuinea TotalCasesLiberia TotalCasesSierraLeone],“。”)传说(几内亚的利比里亚的“狮子山”)标题(“埃博拉病毒疾病疑似、可能和确诊病例总数”

图中包含一个坐标轴。标题为“埃博拉病毒病总疑似病例、疑似病例和确诊病例”的坐标轴包含3个类型线对象。这些物体代表几内亚,利比里亚,塞拉利昂。

如果你看看几内亚第一次疫情的前沿,你会发现第100个病例是在2014年3月25日左右报告的,之后显著增加。值得注意的是,尽管利比里亚在3月份也出现了一些疑似病例,但直到大约30天后,病例数量才相对得到控制。

从2015年3月25日发病开始,绘制总病例数的相对日变化图,以了解新患者的入院率。

daysSinceOutbreak = datetime(2014, 3,24 +(0:400));病例= interp1(WHOreportdate, TotalCasesLiberia, daysSinceOutbreak);dayOverDayCases = diff(例);情节(dayOverDayCases)标题(“2014年3月25日以来利比里亚每日新增病例数”);ylabel (“每日报告个案数目的变化”);包含(“从爆发开始算起的天数”);

图中包含一个坐标轴。标题为“2014年3月25日以来利比里亚新增病例率(每天)”的坐标轴包含一个类型线对象。

如果你放大头100天的数据,你可以看到,虽然最初有大量病例涌入,但许多病例在第30天之后就被排除了,当时的变化率暂时降至零以下。从第95天到第100天,你还可以看到一个显著的上升趋势,每天达到7个新病例。

xlim(101年[1])

图中包含一个坐标轴。标题为“2014年3月25日以来利比里亚新增病例率(每天)”的坐标轴包含一个类型线对象。

对输入数据执行CUSUM测试可以快速确定何时爆发。CUSUM跟踪两个累积和:上和检测局部均值何时向上移动,下和检测均值何时向下移动。集成技术为CUSUM提供了忽略传入速率中的大(瞬态)尖峰的能力,但仍对稳定的较小速率变化具有敏感性。

使用默认参数调用CUSUM将检查前25个样本的数据,并在遇到与初始数据之间的平均偏差超过5个标准差时发出警报。

cusum (dayOverDayCases(1:10 1)传说(“上金额”和较低的

图中包含一个坐标轴。标题为CUSUM Control Chart \mu_{target} = 1.080000 \sigma_{target} = 1.629734的轴包含6个类型为line的对象。这些对象表示上和,下和。

请注意,CUSUM在第30天(第33天)发现了假报告病例,并在第80天(第90天)发现了疫情的最初爆发。如果你将这些结果与之前的图表仔细比较,你可以看到CUSUM能够忽略第29天的虚假上升,但仍然在从第95天开始的大幅上升趋势的5天前触发警报。

如果调整CUSUM,使其目标均值为每天零病例,目标为每天正负3例,则可以忽略第30天的假警报,并在第92天发现疫情:

climit = 5;mshift = 1;tmean = 0;tdev = 3;cusum (dayOverDayCases(1:10 0)、climit mshift, tmean, tdev)

图中包含一个坐标轴。标题为CUSUM Control Chart \mu_{target} = 0.000000 \sigma_{target} = 3.000000的轴包含5个类型为line的对象。

发现显著的方差变化

另一种检测统计量突变的方法是通过变点检测,它将信号分割成相邻的段,每个段中的统计量(如均值、方差、斜率等)是恒定的。

下一个例子分析了在开罗附近的罗达测量仪测量的公元622年到1281年尼罗河每年的最低水位。

负载水位计年= 622:1284;情节(年,nileriverminima)标题(“尼罗河每年最低水位”)包含(“年”) ylabel (“水平(m)”

图中包含一个坐标轴。以尼罗河年最低水位为标题的坐标轴包含一个线型对象。

大约在公元715年,一种更新更精确的测量设备开始建造。在此之前我们知道的不多,但在进一步的检查中,你可以看到在722年前后的可变性大大减少。为了找到新设备开始运行的时间段,您可以在进行元素微分后寻找均方根水位的最佳变化,以消除任何缓慢变化的趋势。

我= findchangepts (diff (nileriverminima),“统计”“rms”);甘氨胆酸ax =;Xp = [year (i) ax。XLim(2[2])年(我)];yp = ax。[1 1 2 2];补丁(xp, yp,[。5。5。5),“FaceAlpha”, 0.1)

图中包含一个坐标轴。标题为尼罗河年最低水位的坐标轴包含线型、斑块型2个对象。

虽然抽样区分是一种简单的方法,以消除趋势,还有其他更复杂的方法,以检查方差在更大的尺度。有关如何使用此数据集通过小波执行更改点检测的示例,请参见小波Changepoint检测(小波工具箱)

检测输入信号中的多个变化

下一个例子是关于一个CR-CR 4速传输块的45秒模拟,采样间隔为1毫秒。汽车发动机转速和扭矩的仿真数据如下图所示。

负载simcarsig次要情节(2,1,2)情节(carTorqueNM)包含(“样本”) ylabel (“转矩(N m)”)标题(“扭矩”次要情节(2,1,1);情节(carEngineRPM)包含(“样本”) ylabel (“速度(RPM)”)标题(发动机转速的

图中包含2个轴。标题为Torque的轴1包含一个类型为line的对象。标题为“引擎速度”的轴2包含一个类型为line的对象。

在这里,汽车加速,换挡三次,切换到空挡,然后踩刹车。

因为引擎速度可以自然地被建模为一系列的线性部分,你可以使用findchangepts找到汽车换挡的样本。

图findchangepts (carEngineRPM,“统计”“线性”“MaxNumChanges”(4)包含“样本”) ylabel (“发动机转速(RPM)”

图中包含一个坐标轴。标题为changepoints Number = 4 Total residual error = 342535085.7709的轴包含3个line类型的对象。

这里你可以看到4个变化(在5个线段之间),它们发生在10,000、20,000、30,000和40,000样本标记附近。放大到波形的空闲部分:

xlim(22000年[18000])

图中包含一个坐标轴。标题为changepoints Number = 4 Total residual error = 342535085.7709的轴包含3个line类型的对象。

直线拟合紧密地跟踪输入波形。然而,适合度还可以进一步提高。

观察信号之间共享的多阶段事件的变化

为了观察改进,将换挡点的数量增加到20个,并观察在样本数量为19000时换挡点附近的变化

findchangepts (carEngineRPM“统计”“线性”“MaxNumChanges”, 20) xlim(22000年[18000])

图中包含一个坐标轴。标题为changepoints Number = 20 Total residual error = 983541.4074的轴包含3个line类型的对象。

观察发动机转速在样品19035开始下降,取了510个样品后才稳定在样品19550。由于采样间隔是1毫秒,这是一个~0.51秒的延迟,是换档后的典型时间量。

现在看一下同一区域内发动机扭矩的变化点:

findchangepts (carTorqueNM“统计”“线性”“MaxNumChanges”, 20) xlim(20000年[19000])

图中包含一个坐标轴。标题为changepoints Number = 20 Total residual error = 435882.0922的轴包含3个line类型的对象。

观察到在样品19605时,发动机转速结束稳定55毫秒后,发动机转矩完全传递到轴上。这个时间与发动机进气冲程和扭矩产生之间的延迟有关。

为了找到离合器何时开始啮合,你可以进一步放大信号。

xlim(19050年[19000])

图中包含一个坐标轴。标题为changepoints Number = 20 Total residual error = 435882.0922的轴包含3个line类型的对象。

离合器在样品19011处被压下,大约需要30个样品(毫秒)才能完全脱离。

另请参阅

||