Matlab 相关系数的计算与作图

相关系数(Correlation coefficient)用于衡量两个变量之间的线性相关程度大小,即,Y随X增大而增大,则X与Y的关系为线性正相关;Y随X减小而减小,则X与Y的关系为线性负相关。最常用的相关系数是20世纪英国统计学家皮尔逊提出的皮尔逊相关系数(Pearson correlation coefficient)。

需要注意的是,皮尔逊相关系数要求数据符合如下约束:

  1. 两个变量之间的关系属于线性关系。
  2. 两个连续变量。
  3. 变量符合正态分布,或接近正态分布的单峰分布。(不符合会有什么问题?)
  4. 两个变量的观测值成对出现,且每对观测值之间相互独立。

计算相关系数

计算相关系数只要一行代码,输入为两个列向量,长度必须相同,输出分别是相关系数和 p 值。一般来讲,p 值小于 0.05 则属于显著相关。

[coef, pval] = corr(X, Y);

可视化相关结果

相关系数的计算和作图方法都有很多种,这里只是一种示范。

figure,
set(gcf,'InvertHardCopy','off','color','white');
mdl = fitlm(X, Y);
h = plotAdded(mdl);
set(h(1),'Marker','.');
xlabel('X');
ylabel('Y');
title(sprintf('p = %g', pval));

对变量之间的线性相关做直线拟合。这部分代码计算了几个常用的统计量,可用于分析结果或者自己画图。

p = polyfit(X, Y, 1); % fitted coeffcient p
yFit = polyval(p, X); % estimate fitted Y with X and p.
yresid = Y - yFit; % error between Y and estimated Y
SSresid = sum(yresid.^2); % SSE, Sum of Squares Errors (residuals)
SStotal = (length(Y)-1)*var(Y); % SST, Total Sum of Squares
rsq = 1 - SSresid/SStotal % compute r square, coefficient of determination

figure,
set(gcf,'InvertHardCopy','off','color','white');
hold all,
scatter(X, Y);
plot(X,yFit,'-');
xlabel('X');
ylabel('Y');
title(sprintf('p = %g', pval));

欢迎和感谢一切改进建议或意见。

你可能感兴趣的:(Matlab 相关系数的计算与作图)