主要内容

小波变换点检测

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

第一个例子将小波变化点检测应用于一个非常古老的时间序列——公元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年代中期开始的美国宏观经济波动减少的时期。

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

Baidu
map