%--------------------------------------------------------------------------
% 读取原始数据,调用regress函数作一元线性回归
%--------------------------------------------------------------------------
%*****************************读取数据,绘制散点图***************************
ClimateData = xlsread('data.xlsx'); % 从Excel文件读取数据
[mm,nn]=size(ClimateData);
if nn==3
x = ClimateData(:, 2:3); % 提取ClimateData的第1列,即自变量
end
if nn==2
x = ClimateData(:, 2); % 提取ClimateData的第1列,即自变量
end
y = ClimateData(:, 1); % 提取ClimateData的第5列,即因变量
plot(x, y, 'k.', 'Markersize', 15) % 绘制x和y的散点图
xlabel('旅客吞吐量(x)') % 给X轴加标签
ylabel('航空收入合计(y)') % 给Y轴加标签
%*****************************计算相关系数**********************************
if nn==3
A=[x(:,1) x(:,2) y];
R = corrcoef(A) %计算x和y的线性相关系数矩阵R
end
if nn==2
R = corrcoef(x, y)
end
%***********************调用regstats函数作一元线性回归************************
%regstats函数会自动在自变量矩阵左侧加一列1% xdata = [ones(size(x, 1), 1), x]; % 在原始数据x的左边加一列1,即模型包含常数项
% [b, bint, r, rint, s] =
stats=regstats(y, x); % 调用regstats函数作一元线性回归
% yhat = x*b; % 计算y的估计值
%***********************调用regress函数作一元线性回归************************
xdata = [ones(size(x, 1), 1), x]; % 在原始数据x的左边加一列1,即模型包含常数项
[b, bint, r, rint, s] = regress(y, xdata); % 调用regress函数作一元线性回归
% 定义元胞数组,以元胞数组形式显示系数的估计值和估计值的95%置信区间
head1 = {'系数的估计值','系数标准误差','系数的t stats','系数的P值','估计值的95%置信下限','估计值的95%置信上限'};
[head1; num2cell([b,stats.tstat.se,stats.tstat.t,stats.tstat.pval,bint])]
% 定义元胞数组,以元胞数组形式显示y的真实值、y的估计值、残差和残差的95%置信区间
head2 = {'y的真实值','y的估计值','残差','残差的95%置信下限','残差的95%置信上限'};
% 同时显示y的真实值、y的估计值、残差和残差的95%置信区间
[head2; num2cell([y, stats.yhat, r, rint])]
% 定义元胞数组,以元胞数组形式显示判定系数、F统计量的观测值、检验的p值和误差方差的估计值
head3 = {'AdjustedR^2','判定系数','F统计量的观测值','Significance F','误差方差的估计值','回归平方和ssr','残差平方和sse'};
[head3;stats.adjrsquare, num2cell(s), stats.fstat.ssr, stats.fstat.sse]
% 定义元胞数组,以元胞数组形式显示杜宾沃森检验值、杜宾沃森检查p值、
head4 = {'杜宾沃森检验值','杜宾沃森检验p值','残差自由度dfe'};
[head4; num2cell([stats.dwstat.dw,stats.dwstat.pval,stats.tstat.dfe])]
%*****************************绘制二维回归直线**********************************
if nn==2 %如果只有一个自变量,则绘制二维回归图
plot(x, y, 'k.', 'Markersize', 15) % 画原始数据散点
hold on
plot(x, stats.yhat, 'linewidth', 3) % 画回归直线
xlabel('旅客吞吐量(x)') % 给X轴加标签
ylabel('航空收入合计(y)') % 给Y轴加标签
legend('原始散点','回归直线'); % 加标注框
end
%*****************************绘制三维回归图**********************************
if nn==3 %如果只有一个自变量,则绘制二维回归图
x1=x(:,1);
x2=x(:,2);
scatter3(x1,x2,y,'filled')
hold on
x1fit = min(x1):100000:max(x1);
x2fit = min(x2):100000:max(x2);
[X1FIT,X2FIT]= meshgrid (x1fit,x2fit); %//制成网格数据
YFIT = b(1) + b(2) * X1FIT + b(3) * X2FIT;
mesh(X1FIT,X2FIT,YFIT);
end