您的位置:首页 > 编程语言 > MATLAB

matlab线性回归程序

2014-03-25 09:05 239 查看
最近用Matlab做线性回归,用到命令regress,可是发现他没办法做回归系数的t检验,因此,自己就写了一个。参考书籍:《计量经济学》庞皓 科学出版社

function [B,beta,t,t0,sigma,rss,tss,R,R1,F,F0]=pureRegress(x,y,con)

%x是因子,n*p,不包括场数列,y是被解释变量,n*1.con是置信度,默认:0.95,一列代表一个因子

%{

依次输出:

B:系数,第一行为常数项

sigma:随机误差项的标准差

rss:总的误差和

tss:总变差和

R:r方,可决系数

R1:修正的可决系数

F:方程总体的f统计量

F0:在置信度为con时,临界f统计值

t:对系数进行检验时每个系数的t统计量

t0:t统计量临界值

beta:系数的区间估计值

%}

[n,k]=size(x);

eyes=eye(k+1,k+1);%对角单位矩阵

X=[ones(n,1),x];%构建结构阵X,

A=X'*X; %求算信息阵A,

C=eyes/A; %求算信息阵的逆阵

B=X\y; % 求算回归统计数向量,其中第一行为回归截距

y_1=X*B;%y的估计值序列

rss=sum((y-y_1).^2);%残差平方和

tss=sum((y-mean(y)).^2);%总变差

ess=tss-rss;%回归变差

R=1-(rss/tss);%未修正的r方或者说可决系数

R1=1-(n-1)/(n-k-1)*rss/tss;%修正的可决系数

if(R1<=0)

R1=0;

end

F=(ess/rss)*(n-k-1)/k;

F0=finv(con,k,n-k-1);

disp('现在进行f检验,对方程整体:')

if(F>=F0)

text=strcat('在显著性为',num2str(1-con),'的情况下,回归方程整体通过f检验');

disp(text)

else

text=strcat('在显著性为',num2str(1-con),'的情况下,回归方程没有通过f检验!!!!!');

disp(text)

end

sigma=sqrt(rss/(n-k-1));%误差的标准差

t=zeros(k+1,1);%每个系数对应的t统计量,注意:没有加绝对值

t0=abs(tinv((1-con)/2,n-k-1));

beta=zeros(k+1,2);%系数的估计值

disp('现在进行t检验(对系数)')

for j=1:(k+1)

cjj=C(j,j);

t(j,1)=B(j)/(sigma*sqrt(cjj));

if(abs(t(j,1))>=t0)

text=strcat('系数B',num2str(j),'通过了t检验');

disp(text)

else

text=strcat('系数B',num2str(j),'没有通过t检验!!!');

disp(text)

end

beta(j,1)=B(j)-t0*sigma*sqrt(cjj);

beta(j,2)=B(j)+t0*sigma*sqrt(cjj);

end

end
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: