%% 代码说明% 该程序为一元线性回归的实现,仅供学习参考,切勿抄袭% 输入:% X:为第一个变量的已知值,是一个列向量% Y:为第二个变量的已知值,是一个列向量% alpha:显著水平,不输入则默认为0.5% 输出:% coef:一元线性方程的系数% R_square:判定系数,越接近1,拟合越好;越接近0,拟合越差% F:F检验值% F_result:检验结果,若拒绝H0,表明存在显著线性关系%% 代码实现function[coef, R_square, F, F_result]=UnivariateLinearRegression(X, Y, alpah)% 判断是否输入显著水平if nargin ==2
alpah =0.05;end% 绘制散点图
figure
scatter(X', Y')title("散点图")% 一些中间值
n =length(X);% 样本数
x_bar =sum(X)/ n;% x的平均值
y_bar =sum(Y)/ n;% x的平均值% 求解回归系数coef
coef =zeros(1,2);coef(2)=(n *sum(X .* Y)-sum(X)*sum(Y))/(n *sum(X .* X)-sum(X)*sum(X));coef(1)= y_bar -coef(2)* x_bar;% 绘制拟合曲线
figure
scatter(X', Y')
hold on
plot(X',coef(1)*ones(1, n)+coef(2)* X')title("拟合曲线")% 求解判定系数
SST =sum((y_bar *ones(n,1)- Y).*(y_bar *ones(n,1)- Y));
Y_hat =coef(2)* X +coef(1);
SSR =sum((Y_hat-y_bar).*(Y_hat-y_bar));
R_square = SSR / SST;% 判定系数% 线性关系检验
SSE =sum((Y - Y_hat).*(Y - Y_hat));
F =(SSR)/((SSE)/(n -2));
v =finv(1- alpah,1, n -2);if F > v
F_result = "拒绝H0";else
F_result = "接受H0";end% 残差检验
E = Y - Y_hat;% 残差
figure
scatter(1:n, E');
hold on
plot(1:n,zeros(1, n),'--')title("残差图")end
Pearson相关系数代码
%% 代码说明% 该程序为Pearson相关系数的实现,仅供参考学习,切勿抄袭% 输入:% X:为一组已知的数据,是列向量% Y:为另一组已知的数据,是列向量% alpha:为显著水平,不输入时默认为0.5% 输出:% r:为两组数据的Pearson相关系数% result:为结果,若"拒绝H0",则两个变量间存在显著线性关系%% 代码实现function[r, result]=PearsonCorr(X, Y, alpha)if nargin ==2
alpha =0.5;end
n =length(X);
r =(n *sum(X .* Y)-sum(X)*sum(Y))/((sqrt(n *sum(X .* X)-sum(X)*sum(X)))*(sqrt(n *sum(Y .* Y)-sum(Y)*sum(Y))));
t =abs(r)*sqrt((n -2)/(1- r * r));
w =tinv(1- alpha /2, n -2);if t > w
result = "拒绝H0,接受H1";else
result = "接受H0,拒绝H1";endend