研究生 数理统计多元线性回归及显著性检验Matlab程序完美版之欧阳化创编.docx
《研究生 数理统计多元线性回归及显著性检验Matlab程序完美版之欧阳化创编.docx》由会员分享,可在线阅读,更多相关《研究生 数理统计多元线性回归及显著性检验Matlab程序完美版之欧阳化创编.docx(9页珍藏版)》请在冰豆网上搜索。
研究生数理统计多元线性回归及显著性检验Matlab程序完美版之欧阳化创编
多元线性回归及显著性检验Matlab程序(完美版)
时间:
2021.02.06
创作:
欧阳化
一、说明:
1、本程序是研究生教材《数理统计》(杨虎、刘琼、钟波编著)例4.4.1(P133)的Matlab编程解答程序。
教材上的例题只做了回归方程显著性分析和一次回归系数显著性分析(剔除x1后没有再检验x2和x3)。
2、本程序在以上的基础之上,还分别检验了x2和x3,并且计算精度更高。
3、本程序可根据用户的需要,在输入不同的显著性水平α之下得到相应的解答。
4、本程序移植性强,对于其他数据,只需要改变excel中的数据即可。
5、本程序输出的可读性强,整洁美观。
二、数据入下(将数据存入excel表格,文件名为jc_p133_example.xls。
注意数据是按x1,x2,…,xk,y这样来列来存储。
若不是3个变量,则相应增减数据列就行。
):
2
18
50
4.3302
7
9
40
3.6485
5
14
46
4.483
12
3
43
5.5468
1
20
64
5.497
3
12
40
3.1125
3
17
64
5.1182
6
5
39
3.8759
7
8
37
4.67
0
23
55
4.9536
3
16
60
5.006
0
18
49
5.2701
8
4
50
5.3772
6
14
51
5.4849
0
21
51
4.596
3
14
51
5.6645
7
12
56
6.0795
16
0
48
3.2194
6
16
45
5.8076
0
15
52
4.7306
9
0
40
4.6805
4
6
32
3.2172
0
17
47
2.6104
9
0
44
3.7174
2
16
39
3.8946
9
6
39
2.7066
12
5
51
5.6314
6
13
41
5.8152
12
7
47
5.1302
0
24
61
5.391
5
12
37
4.4533
4
15
49
4.6569
0
20
45
4.5212
6
16
42
4.865
4
17
48
5.3566
10
4
48
4.6098
4
14
36
2.3815
5
13
36
3.8746
9
8
51
4.5919
6
13
54
5.1588
5
8
100
5.4373
5
11
44
3.996
8
6
63
4.397
2
13
55
4.0622
7
8
50
2.2905
4
10
45
4.7115
10
5
40
4.531
3
17
64
5.3637
4
15
72
6.0771
三、完整程序如下:
%----------------------------byggihhimm----------------------------
%《数理统计》杨虎、刘琼、钟波编著例4.4.1多元线性回归及显著性检验完整解答
%输入需要的显著水平α(默认α=0.02),计算出不同结果(见运行结果)
%该程序也适合其他维数的数据分析(只需改变excel表格中的数据即可)
%----------------------------byggihhimm----------------------------
clear;clc;
data=xlsread('jc_p133_example.xls','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='';
fori0=1:
k+1
fmt_str0=[fmt_str0'β'num2str(i0-1)'=%0.4f\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;
ifc_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;
whileflag_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='%15.4f';
forii=1:
k-1
format_str=[format_str'%13.4f'];
end
fprintf(['\r第%d次检验:
\rcii:
'format_str'%13.4f\rci:
'...
format_str'\rβi:
'format_str'%13.4f'],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|=%0.4f)。
删除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);
fori2=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
ifflag_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='';
fori1=2:
k+1
fmt_str1=[fmt_str1'β'num2str(i1-1+num_of_loop)'=%0.4f\r'];
end
fprintf(['\rβ0=%0.4f\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
四、运行结果如下(分别为α=0.01和α=0.02的运行结果):
第1次计算结果:
β0=0.7344
β1=0.1585
β2=0.1063
β3=0.0357
>>>>>>请输入您要求的显著性水平(0<α<1)α=0.01
-----------------------------------α=0.0100-----------------------------------
--------------------回归方程显著性检验(H0:
β1=β2=...=βk=0)--------------------
经过计算:
拒绝H0,原假设不成立。
-----------------回归系数显著性检验(分别对β1、β2、...、βk进行)------------------
第1次检验:
cii:
1.13550.00550.00210.0002
ci:
0.16220.10060.0284
βi:
0.73440.15850.10630.0357
x1对y的线性影响最不显著(|β1|=0.1585)。
删除x1,进行第2次计算:
β0=2.5302
β2=0.0231
β3=0.0362
第2次检验:
cii:
0.42740.00060.0002
ci:
0.05690.0302
βi:
2.53020.02310.0362
x2对y的线性影响最不显著(|β2|=0.0231)。
删除x2,进行第3次计算:
β0=2.6615
β3=0.0391
第3次检验:
cii:
0.40790.0002
ci:
0.0294
βi:
2.66150.0391
经过检验,剩余所有变量:
x3对y的线性影响均显著。
检验结束。
第1次计算结果:
β0=0.7344
β1=0.1585
β2=0.1063
β3=0.0357
>>>>>>请输入您要求的显著性水平(0<α<1)α=0.02
-----------------------------------α=0.0200-----------------------------------
--------------------回归方程显著性检验(H0:
β1=β2=...=βk=0)--------------------
经过计算:
拒绝H0,原假设不成立。
-----------------回归系数显著性检验(分别对β1、β2、...、βk进行)------------------
第1次检验:
cii:
1.13550.00550.00210.0002
ci:
0.14550.09020.0255
βi:
0.73440.15850.10630.0357
经过检验,剩余所有变量:
x1、x2、x3对y的线性影响均显著。
检验结束。
时间:
2021.02.06
创作:
欧阳化