Загрузка данных



clc
clear
close all

% Исходные данные, вариант 13
X = [13 13.5 14 14.5 15 15.5 16 16.5 ...
     17 17.5 18 18.5 19 19.5 20 20.5 21];

Y = [-54.06 -55.20 -68.68 -57.39 -62.38 ...
     -61.11 -62.22 -65.21 -71.11 -75.04 ...
     -79.74 -78.14 -78.07 -84.54 -86.53 ...
     -86.62 -88.36];

% Линейная регрессия, степень 1
XR = [X'.^0 X'];
[b, bint, r, rint] = regress(Y', XR);

% Коэффициенты
b1 = b(2);             % при X
b0 = b(1);             % свободный член

% Коэффициент детерминации
Ycalc = XR*b;
R2 = 1 - sum((Y' - Ycalc).^2) / ...
         sum((Y' - mean(Y')).^2);

% График исходных данных и регрессии
figure(1)
xf = linspace(min(X), max(X), 100);
plot(X, Y, 'bo', xf, b0 + b1*xf, 'r-')
grid on
xlabel('X')
ylabel('Y')
title('Линейная регрессия, вариант 13')
legend('Точки', 'Прямая')

% График остатков и доверительных интервалов
figure(2)
rcoplot(r, rint)

% Определение выбросов
out = (rint(:,1) > 0) | (rint(:,2) < 0);

% Удаление выбросов
X2 = X(~out);
Y2 = Y(~out);

% Линейная регрессия после удаления выбросов
XR2 = [X2'.^0 X2'];
[b2, bint2, r2, rint2] = regress(Y2', XR2);

% Новые коэффициенты
b21 = b2(2);           % при X
b20 = b2(1);           % свободный член

% Новый коэффициент детерминации
Ycalc2 = XR2*b2;
R2new = 1 - sum((Y2' - Ycalc2).^2) / ...
            sum((Y2' - mean(Y2')).^2);

% График после удаления выбросов
figure(3)
xf2 = linspace(min(X2), max(X2), 100);
plot(X2, Y2, 'bo', xf2, b20 + b21*xf2, 'r-')
grid on
xlabel('X')
ylabel('Y')
title('Линейная регрессия без выбросов')
legend('Точки без выбросов', 'Прямая')

% Вывод результатов
disp('Исходная модель:')
disp(['Y = ', num2str(b0), ' + (', num2str(b1), ')*X'])
disp(['R^2 = ', num2str(R2)])

disp('Модель после удаления выбросов:')
disp(['Y = ', num2str(b20), ' + (', num2str(b21), ')*X'])
disp(['R^2 = ', num2str(R2new)])

% Сохранение очищенных данных в Excel
data = [X2(:) Y2(:)];
writematrix(data, 'variant13_clean.xlsx')