【大数据分析与挖掘】matlab实现——多元线性回归模型

一、实验目的

掌握有关多元线性回归的理论知识,从中了解回归分析方法的数学模型、基本思想、方法及应用。

二、实验任务

对多元线性回归实例进行编码计算,实例如下:

三、实验过程



注意,在计算估计区间时,我所使用的算法和书上略有不同,是另一种算法,预测结果有所差异,但都是正确的。详见代码。

四、实验结果

实现平台:Matlab 2022A
实验代码:

% 输入数据
y = [342,466,492,483,530,553,581.5,634.8,656.1,664.4,688.3,684.4]; % 水路客运量
x1 = [520,522.9,527.1,531.5,534.7,537.4,540.4,543.2,545.3,551.5,554.6,557.93]; % 市人口数
x2 = [211.9,244.6,325.1,528.1,645.1,733.1,829.7,926.3,1003.1,1110.8,1235.6,1406]; % 城市GDP值

% 参数估计
y_mean = mean(y);
x1_mean = mean(x1);
x2_mean = mean(x2);

l_11 = sum((x1 - x1_mean).^2);
l_22 = sum((x2 - x2_mean).^2);
l_12 = sum((x1 - x1_mean).*(x2 - x2_mean));
l_21 = l_12;
l_1y = sum((x1 - x1_mean).*(y - y_mean));
l_2y = sum((x2 - x2_mean).*(y - y_mean));
l_yy = sum((y - y_mean).^2);


% 解方程组
b1_hat=(l_1y*l_22-l_2y*l_12)/(l_11*l_22-l_12*l_21);
b2_hat=(l_2y*l_11-l_1y*l_21)/(l_11*l_22-l_12*l_21);
b0_hat=y_mean-b1_hat*x1_mean-b2_hat*x2_mean;

%拟合优度检验
TSS = sum((y - y_mean).^2);
y_hat = b0_hat+b1_hat*x1+b2_hat*x2;
ESS = sum((y_hat - y_mean).^2);
R2=ESS/TSS;
n = length(y);
m = 2;%自变量个数
R2_hat = 1-(1-R2)*((n-1)/(n-m-1));

%F检验
RSS = sum((y - y_hat).^2);
F = ((ESS/m)/(RSS/(n-m-1)));
alpha=0.05;%显著性水平
F_critical = finv(1 - alpha, m, n - m - 1);% 计算临界值

%t检验
% 计算残差标准差
sigma = sqrt(RSS / (n - m - 1));
% 计算每个回归系数的标准误差
SE_b0 = sigma * sqrt(1/n + x1_mean^2*l_22/l_11/l_22 - 2*x1_mean*l_12/l_11/l_22 + l_12^2/l_11/l_22);
SE_b1 = sigma / sqrt(l_11);
SE_b2 = sigma / sqrt(l_22);
% 计算每个回归系数的 t 统计量
t_b0 = b0_hat / SE_b0;
t_b1 = b1_hat / SE_b1;
t_b2 = b2_hat / SE_b2;
% 计算 t 临界值
t_critical = tinv(1 - alpha/2, n - m - 1);

%预测分析
% 新的自变量值
x1_new = 560;
x2_new = 1546;

% 计算预测值
y_hat_new = b0_hat + b1_hat * x1_new + b2_hat * x2_new;

% 计算预测值的标准误差
SE_pred = sqrt(sigma^2 * (1 + 1/n + ((x1_new - x1_mean)^2) / l_11 + ((x2_new - x2_mean)^2) / l_22 - 2 * (x1_new - x1_mean) * (x2_new - x2_mean) / l_12));

% 计算预测区间的临界值
t_alpha_half = tinv(1 - alpha/2, n - m - 1);

% 计算预测区间
PI_low = y_hat_new - t_alpha_half * SE_pred;
PI_high = y_hat_new + t_alpha_half * SE_pred;


% 打印结果
fprintf('确定的二元回归方程为: y=%.2f+%.3f x1 %.3f x2\n', b0_hat,b1_hat,b2_hat);
% F检验结果,比较 F 统计量和临界值
if F > F_critical
    disp('回归方程具有显著性');
else
    disp('回归方程不具有显著性');
end

% T检验结果,比较 t 统计量和 t 临界值
if abs(t_b0) > t_critical
    disp('回归系数 b0 具有显著性');
else
    disp('回归系数 b0 不具有显著性');
end

if abs(t_b1) > t_critical
    disp('回归系数 b1 具有显著性');
else
    disp('回归系数 b1 不具有显著性');
end

if abs(t_b2) > t_critical
    disp('回归系数 b2 具有显著性');
else
    disp('回归系数 b2 不具有显著性');
end

%打印预测分析结果
fprintf('预测值 y_2004 = %.2f\n', y_hat_new);
fprintf('95%% 预测区间: [%.2f, %.2f]\n', PI_low, PI_high);

end
if abs(t_b2) > t_critical
disp(‘回归系数 b2 具有显著性’);
else
disp(‘回归系数 b2 不具有显著性’);
end
%打印预测分析结果
fprintf(‘预测值 y_2004 = %.2f\n’, y_hat_new);
fprintf(‘95%% 预测区间: [%.2f, %.2f]\n’, PI_low, PI_high);
实验结果:

  • 23
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Robbi_

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值