主要内容

小波变换点检测

这个例子展示了如何使用小波来检测过程方差的变化。方差的变化很重要,因为它们通常表明数据生成机制发生了根本性的变化。

第一个例子将小波变化点检测应用于一个非常古老的时间序列——公元622年至1281年的尼罗河最小值数据。在开罗附近的罗达测量仪上测量了河流水位的最低点。测量单位是米。

加载并绘制数据。

负载nileriverminima年份= 622:1284;Figure plot(years,nileriverminima)“尼罗河最低水位”) AX = gca;斧子。XTick = 622:100:1222;网格包含(“年”) ylabel (“米”

公元715年左右,一种新的测量设备开始建造。检查大约公元722年前后的数据,数据的可变性似乎发生了变化。您可以使用小波来探索这样一种假设,即测量的可变性已经受到新测量设备的引入的影响。

利用Haar小波对数据进行多分辨率分析。

Wt = modwt(nileriverminima,“哈雾”4);Mra = modwtmra(wt,“哈雾”);

绘制MRA并关注第一级和第二级细节。

图subplot(2,1,1) plot(years,mra(1,:)) title(“一级详情”) subplot(2,1,2) plot(years,mra(2,:)“第二级细节”) AX = gca;斧子。XTick = 622:100:1222;包含(“年”

对小波系数进行总体方差变化检验。

pts_Opt = wvarchg(wt(JJ,:),2);changepoints{JJ} = pts_Opt;结束cellfun (@ (x) ~ isempty (x) changepoints,“大学”, 0)
ans = 1 x5单元阵列{[1]}{[0]}{[0]}{[0]}{[0]}

确定与检测到的方差变化相对应的年份。

年(cell2mat (changepoints))
Ans = 721

将数据分成两个部分。第一部分包括622年到721年,细尺度小波系数表明方差的变化。第二部分包括722年到1284年。获得无偏估计的小波方差的尺度。

Tspre = nileriverminima(1:100);Tspost = nileriverminima(101:end);Wpre = modwt(tspre,“哈雾”4);Wpost = modwt(tpost,“哈雾”4);Wvarpre = modwtvar(wpre,“哈雾”, 0.95,“表”wvarpost = modwtvar(wpost,“哈雾”, 0.95,“表”
wvarpre = 5x4 table NJ Lower Variance Upper __ ________ ________ _______ D1 99 0.25199 0.36053 0.55846 D2 97 0.15367 0.25149 0.48477 D3 93 0.056137 0.11014 0.30622 D4 85 0.018881 0.047427 0.26453 S4 85 0.017875 0.0449 0.25044 wvarpost = 5x4 table NJ Lower Variance Upper ___ ________ ________ _______ D1 562 0.11394 0.13354 0.15869 D2 560 0.085288 0.10639 0.13648 D3 556 0.0693 0.094168 0.13539 D4 548 0.053644 0.081877 0.14024 S4 548 0.24608 0.37558 0.64329

比较结果。

Vpre = table2array(wvarpre);Vpost = table2array(wvarpost);Vpre = Vpre(1:end-1,2:end);Vpost = Vpost(1:end-1,2:end);Vpre(:,1) = Vpre(:,2)-Vpre(:,1);Vpre(:,3) = Vpre(:,3)-Vpre(:,2);Vpost(:,1) = Vpost(:,2)-Vpost(:,1);Vpost(:,3) = Vpost(:,3)-Vpost(:,2);图errorbar (1:4, Vpre (:, 2), Vpre (: 1), Vpre (:, 3),“柯”...“MarkerFaceColor”,[0 0 0])保持errorbar (1.5:4.5 Vpost (:, 2), Vpost (: 1), Vpost (:, 3),“b ^”...“MarkerFaceColor”,[0 0 1]) set(gca,“xtick”甘氨胆酸,1.25:4.25)集(,“xticklabel”, {“2年”“4年”“八年”16年的32年的})网格ylabel (“方差”)标题(小波方差622-721和722-1284“字形大小”14)传说(622 - 721年的722 - 1284年的“位置”“东北”

小波方差表明622-721和722-1284数据在2年和4年尺度上的方差有显著变化。

上面的例子使用了只有两个系数的Haar小波滤波器,因为考虑到相对较小的时间序列(从622-721中提取100个样本)的边界效应。如果你的数据近似一阶或二阶差分平稳,你可以用“反射”边界代替偏估计。这允许你使用更长的小波滤波器而不用担心边界系数。使用默认的“sym4”小波重复分析。

Wpre = modwt(tspre,4,“反射”);Wpost = modwt(tpost,4,“反射”);Wvarpre = modwtvar(wpre,[],[],“EstimatorType”“有偏见的”...“边界”“反射”“表”);Wvarpost = modwtvar(wpost,[],[],“EstimatorType”“有偏见的”...“边界”“反射”“表”);

画出结果。

Vpre = table2array(wvarpre);Vpost = table2array(wvarpost);Vpre = Vpre(1:end-1,2:end);Vpost = Vpost(1:end-1,2:end);Vpre(:,1) = Vpre(:,2)-Vpre(:,1);Vpre(:,3) = Vpre(:,3)-Vpre(:,2);Vpost(:,1) = Vpost(:,2)-Vpost(:,1);Vpost(:,3) = Vpost(:,3)-Vpost(:,2);图errorbar (1:4, Vpre (:, 2), Vpre (: 1), Vpre (:, 3),“柯”“MarkerFaceColor”,[0 0 0])保持errorbar (1.5:4.5 Vpost (:, 2), Vpost (: 1), Vpost (:, 3),“b ^”“MarkerFaceColor”,[0 0 1]) set(gca,“xtick”甘氨胆酸,1.25:4.25)集(,“xticklabel”, {“2年”“4年”“八年”16年的32年的})网格ylabel (“方差”)标题({小波方差622-721和722-1284...“偏估计—反射边界”},“字形大小”14)传说(“622 - 721”“722 - 1284”“位置”“东北”)举行

这一结论得到了加强。数据方差在2年和4年尺度上有显著差异,但在更长的尺度上没有差异。您可以得出结论,过程方差已经发生了一些变化。

在金融时间序列中,您可以使用小波来检测波动率的变化。为了说明这一点,请考虑1974年第一季度至2012年第四季度的美国实际GDP季度链加权数据。数据的转换方法是先取自然对数,然后计算年与年的差异。使用'db2'小波获得真实GDP数据的小波变换(MODWT),直到第6级。检查数据的方差,并将其与MODWT获得的比例方差进行比较。

负载GDPcomponentsRealgdpwt = modwt(realgdp,“db2”6“反射”);gddpmra = modwtmra(realgdpwt,“db2”“反射”);Vardata = var(实际gdp,1);Varwt = var(realgdpwt(:,1:数字(realgdp)),1,2);

vardata就得到了GDP时间序列的方差。在varwt就得到了MODWT的比例方差。有七个元素varwt因为你将MODWT降至6级,导致6个小波系数方差和1个比例系数方差。将方差按比例求和,以确保方差不变。忽略标度系数方差绘制小波方差图。

totalMODWTvar = sum(varwt);bar(varwt(1:end-1,:)) AX = gca;斧子。XTickLabels = {“[2 4)”“[4 8)”“[8 16)”“[16个32)”“64年(32)”“[64 128)”};包含(“季度”) ylabel (“方差”)标题(“小波尺度方差”

因为这个数据是季度数据,所以第一个量表捕捉2到4个季度之间的变化,第二个量表捕捉4到8个季度之间的变化,第三个量表捕捉8到16个季度之间的变化,以此类推。

从MODWT和一个简单的条形图中,你可以看到8到32个季度之间的数据周期在GDP数据中占最大的方差。如果你考虑这些尺度上的小波方差,它们占GDP数据变异性的57%。这意味着2至8年期间GDP的波动是时间序列中出现的大部分变化的原因。

画出第一层细节,D1。这些细节捕捉了持续时间在两到四个季度之间的数据波动。

: helperFinancialDataExample1 (gdpmra(1),年,...年度美国实际GDP - D1

检查一级细节,从1980年代开始,方差似乎有所减少。

测试一级小波系数的显著方差变化点。

pts_Opt = wvarchg(realgdpwt(1,1:数字(realgdp)),2);年(pts_Opt)
Ans = 1982

1982年发现了一个方差变点。这个例子没有纠正由'db2'小波在第一级引入的延迟。然而,这种延迟只是两个样本,因此不会明显影响结果。

为了评估1982年前后GDP数据波动的变化,将原始数据分为变化点前后的序列。得到前后数据集的小波变换。在这种情况下,级数相对较短,因此使用Haar小波来最小化边界系数的数量。计算小波方差的无偏估计,并绘制结果。

tspre = realgdp(1:pts_Opt);tpostst = realgdp(pts_Opt+1:end);Wtpre = modwt(tspre,“哈雾”5);Wtpost = modwt(tpost,“哈雾”5);Prevar = modwtvar(wtpre,“哈雾”“表”);Postvar = modwtvar“哈雾”“表”);Xlab = {“[2 q, 4 q)”“[4 q, 8 q)”“[8 q, 16 q)”“[16 q, 32 q)”“[32 q 64 q)”};helperFinancialDataExampleVariancePlot (prevar postvar,“表”xlab)标题(“小波尺度方差”)传说(“1982年之前Q2”“1982年后第二季”“位置”“西北”

从前面的图表来看,在2到16个季度的尺度上,1982q2之前和1982q2之后的方差之间似乎存在显著差异。

由于本例中的时间序列非常短,因此使用方差的偏估计可能很有用。有偏估计不移除边界系数。使用具有四个系数的“db2”小波滤波器。

Wtpre = modwt(tspre,“db2”5,“反射”);Wtpost = modwt(tpost,“db2”5,“反射”);Prevar = modwtvar(wtpre,“db2”, 0.95,“EstimatorType”“有偏见的”“表”);Postvar = modwtvar“db2”, 0.95,“EstimatorType”“有偏见的”“表”);Xlab = {“[2 q, 4 q)”“[4 q, 8 q)”“[8 q, 16 q)”“[16 q, 32 q)”“[32 q 64 q)”};图helperFinancialDataExampleVariancePlot (prevar postvar,“表”xlab)标题(“小波尺度方差”)传说(“1982年之前Q2”“1982年后第二季”“位置”“西北”

结果证实了我们最初的发现,即波动率从2个季度下降到16个季度。

使用小波变换可以让您关注波动率局部变化的尺度。要了解这一点,请检查原始数据的图以及一级小波细节。

次要情节(2,1,1)helperFinancialDataExample1 (realgdp,年,...《美国实际GDP同比原始数据》) subplot(2,1,2) helperFinancialDataExample1(gddpmra (1,:),years,...“年比实际美国GDP——小波1级细节”

阴影区域被称为“大缓和”,表示美国宏观经济波动从20世纪80年代中期开始的一段时期。

从总体数据来看,并不清楚这一时期的波动性实际上有所降低。然而,小波的一级细节揭示了波动率的变化。