Оценивание тренда может производиться в параметрической и в непараметрической форме. Выше была рассмотрена процедура выделения тренда в параметрической форме, причем гипотезу о классе возможных моделей удалось выдвинуть на основе априорной информации. Основные параметры периодических составляющих сезонной компоненты обычно удается оценить вместе с параметрами тренда с помощью МНК (или одного из родственных методов), используя преобразования типа
C cos (wt+f) = C cos(f)cos(wt) - C sin(f) sin(wt) = = A cos(wt) + B sin(wt).
При использовании МНК одно из основных исходных предположений состоит в некоррелированности случайных погрешностей измерений. При анализе временных рядов это предположение, как правило, не выполняется. В инженерной практике корреляциями случайных погрешностей при оценивании тренда и сезонной составляющей приходится пренебрегать. Обычно при этом ссылаются на асимптотические результаты, оправдывающие такую практику. В действительности при конечном размере выборок корреляции погрешностей могут существенно снижать ожидаемую точность оценивания.
|
|
Процедуры непараметрического оценивания тренда называют сглаживанием. Наибольшее распространение имеют два подхода : локально-полиномиальное сглаживание и экспоненциальное сглаживание.
2.3. Локально-полиномиальное сглаживание
При локально-полиномиальном сглаживании ряда { xk }, k= 1 ,...,n задаются двумя параметрами: шириной сглаживающего окна (2 l+ 1) и степенью аппроксимирующего полинома р. Для получения сглаженного значения в точке t k берут члены ряда
xk-l, xk-l+ 1 ,..., xk,..., xk+l
и аппроксимируют их по МНК полиномом степени р. Сглаженное значение в точке tk получается как значение этого полинома в точке tk. Сглаженные значения в крайних правых и в крайних левых точках получаются так же, но точка xk уже не является центром окна. Легко доказать, что в вычислительном отношении эта процедура сводится к суммированию членов ряда, попавших в выбранное окно, с весами, которые определены заранее и зависят от параметров l и p. Таблицы таких весов можно найти во всех основных книгах по анализу временных рядов. Эта процедура проиллюстрирована на рис.3, соответствующие сценарии, в том числе программа вычисления весов weights, приведены в Документе 2. 1.
Рис. 2.1. Локально-полиномиальное сглаживание
Документ 1. Локально-полиномиальное сглаживание |
Экспоненциальное сглаживание синусоидального сигнала на фоне аддитивного шума. Файл poly_smooth.m clear; clc; T=20; t=0:0.05:T; %шкала времени s=0.4; %СКО аддитивного щума x0=sin(t); %исходный сигнал x=x0+s*randn(size(x0)); %исходный сигнал c шумом x1=polysmooth_f(x,2,7); x2=polysmooth_f(x,3,12); x3=polysmooth_f(x,4,25); subplot(4,1,1); plot(t,x,'r','LineWidth',2); grid; hold on; plot(t,x0,'LineWidth',2); title('Временной ряд и его тренд', 'FontName','Courier New Cyr','FontSize',12); axis([0 T -2 2]); subplot(4,1,2); plot(t,x1,'r','LineWidth',2); grid; hold on; plot(t,x0,'LineWidth',2); title('Полиномиальное сглаживание, m=2, l=7', 'FontName','Courier New Cyr','FontSize',12); axis([0 T -2 2]); subplot(4,1,3); plot(t,x2,'r','LineWidth',2); grid; hold on; plot(t,x0,'LineWidth',2); title('Полиномиальное сглаживание, m=3,l=12', 'FontName','Courier New Cyr','FontSize',12); axis([0 T -2 2]); subplot(4,1,4); plot(t,x3,'r','LineWidth',2); grid; hold on; plot(t,x0,'LineWidth',2); title('Полиномиальное сглаживание, m=4, l=20', 'FontName','Courier New Cyr','FontSize',12); axis([0 T -2 2]); |
Сглаживание ряда х полиномом степени m на окне шириной 2* l +1. Процедура-функция polysmooth_f.m |
function y=polysmooth_f(x,m,l); n=length(x); x=reshape(x,1,n); %x предполагается строкой x1=zeros(size(x)); %начальное значение и объявление размера %Сглаживание концов ряда for k=1:l; C=weights(m,l,k); %веса для k-й точки W=x(1:2*l+1); %крайнее левое окно y(k)=C*W'; W=x(n-2*l:n); C=fliplr(C); %веса в обратном порядке y(n-k+1)=C*W'; end; %Сглаживание центральной части ряда for k=l+1:n-l; C=weights(m,l,l+1); %веса для центральной части W=x(k-l:k+l); %окно y(k)=C*W'; end; |
Вычисление вектора коэффициентов для локально-полиномиального сглаживания. Процедура-функция weights.m |
function C=weights(m,l,k); %Вычисляется вектор С весовых коэффициентов %при полиномиальном сглаживании на равномерной сетке. %m - степень сглаживающего полинома,(2l+1) - ширина окна сглаживания %k - номер точки интерполяции; для центральной точки k=l+1; t=1:2*l+1; for i=1:m+1; A(1:2*l+1,i)=t'.^(i-1); end; z=A(k,:); C=z*inv(A'*A)*A'; %весовые коэффициенты по МНК %plot(C) |
|
|