我有一组数据,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]
答案 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倍),并且与您测量的相关系数一致。
我认为一切正常。