作者ejialan (eji)
看板MATLAB
标题Re: [讨论] 请问Matlab算R-squared值
时间Thu Dec 16 13:34:55 2010
※ 引述《Cinkot (...)》之铭言:
: : → banco:Matlab算出来的0.9782要平方 0.9782^2 = 0.9568 12/14 23:22
: : → Cinkot:原来如此~ 12/15 01:10
: : → Cinkot:我刚刚又试了 [b,bint,r,rint,stats] = regress(y,X) 12/15 01:11
: : → Cinkot:help说stats包含了R平方 可是套进我的数据没有用.. 12/15 01:11
: : → Cinkot:就是算不出来.. 12/15 01:12
: : → Cinkot:而help说X should include a column of 1 12/15 01:12
: : → Cinkot:但数据里面都是没有1可以include.. 12/15 01:12
: : → Cinkot:後来用cftool去fitting 出来的R是0.9995!! 12/15 01:14
: : → Cinkot:可是我还是不知道要怎麽算R.. 12/15 01:14
: 感谢B大解说~
: 昨天try了後来用 fit 有算出来
: type=fittype('a*x.^4+b*x.^3+c*x.^2+d*x+e');
: [coef stats]fit(xdata,ydata,type,'start',[0 0 0 0 0])
: 这样在stats.rsquare的值就是R值了
: 只是不知道有没大大知道多项式的R值公式阿?
: 网路上的资料都是 1-SSR/TSS 的就是Matlab的corrcoef
: 感谢
R-Square = 1 - SSE/SST
不管用什麽model fitting都是这个公式
所以只要把fitting得到的系数代入你给定的model
算出在xdata上的model值
再套SSE SST的定义就是R-Square
举例
xdata=linspace(0,1,10)';
ydata=sin(xdata);
type=fittype('a*x.^5+b*x.^3+c*x.^2+d*x+e');
[coef ,stats]=fit(xdata,ydata,type,'start',[0 0 0 0 0])
a = coef.a;
b = coef.b;
c = coef.c;
d = coef.d;
e = coef.e;
yi=a*xdata.^5+b*xdata.^3+c*xdata.^2+d*xdata+e; %model values
ybar=mean(ydata); %资料平均
SSE=sum((yi-ydata).^2);
SST=sum((ydata-ybar).^2);
R2=1-SSE/SST
这样计算的R2和stats.rsquare一样
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 140.121.146.175
1F:推 gamer:因为他用不一样MODEL去fitting出来的data是不一样的,当然会 12/16 14:21
2F:→ gamer:有好几个R^2 12/16 14:21
3F:推 Cinkot:原来如此~ 好一目了然的范例! 感谢您 12/16 14:24