小波变换点检测
这个例子展示了如何使用小波来检测过程方差的变化。方差的变化很重要,因为它们通常表明数据生成机制的某些基本内容发生了变化。
第一个例子将小波变化点检测应用于一个非常古老的时间序列——公元622年至1281年的尼罗河极小值数据。开罗附近的罗达测量仪测量了河流水位的最低点。计量单位是米。
加载并绘制数据。
负载nileriverminima年= 622:1284;图(年,nileriverminima)“尼罗河最低水位”) AX = gca;斧子。XTick = 622:100:1222;网格在包含(“年”) ylabel (“米”)
大约在公元715年,一种新的测量设备开始建造。检查公元722年前后的数据,数据的可变性似乎发生了变化。您可以使用小波来探索这样一种假设,即测量的可变性已受到新测量设备的引入的影响。
使用Haar小波获得数据的多分辨率分析(MRA)。
Wt = modwt(nileriverminima,“哈雾”4);Mra = modwtmra(wt,“哈雾”);
制定互认协议,关注第一和第二层次的细节。
Figure subplot(2,1,1) plot(years,mra(1,:)) title(“一级细节”)子情节(2,1,2)情节(年,mra(2,:))标题(“第二级细节”) AX = gca;斧子。XTick = 622:100:1222;包含(“年”)
对小波系数进行总体方差变化检验。
为JJ = 1:5 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表NJ下方差上__ ________ ________ _______ D1 99 0.25199 0.36053 0.48446 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.04449 0.25044 wvarpost = 5x4表NJ下方差上___ ________ ________ _______ D1 562 0.11394 0.13354 0.15849 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年尺度上有显著差异,但在较长的尺度上无显著差异。您可以得出结论,过程方差发生了变化。
在金融时间序列中,可以使用小波来检测波动率的变化。为了说明这一点,我们可以考虑1974Q1到2012Q4的美国季度加权实际GDP数据。数据的转换首先取自然对数,然后计算年与年的差异。使用“db2”小波获得第6级实际GDP数据的小波变换(MODWT)。检验数据的方差,并将其与MODWT得到的量表方差进行比较。
负载GDPcomponentsRealgdpwt = modwt(realgdp,“db2”6“反射”);Gdpmra = modwtmra(realgdpwt,“db2”,“反射”);Vardata = var(realgdp,1);Varwt = var(realgdpwt(:,1:numel(realgdp)),1,2);
在vardata
这是总GDP时间序列的方差。在varwt
你就有了MODWT的尺度方差。里面有七个元素varwt
因为你把MODWT降到6级,结果是6个小波系数方差和一个缩放系数方差。将方差按比例相加,以确保方差不变。用忽略尺度系数方差的尺度绘制小波方差图。
totalMODWTvar = sum(varwt);bar(varwt(1:end-1,:)) AX = gca;斧子。XTickLabels = {“[2 4)”,“[4 8)”,“[8 16)”,“[16个32)”,“64年(32)”,“[64 128)”};包含(“季度”) ylabel (“方差”)标题(“按尺度的小波方差”)
因为这个数据是季度的,第一个量表捕捉两个季度到四个季度之间的变化,第二个量表捕捉四个季度到八个季度之间的变化,第三个量表捕捉八个季度到十六季度之间的变化,以此类推。
从MODWT和一个简单的条形图中,您可以看到8至32个季度之间的数据周期造成了GDP数据中最大的差异。如果考虑这些尺度上的小波方差,它们占GDP数据变异性的57%。这意味着2到8年期间的GDP波动是时间序列中出现的大部分变化的原因。
绘制第一层的细节,D1。这些细节捕捉了持续时间在两个季度到四个季度之间的数据波动。
: helperFinancialDataExample1 (gdpmra(1),年,...“美国实际GDP同比- D1”)
检查第一级的细节,似乎从1980年代开始方差有所减少。
检验一级小波系数的显著方差变化点。
pts_Opt = wvarchg(realgdpwt(1,1:numel(realgdp)),2);年(pts_Opt)
Ans = 1982
1982年确定了一个方差变化点。这个例子没有纠正'db2'小波在第一级引入的延迟。然而,这个延迟只是两个样本,所以它不会显著影响结果。
为了评估1982年前后GDP数据波动率的变化,将原始数据分为变化点前后序列。得到前后数据集的小波变换。在这种情况下,级数相对较短,因此使用哈尔小波减小边界系数的数量。用尺度计算小波方差的无偏估计,并绘制结果图。
tspre = realgdp(1:pts_Opt);tpostst = realgdp(pts_Opt+1:结束);Wtpre = modwt(tspre,“哈雾”5);Wtpost = modwt(tpost,“哈雾”5);prear = modwtvar(wtpre,“哈雾”,“表”);Postvar = modwtvar(wtpost,“哈雾”,“表”);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年之前的第二季度”,“1982年第二季度后”,“位置”,“西北”)
从前面的图中可以看出,在2到16个季度的尺度上,在1982q2之前和1982q2之后的方差之间似乎存在显著差异。
由于本例中的时间序列非常短,因此使用方差的有偏见估计是有用的。有偏估计不能去除边界系数。使用具有四个系数的“db2”小波滤波器。
Wtpre = modwt(tspre,“db2”5,“反射”);Wtpost = modwt(tpost,“db2”5,“反射”);prear = modwtvar(wtpre,“db2”, 0.95,“EstimatorType”,“有偏见的”,“表”);Postvar = modwtvar(wtpost,“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年之前的第二季度”,“1982年第二季度后”,“位置”,“西北”)
结果证实了我们最初的发现,即从2个季度到16个季度,波动率在尺度上有所下降。
使用小波变换可以让您专注于波动性变化的局部范围。要了解这一点,请检查原始数据图以及一级小波细节。
次要情节(2,1,1)helperFinancialDataExample1 (realgdp,年,...“美国实际GDP同比数据——原始数据”) subplot(2,1,2) helperFinancialDataExample1(gdpmra(1,:),years,...“美国实际GDP同比——小波1级细节”)
阴影区域被称为“大缓和”,表示从20世纪80年代中期开始的美国宏观经济波动减少的时期。
从总体数据来看,尚不清楚这一时期的波动性是否实际上有所下降。而小波的一级细节揭示了波动率的变化。