среда, 3 декабря 2014 г.

Основы моделирования систем (ОМС) 3: Синтез регрессионной модели

Изложены основные понятия и принципы, способствующие получению практических навыков, необходимых для построения регрессионных моделей. Используются расчёты на ЭВМ в системе Matlab.
Для усвоения нижеизложенного материала необходимо овладеть теорией линейного множественного регрессионного анализа.
Скачать текст программы для пакета Matlab (.m)



Предположим, имеется задача: Оценить параметры множественной регрессии
характеризующей зависимость объёма производства от капиталовложений и выполнения нормы выработки по данным таблицы:
Таблица 1

1
2
3
4
5
6
7
8
9
10
11
12
x1
16.3
16.8
18.5
16.3
17.9
17.4
16.1
16.2
17.0
16.7
17.5
19.1
x2
99.5
98.9
99.2
99.3
99.8
99.6
99.8
99.7
99.8
99.9
100.0
100.2
y
52.8
48.4
54.2
50.0
54.9
53.9
53.1
52.4
53.0
52.9
53.1
60.1


Описание работы программы
Программа реализует способ оценки значимости коэффициентов регрессии, описанный в учебном пособии «Статистические методы в математическом моделировании и научных исследованиях» (скачать).

Текст программы в системе Matlab:
clc;clear;
% Вызываем input-dialog для ввода начальных данных
lines=3;
title='Множественный регрессионный анализ';
promt={'Введите через знак ";" значения y:','Введите через занк ";" значения х1:','Введите через занк ";" значения х2:'};
txt1={'52.8;48.4;54.2;50.0;54.9;53.9;53.1;52.4;53.0;52.9;53.1;60.1','16.3;16.8;18.5;16.3;17.9;17.4;16.1;16.2;17.0;16.7;17.5;19.1', '99.5;98.9;99.2;99.3;99.8;99.6;99.8;99.7;99.8;99.9;100.0;100.2'};
answer=inputdlg(promt, title, lines, txt1);
Z1=str2num(char(answer(1)));
Z2=str2num(char(answer(2)));
Z3=str2num(char(answer(3)));

alpha=0.05;          % Устанавливаем уровень значимости:
tablStudent=2.26;    % табличное значение критерия Стьюдента

% Получаем массивы начальных данных
disp('Исходные данные (матрицы y, x1, x2):');
Z1
Z2
Z3
Y=Z1;
x1=Z2;
x2=Z3;
%x0(1:m(1))=1; % вектор с фиктивной переменной
x0=[1;1;1;1;1;1;1;1;1;1;1;1];

% Формируем матрицу базизных функций
X(:,1)=x0;
X(:,2)=x1;
X(:,3)=x2;

B=inv(X'*X)*(X'*Y); % Искомый вектор коэффициентов:

disp('Искомый вектор коэффициентов (B): '); disp(B);
k=0; % Счётчик
iniSum=120; % Начальное приближение суммы квадратов отклонений
p=2; % Количество факторов
while k<2
    yy=B(1)*x0+B(2)*x1+B(3)*x2; % уравнение множественной регрессии
    %yy=double(yy);
    errr=(Y-yy); % оценка ошибки
    disp('Отклонение модели от экспериментальных значений на: ');
    disp(errr);
    y=errr.^2;
    SumKO=0;     % Сумма квадратов отклонений
    for i=1:length(Y)
        SumKO=SumKO+y(i);
    end
    disp('Сумма квадратов отклонений: ');
    disp(SumKO);
    % Проверка адекватности модели:
    % Если SumKO на шаге n+1 будет больше, чем на шаге n, то цикл
    % прекращает свою работу, т.к. модель на шаге n будет иметь
    % лучшие характеристики
    if iniSum<SumKO
            disp('Сумма квадратов отклонений меньше, чем на предыдущем шаге!');
            disp(iniSum);
            X(:,1)=x0;X(:,2)=x1;X(:,3)=x2; % необходимые параметры
            B=inv(X'*X)*(X'*Y);
            break;                         % выходим из цикла
        else
            iniSum=SumKO;
            B=inv(X'*X)*(X'*Y);
            % Определяем остаточную дисперсию:
            OstDisp=SumKO/(length(Y)-p-1);
            % Заводим массив — матрицу ошибок:
            C=inv(X'*X);
            for j=1:length(Y)-9
                 % Дисперсия оценок j-го коэффициента регрессии
                 DispOcen(j)=sqrt(OstDisp)*C(j,j);
                 % Тогда наблюдаемые значения критерия Стьюдента:
                 expKritStudent(j)=abs(B(j))/sqrt(DispOcen(j));
            end
            disp('Тогда наблюдаемые значения критерия Стьюдента: ');
            disp(expKritStudent);
           
            % Проверяем уровень значимости каждого коэффициента:
            disp('Табличное значение критерия Стьюдента:');
            disp(tablStudent);
            % Проверяем полученные коэффициенты на уровень значимости
            for j=1:length(Y)-9
                 disp(sprintf('Исследуем коэффициент №%g: ', j))
                 if  expKritStudent(j)>tablStudent
                     disp('Коэффициент значимый, т.е. имеет нулевое значение и в генеральной совокупности')
                     disp(B(j));
                 else
                     disp('Коэффициент незначимый:');
                     disp(B(j));
                     % "отбрасываем" незначимые коэф. для последующих расчётов:
                     B(j)=0;
                     X(:,j)=0;
                 end 
           end
           % значение вектора искомых коэффициентов на следующем шаге:
              disp('Значение вектора искомых коэффициентов на следующем шаге (после удаления незначимых коэффицентов):');
              disp(B);
           k=k+1;
      end
end
disp('Вид иследуемой модели:')
disp(sprintf('Y = %g + %g*X1 + %g*X2',B(1),B(2),B(3)));
Y=B(1)+B(2)*x1+B(3)*x1.^2;

Результат работы программы:
Рис.1
При введённых значениях y, x1, x2 (см. табл. 1 и рис. 1), программа рассчитывает и отображает следующие результаты:


Исходные данные (матрицы y, x1, x2):
Z1 =
   52.8000
   48.4000
   54.2000
   50.0000
   54.9000
   53.9000
   53.1000
   52.4000
   53.0000
   52.9000
   53.1000
   60.1000

Z2 =
   16.3000
   16.8000
   18.5000
   16.3000
   17.9000
   17.4000
   16.1000
   16.2000
   17.0000
   16.7000
   17.5000
   19.1000

Z3 =
   99.5000
   98.9000
   99.2000
   99.3000
   99.8000
   99.6000
   99.8000
   99.7000
   99.8000
   99.9000
  100.0000
  100.2000

Искомый вектор коэффициентов (B):
 -408.4585
    1.7208
    4.3373
Отклонение модели от экспериментальных значений на:
    1.6438
   -1.0142
    0.5592
   -0.2887
   -0.3107
    0.4172
    0.9868
    0.5484
   -0.6620
   -0.6794
   -2.2898
    1.0894
Сумма квадратов отклонений:
   13.0018
Тогда наблюдаемые значения критерия Стьюдента:
    4.4353    4.8228    4.6202
Табличное значение критерия Стьюдента:
    2.2600
Исследуем коэффициент №1:
Коэффициент значимый, т.е. имеет нулевое значение и в генеральной совокупности
 -408.4585
Исследуем коэффициент №2:
Коэффициент значимый, т.е. имеет нулевое значение и в генеральной совокупности
    1.7208
Исследуем коэффициент №3:
Коэффициент значимый, т.е. имеет нулевое значение и в генеральной совокупности
    4.3373
Значение вектора искомых коэффициентов на следующем шаге (после удаления незначимых коэффицентов):
 -408.4585
    1.7208
    4.3373
Отклонение модели от экспериментальных значений на:
    1.6438
   -1.0142
    0.5592
   -0.2887
   -0.3107
    0.4172
    0.9868
    0.5484
   -0.6620
   -0.6794
   -2.2898
    1.0894
Сумма квадратов отклонений:
   13.0018
Тогда наблюдаемые значения критерия Стьюдента:
    4.4353    4.8228    4.6202
Табличное значение критерия Стьюдента:
    2.2600
Исследуем коэффициент №1:
Коэффициент значимый, т.е. имеет нулевое значение и в генеральной совокупности
 -408.4585

Исследуем коэффициент №2:
Коэффициент значимый, т.е. имеет нулевое значение и в генеральной совокупности
    1.7208

Исследуем коэффициент №3:
Коэффициент значимый, т.е. имеет нулевое значение и в генеральной совокупности
    4.3373

Значение вектора искомых коэффициентов на следующем шаге (после удаления незначимых коэффицентов):
 -408.4585
    1.7208
    4.3373

Вид иследуемой модели:
Y = -408.459 + 1.72083*X1 + 4.33734*X2

Комментариев нет:

Отправить комментарий