В этом примере показано, как использовать вейвлеты для обнаружения изменений в дисперсии процесса. Изменения в дисперсии важны, потому что они часто указывают на то, что что-то фундаментальное изменилось в механизме генерации данных.
Первый пример применяет обнаружение точки изменения импульса к очень старому временному ряду - минимальным данным реки Нил за 622-1281 годы нашей эры. Минимумы уровня реки измерялись на колее Рода вблизи Каира. Измерения в метрах.
Загрузите и постройте график данных.
load nileriverminima years = 622:1284; figure plot(years,nileriverminima) title('Nile River Minimum Levels') AX = gca; AX.XTick = 622:100:1222; grid on xlabel('Year') ylabel('Meters')

Строительство началось на новом измерительном приборе около 715 года нашей эры. Изучение данных до и после приблизительно 722 года нашей эры, по-видимому, приводит к изменению изменчивости данных. Можно использовать вейвлеты для изучения гипотезы о том, что на изменчивость измерений повлияло внедрение нового измерительного прибора.
Получить анализ данных с множественным разрешением (MRA) с использованием вейвлета Хаара.
wt = modwt(nileriverminima,'haar',4); mra = modwtmra(wt,'haar');
Постройте график MRA и сосредоточьтесь на деталях уровня 1 и уровня 2.
figure subplot(2,1,1) plot(years,mra(1,:)) title('Level 1 Details') subplot(2,1,2) plot(years,mra(2,:)) title('Level 2 Details') AX = gca; AX.XTick = 622:100:1222; xlabel('Years')

Примените полное изменение дисперсионного теста к вейвлет-коэффициентам.
for JJ = 1:5 pts_Opt = wvarchg(wt(JJ,:),2); changepoints{JJ} = pts_Opt; end cellfun(@(x) ~isempty(x),changepoints,'uni',0)
ans =
1x5 cell array
{[1]} {[0]} {[0]} {[0]} {[0]}
Определите год, соответствующий обнаруженному изменению отклонения.
years(cell2mat(changepoints))
ans = 721
Разбейте данные на два сегмента. Первый сегмент включает в себя годы 622-721, когда тонко масштабированные вейвлет-коэффициенты указывают изменение дисперсии. Второй сегмент содержит годы с 722 по 1284. Получение несмещенных оценок дисперсии импульса по шкале.
tspre = nileriverminima(1:100); tspost = nileriverminima(101:end); wpre = modwt(tspre,'haar',4); wpost = modwt(tspost,'haar',4); wvarpre = modwtvar(wpre,'haar',0.95,'table') wvarpost = modwtvar(wpost,'haar',0.95,'table')
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); figure errorbar(1:4,Vpre(:,2),Vpre(:,1),Vpre(:,3),'ko',... 'MarkerFaceColor',[0 0 0]) hold on errorbar(1.5:4.5,Vpost(:,2),Vpost(:,1),Vpost(:,3),'b^',... 'MarkerFaceColor',[0 0 1]) set(gca,'xtick',1.25:4.25) set(gca,'xticklabel',{'2 Year','4 Years','8 Years','16 Years','32 Years'}) grid on ylabel('Variance') title('Wavelet Variance 622-721 and 722-1284 by Scale','fontsize',14) legend('Years 622-721','Years 722-1284','Location','NorthEast')

Вейвлет-дисперсия указывает на значительное изменение дисперсии между данными 622-721 и 722-1284 в масштабах 2 и 4 лет.
В вышеприведенном примере использовали вейвлет-фильтр Хаара только с двумя коэффициентами из-за беспокойства по поводу граничных эффектов с относительно небольшим временным рядом (100 выборок из 622-721). Если ваши данные приблизительно являются стационарными разницей первого или второго порядка, вы можете заменить смещенную оценку с помощью границы «отражения». Это позволяет использовать более длинный вейвлет-фильтр, не беспокоясь о граничных коэффициентах. Повторите анализ, используя вейвлет sym4 по умолчанию.
wpre = modwt(tspre,4,'reflection'); wpost = modwt(tspost,4,'reflection'); wvarpre = modwtvar(wpre,[],[],'EstimatorType','biased',... 'Boundary','reflection','table'); wvarpost = modwtvar(wpost,[],[],'EstimatorType','biased',... 'Boundary','reflection','table');
Постройте график результатов.
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); figure errorbar(1:4,Vpre(:,2),Vpre(:,1),Vpre(:,3),'ko','MarkerFaceColor',[0 0 0]) hold on errorbar(1.5:4.5,Vpost(:,2),Vpost(:,1),Vpost(:,3),'b^','MarkerFaceColor',[0 0 1]) set(gca,'xtick',1.25:4.25) set(gca,'xticklabel',{'2 Years','4 Years', '8 Years', '16 Years','32 Years'}) grid on ylabel('Variance') title({'Wavelet Variance 622-721 and 722-1284 by Scale'; ... 'Biased Estimate -- Reflection Boundary'},'fontsize',14) legend('622-721','722-1284','Location','NorthEast') hold off

Заключение подкрепляется. Существует существенная разница в дисперсии данных по шкалам 2 и 4 года, но не по более длительным шкалам. Можно сделать вывод, что что-то изменилось в отклонении процесса.
В финансовых временных рядах для обнаружения изменений волатильности можно использовать вейвлеты. Чтобы проиллюстрировать это, рассмотрим квартальные данные реального ВВП США, взвешенные по цепочке, для 1974Q1- 2012Q4. Данные были преобразованы, сначала взяв натуральный логарифм, а затем рассчитав годовую разницу. Получить вейвлет-преобразование (MODWT) реальных данных ВВП до уровня 6 с вейвлетом «db2». Проверьте дисперсию данных и сравните ее с дисперсиями по шкале, полученной с помощью MODWT.
load GDPcomponents realgdpwt = modwt(realgdp,'db2',6,'reflection'); gdpmra = modwtmra(realgdpwt,'db2','reflection'); vardata = var(realgdp,1); varwt = var(realgdpwt(:,1:numel(realgdp)),1,2);
В vardata имеется отклонение для совокупного временного ряда ВВП. В varwt имеется отклонение по шкале для MODWT. Существует семь элементов в varwt поскольку вы получили MODWT до уровня 6, что привело к шести дисперсиям вейвлет-коэффициентов и одной дисперсией масштабного коэффициента. Суммируйте отклонения по масштабу, чтобы убедиться, что отклонение сохранено. Постройте график вейвлет-дисперсий по шкале, игнорируя дисперсию масштабного коэффициента.
totalMODWTvar = sum(varwt);
bar(varwt(1:end-1,:))
AX = gca;
AX.XTickLabels = {'[2 4)','[4 8)','[8 16)','[16 32)','[32 64)','[64 128)'};
xlabel('Quarters')
ylabel('Variance')
title('Wavelet Variance by Scale')

Поскольку эти данные являются квартальными, первая шкала фиксирует вариации между двумя и четырьмя четвертями, вторая шкала между четырьмя и восемью, третья между 8 и 16 и так далее.
Из MODWT и простого штрих-графика видно, что циклы в данных от 8 до 32 кварталов составляют наибольшую дисперсию в данных ВВП. Если учесть вейвлет-дисперсии на этих шкалах, они составляют 57% вариабельности данных ВВП. Это означает, что колебания в ВВП в течение периода от 2 до 8 лет составляют большую часть изменчивости, наблюдаемой во временных рядах.
Постройте график деталей первого уровня, D1. Эти детали фиксируют колебания в данных между двумя и четырьмя четвертями по длительности.
helperFinancialDataExample1(gdpmra(1,:),years,... 'Year over Year Real U.S. GDP - D1')

Анализ деталей первого уровня показывает, что начиная с 1980-х годов разница уменьшается.
Проверьте вейвлет-коэффициенты первого уровня для значительных точек изменения дисперсии.
pts_Opt = wvarchg(realgdpwt(1,1:numel(realgdp)),2); years(pts_Opt)
ans =
1982
Существует точка изменения дисперсии, определенная в 1982 году. Этот пример не исправляет задержку, введенную вейвлетом «db2» на уровне 1. Однако эта задержка составляет только две выборки, поэтому она не оказывает заметного влияния на результаты.
Для оценки изменений в волатильности данных о ВВП до и после 1982 года разбить исходные данные на ряды до и после перехода. Получение вейвлет-преобразований пред- и постнаборов данных. В этом случае ряды являются относительно короткими, поэтому используйте вейвлет Хаара для минимизации числа граничных коэффициентов. Вычислите несмещенные оценки вейвлет-дисперсии по масштабу и постройте график результата.
tspre = realgdp(1:pts_Opt); tspost = realgdp(pts_Opt+1:end); wtpre = modwt(tspre,'haar',5); wtpost = modwt(tspost,'haar',5); prevar = modwtvar(wtpre,'haar','table'); postvar = modwtvar(wtpost,'haar','table'); xlab = {'[2Q,4Q)','[4Q,8Q)','[8Q,16Q)','[16Q,32Q)','[32Q,64Q)'}; helperFinancialDataExampleVariancePlot(prevar,postvar,'table',xlab) title('Wavelet Variance By Scale') legend('Pre 1982 Q2','Post 1982 Q2','Location','NorthWest')

Из предыдущего графика видно, что существуют значительные различия между pre-1982Q2 и post-1982Q2 дисперсиями в масштабах от 2 до 16 кварталов.
Поскольку временные ряды столь коротки в этом примере, может быть полезно использовать смещенные оценки дисперсии. Смещенные оценки не удаляют граничные коэффициенты. Используйте вейвлет-фильтр «db2» с четырьмя коэффициентами.
wtpre = modwt(tspre,'db2',5,'reflection'); wtpost = modwt(tspost,'db2',5,'reflection'); prevar = modwtvar(wtpre,'db2',0.95,'EstimatorType','biased','table'); postvar = modwtvar(wtpost,'db2',0.95,'EstimatorType','biased','table'); xlab = {'[2Q,4Q)','[4Q,8Q)','[8Q,16Q)','[16Q,32Q)','[32Q,64Q)'}; figure helperFinancialDataExampleVariancePlot(prevar,postvar,'table',xlab) title('Wavelet Variance By Scale') legend('Pre 1982 Q2','Post 1982 Q2','Location','NorthWest')

Результаты подтверждают наш первоначальный вывод о снижении волатильности в масштабах от 2 до 16 кварталов.
Использование вейвлет-преобразования позволяет сосредоточиться на шкалах, где локализовано изменение волатильности. Чтобы увидеть это, изучите график необработанных данных вместе с подробностями вейвлета первого уровня.
subplot(2,1,1) helperFinancialDataExample1(realgdp,years,... 'Year over Year Real U.S. GDP -- Raw Data') subplot(2,1,2) helperFinancialDataExample1(gdpmra(1,:),years,... 'Year over Year Real U.S. GDP -- Wavelet Level 1 Details')

Затененный регион называют «Большой умеренностью,» означающей период снижения макроэкономической волатильности в США, начиная с середины 1980-х годов.
При анализе совокупных данных не ясно, действительно ли в этот период наблюдается снижение волатильности. Однако вейвлет уровня один раскрывает изменение волатильности.