Изложены основные понятия и принципы,
способствующие получению практических навыков, необходимых для построения
регрессионных моделей. Используются расчёты на ЭВМ в системе 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
Комментариев нет:
Отправить комментарий