MATLAB 线性回归与非线性回归以及权重的使用Weight
(2014-07-05 10:30:58)
标签:
matlab回归线性回归非线性回归回归权重regress |
分类: 科研 |
今天讲解两个MATLAB回归命令 regress 和 nlinfit
2、[beta,r,J]=nlinfit(x,y,'myfun',beta0,'Weights',w)
bint :
回归系数的区间估计,默认 95%。其他区间可以在1式的X后加一个数,如0.05,0.01等
r
:
残差
rint
: 置信区间
stats
:检验回归模型的统计量
2、beta :
回归系数
r
:残差
J
: 雅可比矩阵
Y=a+b*(z1-6)+c*(z2+d)^2+e*(z3+d)
----------------
( 1 )
Y= a+b*(z1-6)+c*(z2+d)^2+e*(z3+d)+eps
---------------- ( 2 )
regress 适用于 线性 的一元 和 多元回归
nlinfit 可用于 线性、非线性 一元 和 多元回归
命令格式: 1、[b,bint,r,rint,stats]=regress(Y,X)
解释: 1、b
: 回归系数
实例:考虑如下一个回归模型
待定系数: a,b,c,d,e
而
Y,z1,z2,z3 都是已知的观测值
对于(1)式来说,实际上他不是一个线性模型,因为参数 c和d,e和d
都有耦合。那么nlinfit自然可以做,但是想用regress做怎么办呢,简单,给d先赋值即可,就变成了线性的,对吧。
方法一:
先用regress来做。
d=1;
%
先给d一个值,使(1)变为线性
x1=ones(length(Y),1);
% X矩阵的第一列,因为有a常数项,所以第一列是1
x2=z1-6;
%
为了不混淆,我(1)式里用了z来代表自变量
x3=(z2+d)^2;
x4=z3+d;
X=[x1,x2,x3,x4];
% 定义X,注意 x1到x4 都必须是列向量
Y=Y(:);
%将Y变为列向量
[b,bint,r,rint,stats]=regress(Y,X);
xigema=std(r);
%
这个是模型的残差方差,即残差是正态分布,均值为0,标准差为xigema
disp(b);
%显示系数,依次是 a b c e
disp(xigema);
% 显示标准差
那先在其实不完全是回归好了,因为你的d是指定的,所以不是个完整的最好系数。那怎么办呢?简单,判断一个回归好不好就看你的残差小不小,也就是说上面的那个xigema如果很大,那就不好了,表明你回归出来的跟观测值相差太远。因此,基于这个原理,我们可以用
for 循环将上面的代码中的 d 取一个范围,然后每个d 都有一个xigema,哪个xigema小,哪个就是对应的 d
值的系数。然后用这个d 去回归 a b c e 懂了吧
回归出来以后,如果想看一下方程的图,可以把系数代入(1)式,然后产生一些列点。注意,这时候方程后面要加一项,就是残差,具体如下
其中,eps 在 MATLAB里生成为 eps=xigema*randn(1);
xigema就是上面回归出来的标准差
方法二:
用nlinfit来做。首先要自己定义函数文件
Y=myfun(beta,X)
a=beta(1);b=beta(2);c=beta(3);d=beta(4);e=beta(5);
% 将系数都存到beta里
z1=X(:,1);z2=X(:,2);z3=X(:,3);
Y=a+b*(z1-6)+c*(z2+d).^2+e*(z3+d);
%一定要注意是向量运算,改加 . 的一定加上
把这个函数保存为单独的.m文件
然后,主程序是
Y=Y(:);
x=[z1,z2,z3];
% z还是列向量
beta0=[0.4;0.3;-0.002;6];
% 这里是定义初始尝试的值
w=ones(length(A),1);
% 定义一个一致权重,即所有的观测值重要性一样
w(4)=0.5;
% 这个表示将第4个观测值的权重减为其他的一半
[beta,r,J]=nlinfit(x,Y,'myfun',beta0,'Weights',w);
% 一致权重可以不写 'Weights', w
xigema=std(r) ;
disp(beta);
disp(xigema);
beta含有系数 a b c d e, 残差 还是正态分布,均值为0,方差为xigema
这里需要特别说明的就是这个权重。
如果我们的观测值都比较好,就是没有很偏离的现象,那么我们认为每个观测值对回归结果的贡献都是一样的。那么我们就定义w
是一个1向量,长度和Y一样,或者 将 命令中的 'Weights', w
去掉即可。但是,正如上面w(4)描述,我认为第四个点有点偏离,不是那么重要,可以将他的权重下调,使他对结果的影响减小。
可以肯定,定义不同的w,结果是不一样的。权重的意义在于当我们的观测值中有一些很奇怪的点的时候,比如说由于记录数据时候的失误啊,仪器当时失效啊造成的,我们就可以剔除。当然,剔除就相当于把这个点的权重设置为0.
那么有时候我们不想剔除,就想把他的重要性降低一点点,就可以用权重向量来做。方便吧。
MATLAB回归 线性回归 非线性回归 回归权重 regress
前一篇:关于狗肉