
- •Аннотация
- •1 Оценка моментных функций 5
- •1 Оценка моментных функций 5
- •Задание
- •1 Оценка моментных функций
- •2 Построение моделей авторегрессии ар(m)
- •3 Построение моделей скользящего среднего сс(n)
- •4 Построение смешанных моделей авторегрессии – скользящего среднего (арсс(m, n))
- •5 Моделирование лучших моделей
- •6 Оценка моментных функций смоделированного процесса
- •Заключение
- •Список использованной литературы
- •Приложение a Текст программы
6 Оценка моментных функций смоделированного процесса
Найдем оценки моментных функций случайных последовательностей.
Результаты запишем в таблицу 12.
Таблица 12 – Сравнение моментных функций
Параметры процесса |
Исходный процесс |
АР(3) |
СС(3) |
АРСС(3,3) |
|
|||||
Теория |
Выборка |
Теория |
Выборка |
Теория |
Выборка |
|||||
Минимум |
-84.3220 |
|
-89.7907 |
|
-86.0654 |
|
-91.2001 |
|||
Максимум |
-13.2090 |
|
-10.9820 |
|
-8.1642 |
|
-13.8392 |
|||
Среднее |
|
|
-50.1498 |
|
-50.2701 |
|
-50.8790 |
|||
Дисперсия |
118.9501 |
118.9501 |
115.7915 |
118.9501 |
115.8908 |
118.9501 |
118.4897 |
|||
СКО |
10.9053 |
10.9053 |
10.7606 |
10.9053 |
10.7653 |
10.9053 |
10.8853 |
Заключение
В
ходе работы была проанализирована
выборка исходного процесса, построены
все модели АР, с помощью уравнений
Юла-Уокера, и все модели СС, с помощью
систем нелинейных уравнений. Лучшими
моделями оказались АР(3), СС(2). Также
построены двумя способами смешанные
модели АРСС до третьего порядка
включительно, лучшей моделью среди них
оказалась АРСС(3,1).Вычислив оба метода
нахождения параметров моделей АРСС,
был сделан вывод, что поиск коэффициентов
и
через систему уравнений Юла-Уокера
является более трудоёмким процессом,
сложным в реализации по сравнению с
поиском через промежуточную
последовательность, однако этот метод
является более точным, что доказывает
таблица теоретических ошибок моделей
АРСС.
Была написана универсальная программа, позволяющая строить смешанные модели любых порядков.
Список использованной литературы
Тараскин, А.Ф. Статистический анализ временных рядов авторегрессии и скользящего среднего: учебное пособие [Текст] // Самара: СГАУ, 1998. – 56с.
Тараскин, А.Ф. Статистическое моделирование и метод Монте–Карло: учебное пособие [Текст] // Самара: СГАУ, 1997. – 62с.
Храмов, А.Г. Анализ и моделирование процессов АРСС: интернет-ресурс к курсовой работе [Электронный ресурс] // Самара: СГАУ, 2009.
Приложение a Текст программы
//ЗАДАНИЕ 1:
//Оценить моментные функции случайной последовательности,
//оценить радиус корреляции, изобразить графически
//оценку нормированной корреляционной функции
clear()
X = fscanfMat('C:\123.txt');//Чтение выборки из файла
F = '%16.4f'; // Формат вывода чисел с плавающей точкой
I = '%d'; // Вормат вывода целых чисел
function [RX, MX]=Analiz(X)
MX = mean(X);
RX_=corr(X,30);
RX = RX_';
DX = RX_(1);
j=30;
while ((j>0) & (abs(RX(j)/DX)<1/%e))
j = j-1;
end;
rad = j;
printf("Минимальное значение : "+F+"\n",min(X));
printf("Максимальное значение : "+F+"\n",max(X));
printf("Выборочное среднее : "+F+"\n",MX);
printf("Выборочная дисперсия : "+F+"\n",DX);
printf("Выборочное СКО : "+F+"\n",sqrt(DX));
printf("Радиус корреляции : "+I+"\n",rad);
printf("Выборочная нормированная корреляционная функция :\n");
printf(F+"\n",RX/DX);
printf(" ...\n ...\n ...\n\n")
endfunction;
function [RX, m]=first(X)
[RX,m] = Analiz(X);
plot2d(0:10,[RX(1:11)/RX(1) zeros(11,1)],axesflag = 5,style = [5 1],leg = "@Normalized correlation function");
endfunction
//ЗАДАНИЕ 2:
//Построить модели АР, СС, АРСС до третьего порядка включительно
//Нахождение альфа в модели СС
function [alphas, correct]=MA(rX, N)
RX = rX;
num = N;
function [y]=ma(x)
for i = 0:num,
y(i+1) = - RX(i+1),
for j = 0:num-i
y(i+1) = y(i+1)+x(j+1)*x(j+1+i);
end;
end;
endfunction;
[alphas,values,info] = fsolve(zeros(1,num+1),ma);
correct = %T
for i = 1:N+1
if (abs(values(i))>0.000001 | info == 4) then
correct = %F;
break;
end;
end;
endfunction;
//Устойчивость модели
function [y]=stable(betas)
y = %T;
len = length(betas)
if abs(betas(len))>1 then
y = %F;
elseif (len == 2) then
if (abs(betas(1))>1-betas(2)) then
y = %F;
end;
elseif (len == 3) then
if ((abs(betas(1)+betas(3)) > 1-betas(2)) | (abs(betas(2)+betas(1)*betas(3))>abs(1-betas(3)^2))) then
y = %F;
end;
end;
endfunction
//Нахождение альфа и бета в модели АР
function [alpha, betas, is_correct, is_stable]=AR(rX, M)
RX = rX;
num = M;
function [y]=ar(x)
for i = 0:num,
y(i+1) = -RX(i+1);
for j = 1:num,
y(i+1) = y(i+1)+x(j) * RX(abs(j-i)+1);
end;
end;
y(1) = y(1)+x(num+1)^2;
endfunction;
[coef,values,info] = fsolve(zeros(1,num+1),ar);
is_correct = %T;
for i = 1:num+1
if (abs(values(i))>0.000001 | info == 4) then
is_correct = %F;
break;
end;
end;
betas = coef(1:M);
is_stable = %T;
if (~stable(betas)) then
is_stable = %F;
end;
alpha = coef(M+1);
endfunction
//Смешанная корреляционная функция
function R=Mcorr(k, alphas, betas)
R = alphas(k+1);
len = min(k, length(betas));
for j = 1 : len,
R = R + betas(j) * Mcorr(k - j, alphas);
end;
endfunction;
// Нахождение коэффициентов бета в общей модели АРСС
function [betas, is_stable]=arma_b(RX, M, N)
R = zeros(M, 1);
R_b = zeros(M, M);
for i = 1:M,
R(i) = RX(N+1+i);
for j = 1:M,
R_b(i, j) = RX(abs(N-j+i)+1);
end;
end;
betas = linsolve(R_b, -R);
is_stable = %T;
if (~stable(betas)) then
is_stable = %F;
end;
endfunction;
//Нахождение коэффициентов альфа в общей модели АРСС
function [alph, correct]=arma_a(RX, m, n, betas)
M = m, N = n;
function r_s=system(alph)
for k = 0 : N,
r_s(k+1) = -RX(k+1);
for i = k : N,
r_s(k+1) = r_s(k+1) + alph(i+1) * Mcorr(i - k, alph, betas);
end;
for j = 1 : M,
r_s(k+1) = r_s(k+1) + betas(j) * RX(abs(k - j) + 1);
end;
end;
endfunction;
[alph,values,info] = fsolve([1 : (N+1)], system);
correct = %T;
for i = 1:N+1
if (abs(values(i))>0.000001 | info == 4) then
correct =%F;
break;
end;
end;
endfunction;
//Общая функция нахождения параметров модели АРСС
function [alphas, betas, correct, is_stable]=ARMA(RX, M, N)
if (M == 0) then
is_stable = %T;
[alphas,correct] = MA(RX,N);
betas = [];
elseif (N == 0) then
[alphas,betas,correct,is_stable] = AR(RX,M)
else
[betas,is_stable] = arma_b(RX,M,N);
[alphas,correct] = arma_a(RX,M,N,betas);
end;
endfunction
function second(RX)
for i = 0:3
for j = 0:3
[a,b,c,st] = ARMA(RX,i,j),
printf("Модель АРСС("+I+","+I+") :",i,j);
if c then
cor = " существует, ";
if st then
cor = cor + "устойчива :\n";
printf(cor);
printf(" альфа : ");
for k = 1:length(a)
printf(F+" ",a(k));
end;
printf("\n");
if (length(b)) then
printf(" бета : ");
for k = 1:length(b)
printf(F+" ",b(k));
end;
printf("\n");
end;
else
cor = cor + " но не устойчива :\n";
printf(cor);
end;
else
printf(" не существует\n");
end;
end;
end;
printf("\n");
endfunction
//ЗАДАНИЕ 3
//Рассчитать теоретические нормированные корреляционные функции
//для каждой из построенных моделей. На основе сравнения теоретических и выборочных функций
//выбрать наиболее адекватную модель из каждого класса.
//Построить графики корреляционных функций для трех наилучших моделей.
//Теоретическая корреляционная функция
function [r]=T_n_corr(RX, alphas, betas, num);
function R=Tcorr(RX, alphas, betas, k)
nm = length(alphas)+length(betas)-1;
k = abs(k);
if (k > nm) then
R = 0;
M = length(betas);
for j = 1 : M,
R = R + betas(j) * Tcorr(RX,alphas,betas, k - j);
end;
else
R = RX(k+1);
end;
endfunction;
for i = 0:num-1
R(i+1) = Tcorr(RX,alphas,betas,i);
end;
r = R/R(1);
endfunction
function [e]=T_error(rX, r);//Ошибка модели
e = 0;
for i = 1:11,
e = e + (rX(i)-r(i))^2;
end;
endfunction
function [E]=T_errors(RX)//Ошибки моделей
for i = 1:4
for j = 1:4
[a,b,c,s] = ARMA(RX,i-1,j-1);
if (c & s) then
r = T_n_corr(RX,a,b,15);
E(i,j) = T_error(RX/RX(1),r);
else
E(i,j) = %inf;
end;
end;
end;
endfunction
function [ar_, ma_, arma]=best_models(errors);
[min_,k] = min(errors(1:4,1));
ar_ = k-1;
[min_,k] = min(errors(1,1:4));
ma_ = k-1;
[min_,k] = min(errors(2:4,2:4));
arma = k';
endfunction
function [err, ar_, ma_, arma]=third(RX, num)
err = T_errors(RX);
[ar_,ma_,arma] = best_models(err);
printf("Лучшие модели :\n");
printf("АР("+I+")\n",ar_);
[a,b,c,st] = ARMA(RX,ar_,0);
AR_corr = T_n_corr(RX,a,b,num);
printf("Нормированная крреляция:\n");
for i = 1:11
printf(F+"\n",AR_corr(i));
printf("\n");
end;
printf("CC("+I+")\n",ma_);
[a,b,c,st] = ARMA(RX,0,ma_);
MA_corr = T_n_corr(RX,a,b,num);
printf("Нормированная крреляция:\n");
for i = 1:11
printf(F+"\n",MA_corr(i));
printf("\n");
end;
printf("АРМА("+I+","+I+")\n\n",arma(1),arma(2));
[a,b,c,st] = ARMA(RX,arma(1),arma(2));
ARMA_corr = T_n_corr(RX,a,b,num);
printf("Нормированная крреляция:\n");
for i = 1:11
printf(F+"\n",ARMA_corr(i));
printf("\n");
end;
scf(1);
plot2d(0:num-1,AR_corr, axesflag = 5,style = 13);
plot2d(0:num-1,MA_corr, axesflag = 5,style = 6);
plot2d(0:num-1,ARMA_corr, axesflag = 5,style = 2);
plot2d(0:num-1,RX(1:num)/RX(1), axesflag = 5,style = 5);
endfunction
//ЗАДАНИЕ 4:
//Построить и изобразить графически параметрическую оценку
//спектральной плотности для трёх наилучших моделей.
function S=ARMA_SPM(alphas, betas, w)
S1 = 0;S2 = 1;
for i = 0:length(alphas)-1
S1 = S1 + alphas(i+1)*exp(%i*w*i);
end;
for i = 1:length(betas)
S2 = S2 - betas(i)*exp(%i*w*i);
end;
S = abs(S1/S2)^2;
endfunction
function S=initial_SPM(omega, RX)
S = abs(RX(1));
for k = 1 : length(RX)-1,
S = S + 2 * RX(k + 1) * cos(omega * k);
end;
if (S<0) then
S = 0.01;
end;
endfunction;
function SPM(RX, ar_best, ma_best, arma_best);
w = [0:0.02:%pi];
len = length(w);
[a,b,c,st] = ARMA(RX,ar_best,0);
for i = 1:len
s_ar(i) = ARMA_SPM(a,b,w(i));
end;
s_ar = s_ar/RX(1);
[a,b,c,st] = ARMA(RX,0,ma_best);
for i = 1:len
s_ma(i) = ARMA_SPM(a,b,w(i));
end;
s_ma = s_ma/RX(1);
[a,b,c,st] = ARMA(RX,arma_best(1),arma_best(2));
for i = 1:len
s_arma(i) = ARMA_SPM(a,b,w(i));
end;
s_arma = s_arma/RX(1);
for i = 1:len
s_source(i) = initial_SPM(w(i),RX(1:10)/RX(1));
end;
scf(2);
plot2d(w,s_source, axesflag = 5,style = 5);
plot2d(w,s_ar, axesflag = 5,style = 13);
scf(3);
plot2d(w,s_source, axesflag = 5,style = 5);
plot2d(w,s_ma, axesflag = 5,style = 3);
scf(4);
plot2d(w,s_arma, axesflag = 5,style = 2);
plot2d(w,s_source, axesflag = 5,style = 5);
endfunction
//ЗАДАНИЕ 5:
//Смоделировать процесс с использованием лучшей модели
//Результат изобразить графически
function X=Gauss(n, a, D) //функция генерирует нормальную СВ
X_norm=zeros(n,1), //по заданным параметрам
sigma=sqrt(D),
for i=1:n,
sum=0,
for j=1:12,
sum =sum+rand(),
end;
X_norm(i) = sigma*(sum-6)+a,
end;
X=X_norm;
endfunction;
function [X]=modeling_ARMA(alphas, betas, MX, num);
X_ = zeros(num+1000,1);
ksi = grand(num + 1000, 1, 'nor', 0, 1);
N = length(alphas) - 1;
M = length(betas);
for i = 0:num+999,
for j =0:N
if (i-j>=0) then
X_(i+1) = X_(i+1) + alphas(j+1)*ksi(i-j+1);
end;
end;
for j =1:M
if (i-j>=0) then
X_(i+1) = X_(i+1) + betas(j)*X_(i-j+1);
end;
end;
end;
X = X_(1001:num+1000)+MX;
endfunction;
function [ar_model, ma_model, arma_model]=fifth(source, ar_, ma_, arma)
w = 0:120;
RX' = corr(source,30);
MX = mean(source);
dx = sqrt(cmoment(source,2));
mx = ones(121,1)*MX;
dx1 = mx - dx;
dx2 = mx + dx;
[a,b,c,st] = ARMA(RX,ar_,0);
ar_model = modeling_ARMA(a,b,MX,5000)
[a,b,c,st] = ARMA(RX,0,ma_);
ma_model = modeling_ARMA(a,b,MX,5000)
[a,b,c,st] = ARMA(RX,arma(1),arma(2));
ARMA_corr = T_n_corr(RX,a,b,11);
arma_model = modeling_ARMA(a,b,MX,5000)
model_corr = corr(arma_model,11);
scf(5);
plot2d(w,source(1:121), axesflag = 5,style = 1);
plot2d(w,ar_model(1:121), axesflag = 5,style = 13);
plot2d(w,mx, axesflag = 5,style = 2);
plot2d(w,dx1, axesflag = 5,style = 5);
plot2d(w,dx2, axesflag = 5,style = 5);
scf(6);
plot2d(w,source(1:121), axesflag = 5,style = 1);
plot2d(w,ma_model(1:121), axesflag = 5,style = 13);
plot2d(w,mx, axesflag = 5,style = 2);
plot2d(w,dx1, axesflag = 5,style = 5);
plot2d(w,dx2, axesflag = 5,style = 5);
scf(7);
plot2d(w,source(1:121), axesflag = 5,style = 1);
plot2d(w,arma_model(1:121), axesflag = 5,style = 13);
plot2d(w,mx, axesflag = 5,style = 2);
plot2d(w,dx1, axesflag = 5,style = 5);
plot2d(w,dx2, axesflag = 5,style = 5);
scf(8);
plot2d(0:10,RX(1:11)/RX(1),axesflag = 5,style = 5);
plot2d(0:10,ARMA_corr,axesflag = 5,style = 13);
plot2d(0:10,model_corr/model_corr(1),axesflag = 5,style = 2);
endfunction;
//ЗАДАНИЕ 6:
//Построить оценки моментных функций смоделированного процесса,
//сравнить их с оценками моментных функций исходного процесса
//и с теоретическими моментными функциями, соответствующими выбранной модели АРСС.
function sixth(X, a, m, am, ar_best, ma_best, arma_best)
printf("Статистика исходной выборки :\n");
[RX,MX] = Analiz(X);
printf("Статистика модели АР("+I+"):\n",ar_best);
[rA,mA] = Analiz(a);
printf("Ошибка мат.ожидания :"+F+"\n",abs(MX-mA));
printf("Ошибка дисперсии :"+F+"\n",abs(RX(1)-rA(1)));
printf("Ошибка корреляции :"+F+"\n\n",T_error(RX/RX(1),rA/rA(1)));
printf("Статистика модели CC("+I+"):\n",ma_best);
[rM,mM] = Analiz(m);
printf("Ошибка мат.ожидания :"+F+"\n",abs(MX-mM));
printf("Ошибка дисперсии :"+F+"\n",abs(RX(1)-rM(1)));
printf("Ошибка корреляции :"+F+"\n\n",T_error(RX/RX(1),rM/rM(1)));
printf("Статистика модели АРCC("+I+","+I+"):\n",arma_best(1),arma_best(2));
[rAM,mAM] = Analiz(am);
printf("Ошибка мат.ожидания :"+F+"\n",abs(MX-mAM));
printf("Ошибка дисперсии :"+F+"\n",abs(RX(1)-rAM(1)));
printf("Ошибка корреляции :"+F+"\n",T_error(RX/RX(1),rAM/rAM(1)));
endfunction
[RX, MX] = first(X);
second(RX);
[errors,ar_best,ma_best,arma_best] = third(RX,11);
errors
printf("\n")
SPM(RX,ar_best,ma_best,arma_best);
[a,m,am] = fifth(X,ar_best,ma_best,arma_best);
sixth(X,a,m,am,ar_best,ma_best,arma_best);