一、说明:
1、本程序是研究生教材《数理统计》(杨虎、刘琼、钟波 编著) 例(P133)的Matlab编程解答程序。教材上的例题只做了回归方程显著性分析和一次回归系数显著性分析(剔除x1后没有再检验x2和x3)。
2、本程序在以上的基础之上,还分别检验了x2和x3,并且计算精度更高。
3、本程序可根据用户的需要,在输入不同的显著性水平α之下得到相应的解答。
4、本程序移植性强,对于其他数据,只需要改变excel中的数据即可。
5、本程序输出的可读性强,整洁美观。
二、数据入下(将数据存入excel表格,文件名为。注意数据是按x1,x2,…,xk,y这样来列来存储。若不是3个变量,则相应增减数据列就行。):
2 | 18 | 50 | |
7 | 9 | 40 | |
5 | 14 | 46 | |
12 | 3 | 43 | |
1 | 20 | ||
3 | 12 | 40 | |
3 | 17 | ||
6 | 5 | 39 | |
7 | 8 | 37 | |
0 | 23 | 55 | |
3 | 16 | 60 | |
0 | 18 | 49 | |
8 | 4 | 50 | |
6 | 14 | 51 | |
0 | 21 | 51 | |
3 | 14 | 51 | |
7 | 12 | 56 | |
16 | 0 | 48 | |
6 | 16 | 45 | |
0 | 15 | 52 |
9 | 0 | 40 | |
4 | 6 | 32 | |
0 | 17 | 47 | |
9 | 0 | 44 | |
2 | 16 | 39 | |
9 | 6 | 39 | |
12 | 5 | 51 | |
6 | 13 | 41 | |
12 | 7 | 47 | |
0 | 24 | 61 | |
5 | 12 | 37 | |
4 | 15 | 49 | |
0 | 20 | 45 | |
6 | 16 | 42 | |
4 | 17 | 48 | |
10 | 4 | 48 | |
4 | 14 | 36 | |
5 | 13 | 36 | |
9 | 8 | 51 | |
6 | 13 | 54 |
5 | 8 | 100 | |
5 | 11 | 44 | |
8 | 6 | 63 | |
2 | 13 | 55 | |
7 | 8 | 50 | |
4 | 10 | 45 | |
10 | 5 | 40 | |
3 | 17 | ||
4 | 15 | 72 |
%----------------------------by ggihhimm----------------------------
%《数理统计》杨虎、刘琼、钟波 编著 例 多元线性回归及显著性检验 完整解答
% 输入需要的显著水平α(默认α=),计算出不同结果(见运行结果)
% 该程序也适合其他维数的数据分析(只需改变excel表格中的数据即可)
%----------------------------by ggihhimm----------------------------
clear;clc;
data=xlsread('','sheet1');
xi=data(:,1:end-1);
[n,k]=size(data);
k=k-1;
index_of_xi_array=ones(1,k);
X=[ones(n,1) xi];
Y=data(:,end);
fprintf('第1次计算结果:\\r')
beta_mao=((X'*X)\\X'*Y)';
fmt_str0='';
for i0=1:k+1
fmt_str0=[fmt_str0 'β' num2str(i0-1) ' = %\\r'];
end
fprintf(fmt_str0,beta_mao)
fprintf('\\r')
%%检验回归方程的显著性
x_ba=mean(xi);
y_ba=mean(Y);
St_square=sum(Y.^2)-n*y_ba^2;
lxy=sum((xi-ones(n,1)*x_ba).*((Y-y_ba)*ones(1,k)));
Sr_square=sum(beta_mao(2:end).*lxy);
Se_square=St_square-Sr_square;
c_flag=Sr_square/Se_square;
F_alpha=input('>>>>>>请输入您要求的显著性水平(0<α<1)α= ');
while ~(isscalar(F_alpha) && F_alpha<1 && F_alpha>0)
F_alpha=input('您的输入有误,请重新输入一个大于0,小于1的数,α= ');
end
F_fenweidian=finv(1-F_alpha,k,n-k-1);
c=k/(n-k-1)*F_fenweidian;
if c_flag>c
fprintf(['\\r--------------------回归方程显著性检验(H0:β1=β2=...=βk=0)' ...
'--------------------\\r经过计算:拒绝H0,原假设不成立。'])
else
fprintf(['\\r--------------------回归方程显著性检验(H0:β1=β2=...=βk=0)' ...
'--------------------\\r经过计算:接受H0,原假设成立。'])
end
%%检验回归系数的显著性(循环检验,直到OK,得出最后结果)
fprintf(['\\r\\r-----------------回归系数显著性检验(分别对β1、β2、...、βk进行)' ...
'------------------'])
flag_go_on=1;
num_of_loop=0;
while flag_go_on
cij=inv(X'*X);
cii=diag(cij);
F_fenweidian_1=finv(1-F_alpha,1,n-k-1);
ci=sqrt(cii(2:end)*Se_square*F_fenweidian_1/(n-k-1));
format_str='%';
for ii=1:k-1
format_str=[format_str '%'];
end
fprintf(['\\r第%d次检验:\\rcii: ' format_str '%\\r ci: ' ...
format_str '\\rβi:' format_str '%'],num_of_loop+1,cii,ci,beta_mao)
if ~all(abs(beta_mao(2:end))>ci')
flag_go_on=1;
beta_1tok=beta_mao;
beta_1tok(1)=[];
fi_xin=beta_1tok.^2./cii(1:end-1)';
min_fi=min(fi_xin);
beta_index=find(fi_xin==min_fi)+1;
fprintf('\\rx%d对y的线性影响最不显著( |β%d|=% )。删除x%d,进行第%d次计算:',...
beta_index-1+num_of_loop,beta_index-1+num_of_loop,...
abs(beta_mao(beta_index)),beta_index-1+num_of_loop,...
beta_index-1+num_of_loop+1)
else
fmt_str2='x%d';
index_of_xi=find(index_of_xi_array);
for i2=1:length(find(index_of_xi))-1
fmt_str2=[fmt_str2 '、x%d'];
end
fprintf(['\\r\\r经过检验,剩余所有变量:' ...
fmt_str2 '对y的线性影响均显著。检验结束。\\r'],index_of_xi)
flag_go_on=0;
end
if flag_go_on
num_of_loop=num_of_loop+1;
k=k-1;
if ~k
fprintf('\\r\\r警告:通过一一对所有变量做显著性检验,已剔除所有变量!');
break;
end
beta_mao=beta_mao-beta_mao(beta_index)/cii(beta_index)*cij(beta_index,:);
beta_mao(beta_index)=[];
fmt_str1='';
for i1=2:k+1
fmt_str1=[fmt_str1 'β' num2str(i1-1+num_of_loop) ' = %\\r'];
end
fprintf(['\\rβ0 = %\\r' fmt_str1],beta_mao)
X(:,beta_index)=[];
index_of_xi_array(beta_index-1+num_of_loop-1)=0;
xi=X(:,2:end);
x_ba=mean(xi);
lxy=sum((xi-ones(n,1)*x_ba).*((Y-y_ba)*ones(1,k)));
Sr_square=sum(beta_mao(2:end).*lxy);
Se_square=St_square-Sr_square;
end
end
四、运行结果如下(分别为α=和 α=的运行结果):
第1次计算结果:
β0 =
β1 =
β2 =
β3 =
>>>>>>请输入您要求的显著性水平(0<α<1)α=
-----------------------------------α =
--------------------回归方程显著性检验(H0:β1=β2=...=βk=0)--------------------
经过计算:拒绝H0,原假设不成立。
-----------------回归系数显著性检验(分别对β1、β2、...、βk进行)------------------
第1次检验:
cii:
ci:
βi:
x1对y的线性影响最不显著( |β1|= )。删除x1,进行第2次计算:
β0 =
β2 =
β3 =
第2次检验:
cii:
ci:
βi:
x2对y的线性影响最不显著( |β2|= )。删除x2,进行第3次计算:
β0 =
β3 =
第3次检验:
cii:
ci:
βi:
经过检验,剩余所有变量:x3对y的线性影响均显著。检验结束。
第1次计算结果:
β0 =
β1 =
β2 =
β3 =
>>>>>>请输入您要求的显著性水平(0<α<1)α=
-----------------------------------α =
--------------------回归方程显著性检验(H0:β1=β2=...=βk=0)--------------------
经过计算:拒绝H0,原假设不成立。
-----------------回归系数显著性检验(分别对β1、β2、...、βk进行)------------------
第1次检验:
cii:
ci:
βi:
经过检验,剩余所有变量:x1、x2、x3对y的线性影响均显著。检验结束。下载本文