Обнаружение точек изменения вейвлета

В этом примере показано, как использовать вейвлеты, чтобы обнаружить изменения в отклонении процесса. Изменения в отклонении важны, потому что они часто указывают, что что-то основной принцип изменилось о генерирующем данные механизме.

Первый пример применяет обнаружение точек изменения вейвлета к очень старым временным рядам - данные о минимумах реки Нил в течение лет 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-х.

Исследуя агрегированные данные, не ясно, что существует на самом деле уменьшаемая энергозависимость в этот период. Однако уровень вейвлета, который каждый детализирует, раскрывает изменение в энергозависимости.