В этом примере показано, как использовать вейвлеты, чтобы обнаружить изменения в отклонении процесса. Изменения в отклонении важны, потому что они часто указывают, что что-то основной принцип изменилось о генерирующем данные механизме.
Первый пример применяет обнаружение точек изменения вейвлета к очень старым временным рядам - данные о минимумах реки Нил в течение лет 622 - 1 281 AD. Минимумы уровня реки были измерены в приборе Рода под Каиром. Измерения исчисляются в метрах.
Загрузите и отобразите данные на графике.
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 AD. При исследовании данных до и приблизительно после 722 AD, там, кажется, изменение в изменчивости данных. Можно использовать вейвлеты, чтобы исследовать гипотезу, что изменчивость измерений была затронута введением нового измерительного прибора.
Получите анализ мультиразрешения (MRA) данных с помощью вейвлета Хаара.
wt = modwt(nileriverminima,'haar',4); mra = modwtmra(wt,'haar');
Постройте MRA и фокусируйтесь на уровне один и уровне две детали.
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 - 1 284. Получите объективные оценки отклонения вейвлета шкалой.
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 лет, но не в более длинных шкалах. Можно прийти к заключению, что что-то изменилось об отклонении процесса.
В финансовых временных рядах можно использовать вейвлеты, чтобы обнаружить изменения в энергозависимости. Чтобы проиллюстрировать это, рассмотрите ежеквартальные взвешенные цепью американские действительные данные о GDP для 1974Q1 к 2012Q4. Данные были преобразованы путем первого взятия натурального логарифма и затем вычисления различия года по году. Получите вейвлет, преобразовывают (MODWT) действительных данных о GDP вниз, чтобы выровняться шесть с '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
у вас есть отклонение для совокупных временных рядов GDP. В varwt
у вас есть отклонение шкалой для MODWT. В varwt
существует семь элементов потому что вы получили MODWT вниз, чтобы выровнять шесть получившихся в шести содействующих отклонениях вейвлета и одном содействующем отклонении масштабирования. Суммируйте отклонения шкалой, чтобы видеть, что отклонение сохраняется. Постройте отклонения вейвлета по шкале, игнорирующей масштабирующееся содействующее отклонение.
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 четвертями составляют самое большое отклонение в данных о GDP. Если вы рассматриваете отклонения вейвлета в этих шкалах, они составляют 57% изменчивости в данных о GDP. Это означает, что колебания в GDP в течение 2 - 8 лет составляют большую часть изменчивости, замеченной во временных рядах.
Постройте уровень, который каждый детализирует, D1. Эти детали получают колебания в данных между двумя и четырьмя четвертями в длительности.
helperFinancialDataExample1(gdpmra(1,:),years,... 'Year over Year Real U.S. GDP - D1')
Исследование уровня, который каждый детализирует, кажется, что существует сокращение отклонения, начинающегося в 1980-х.
Протестируйте уровень коэффициенты вейвлета на значительное отклонение changepoints.
pts_Opt = wvarchg(realgdpwt(1,1:numel(realgdp)),2); years(pts_Opt)
ans = 1982
Существует отклонение changepoint идентифицировано в 1 982. Этот пример не корректирует для задержки, введенной 'db2' вейвлетом на уровне один. Однако та задержка является только двумя выборками, таким образом, она не заметно влияет на результаты.
Чтобы оценить изменения в энергозависимости данных о GDP пред и отправить 1982, разделите исходные данные в пред - и post-changepoint ряд. Получите преобразования вейвлета пред и отправьте наборы данных. В этом случае ряды относительно коротки, так используйте вейвлет Хаара, чтобы минимизировать количество граничных коэффициентов. Вычислите объективные оценки отклонения вейвлета шкалой и постройте результат.
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-х.
Исследуя агрегированные данные, не ясно, что существует на самом деле уменьшаемая энергозависимость в этот период. Однако уровень вейвлета, который каждый детализирует, раскрывает изменение в энергозависимости.