声振论坛

 找回密码
 我要加入

QQ登录

只需一步,快速开始

查看: 2556|回复: 4

[综合讨论] Regress 回归分析的一个疑问

[复制链接]
发表于 2011-9-20 12:55 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?我要加入

x
有如下一段代码用以讨论regress命令求回归可决系数R2或者相关系数r:clear all
clc

x = 5.*randn(30,1);
y = 2.*x;
z = 2.*randn(length(x),1);
yz = y+z;
[b,bint,r,rint,states] = regress(yz,x);
b
states
y1 = b(1).*x;
y2 = mean(yz).*ones(length(x),1);
SST = sum((yz-y2).^2)
SSR = sum((y1-y2).^2)
SSE = sum((yz-y1).^2)
SST-SSR-SSE
R = SSR/SST
r = sqrt(R)
figure(1)
plot(x,yz,'bo');

x = 5.*randn(30,1);
y = 2.*x+1;
yz = y+z;
[b,bint,r,rint,states] = regress(yz,[ones(length(x),1),x]);
b
states
y1 = b(1)+b(2).*x;
y2 = mean(yz).*ones(length(x),1);
SST = sum((yz-y2).^2)
SSR = sum((y1-y2).^2)
SSE = sum((yz-y1).^2)
SST-SSR-SSE
R = SSR/SST
r = sqrt(R)
figure(2)
plot(x,yz,'bo');


%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
问题是,最简单的形如y=kx或者y=k/x的一元回归如何做?用Regress命令进行,它总会建议你添加一列常数项,states中的第一项R2理论上应该和用定义的R=SSR/SST计算结果一样。当为y=2*x+1时,确实正确,但是y=2*x时,两者不等?当面对实际数据的时候,states中的R2可能为负数,个人理解为表明回归的模型不合理。但是,如果我能确定一元线性关系中我就是不需要常数项,代码中的例子暗示我在面对y=kx或者y=k/x时,Regress的R2计算结果不可信?
另外,R2=SSR/SST的这个定义是不是也是一定要在y=a+bx的模型下才成立?如果没有a这一项的回归模型,感觉计算得到的R2有时候会大于1?
请指教,谢谢!

回复
分享到:

使用道具 举报

发表于 2011-9-26 23:30 | 显示全部楼层
本帖最后由 ChaChing 于 2011-9-26 23:44 编辑

regress的help中, 不是有此Note
When computing statistics, X should include a column of 1s so that the model contains a constant term. The F statistic and its p-value are computed under this assumption, and they are not correct for models without a constant. The R2 statistic can be negative for models without a constant, indicating that the model is not appropriate for the data.

还有要求y=kx, 个人习惯简单使用k=xyz!
& Ref:   regress怎么让常数项为0 http://forum.vibunion.com/thread-88355-1-1.html
  Regress 回归分析的一个疑问 http://forum.vibunion.com/thread-105844-1-1.html
...
 楼主| 发表于 2011-9-28 08:32 | 显示全部楼层
回复 2 # ChaChing 的帖子

谢谢你的回复了,回归得到y=k/x模型中的k系数不难。我的主要问题是如何评价定量化这个回归模型和我的离散数据间的拟合程度。下面的一段代码作为例子说明我的问题:
%%%%%%%%%%%%%%%%%
x = 5:1:35;
x = x(:);
y = 90./x+10.*rand(size(x));
figure
plot(x,y,'bo');
axis([0 40 0 25]);

[b,bint,r,rint,stats]  = regress(y,(1./x));
k = (1./x)\y;
y1 = b./x;
corrcoef(y,y1)

y2 = 90./x;
corrcoef(y,y2)

y3 = 200./x;
corrcoef(y,y3)

corrcoef(y1,y2)
corrcoef(y1,y3)
corrcoef(y2,y3)
%%%%%%%%%%%%%%%%%
可以看到,回归得到的k和b值是一样的,说明效果相同。但是,我用corrcoef评价预测值和被拟合值得相关系数,发现和预测模型无关,只要是反比例函数,相关系数是相同的。但是回归分析的相关系数r应该是描述回归拟合的某一特定模型和离散数据间的。这样,岂不是说明相关系数r不好用来评价y=k/x的相关性了?
总结的问题即是:如何对基于y=k/x的回归模型进行拟合效果分析,比如可决系数R2或者相关系数r?
发表于 2011-9-28 16:31 | 显示全部楼层
怎感觉LZ误解了相关系数的意义了!
等比例增大相关系数本不就等於1
 楼主| 发表于 2011-9-29 00:46 | 显示全部楼层
本帖最后由 shapiro 于 2011-9-29 00:47 编辑

回复 4 # ChaChing 的帖子

所以关于回归出来的模型y1 = b./x和需要拟合的y = 90./x之间的相关性就是用corrcoef计算就行,计算得到的是否就可以作为r出现?
您需要登录后才可以回帖 登录 | 我要加入

本版积分规则

QQ|小黑屋|Archiver|手机版|联系我们|声振论坛

GMT+8, 2024-4-28 05:21 , Processed in 0.273513 second(s), 17 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表