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
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
相关文章推荐
- 机器学习中的逻辑回归和线性回归的matlab程序实现
- Matlab中计算量较大的程序运行管理注意事项
- 《MATLAB在语音信号分析和合成中的应用》随书附带程序下载 程序打不开
- C#中调用Matlab程序
- 对流方程的有限差分数值解法(步长定律、固有差分格式、matlab程序和输出图形)
- 坐标下降法(坐标上升法)matlab程序
- 基于小波包变换和高阶统计量的高斯判别准则的红外小目标的分割程序V2.0-MATLAB版
- 分享五个关于特征选择的MATLAB实现程序
- matlab练习程序(非负矩阵分解)
- 留学生作业代写 编程代写 有偿代写 python matlab数学建模 机器学习 深度学习 c# c++ 数学 算法 论文程序代写
- matlab练习程序(zs图像细化)
- MATLAB中的程序时间cost的显示
- 龙贝格积分-matlab通用程序
- matlab好玩小程序(画心形)【matlab】
- 【转载】matlab练习程序(图像Haar小波变换)
- 加快Matlab程序编程效率的建议
- 海明嵌入Hamming Embedding生成Binary Signature之matlab程序代码
- matlab程序优化以及eclipse与github的结合
- 安装及调用Matlab程序可能存在的问题解决办法
- matlab清理程序onCleanup