MATLAB中1个剩余残差值的线性相关

时间:2014-12-11 17:58:29

标签: matlab line data-modeling correlation data-fitting

我有一组数据,X和Y,我希望拟合一条线,得到R和R ^ 2的值,并根据最佳拟合线值和实际值之间的差异绘制残差图数据。这是我的MATLAB代码:

maxx = max(X); minx = min(X);
fitx = minx:maxx / 1000:maxx;
coeff = polyfit(X,Y,1);
fity = polyval(coeff,fitx);

temp = corrcoef(X,Y); 
R = temp(2); R_squared = R^2;

ysub = polyval(coeff,X); 
residuals = Y - ysub;

subplot(1,2,1);
plot(X,Y,'+',fitx,fity,'r')
xlabel(['R = ' num2str(R) '; R^2 = ' num2str(R_squared)]);

subplot(1,2,2);
bar(residuals);

所以我测试了什么应该是一个完美适合一条线的“理想”数据集,果然,我得到R和R ^ 2值为1,我的第一个情节看起来很好,但我的残差从7000到-3000不等。如果我的R值为1,我的残差不应该为0吗?

我在这里误解了什么?

以下是样本数据集:

X = [100 200 290 390 480 580 670 760 860 950]
Y = 1.0e+07 * [0.2429 0.4929 0.7183 0.9689 1.1946 1.4453 1.6711 1.8968 2.1477 2.3735]

1 个答案:

答案 0 :(得分:1)

使用样本数据集进行诊断会更容易。

猜测,问题是你的第一行应该是:

maxx = max(X); minx = min(X);

你拥有它的方式minx=min(Y)会扭曲你的fitx和fity值

编辑:

感谢您提交样本数据。你现在看到的只是舍入错误。你的R实际上并不是1,它真的非常接近。试试:

 R-1

您的数据结果为-1.0301e-07,表明相关性并不完美。如果R恰好为1,那么你是正确的,残差将为零。根据数据的大小,您的残差非常小(第一点为<0.3%,其余为至少10倍),并且与您测量的相关系数一致。

我认为一切正常。