视频1 视频21 视频41 视频61 视频文章1 视频文章21 视频文章41 视频文章61 推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37 推荐39 推荐41 推荐43 推荐45 推荐47 推荐49 关键词1 关键词101 关键词201 关键词301 关键词401 关键词501 关键词601 关键词701 关键词801 关键词901 关键词1001 关键词1101 关键词1201 关键词1301 关键词1401 关键词1501 关键词1601 关键词1701 关键词1801 关键词1901 视频扩展1 视频扩展6 视频扩展11 视频扩展16 文章1 文章201 文章401 文章601 文章801 文章1001 资讯1 资讯501 资讯1001 资讯1501 标签1 标签501 标签1001 关键词1 关键词501 关键词1001 关键词1501 专题2001
多元线性回归及显著性检验Matlab程序
2025-09-29 05:24:13 责编:小OO
文档
多元线性回归及显著性检验Matlab程序(完美版)

一、说明:

1、本程序是研究生教材《数理统计》(杨虎、刘琼、钟波 编著) 例(P133)的Matlab编程解答程序。教材上的例题只做了回归方程显著性分析和一次回归系数显著性分析(剔除x1后没有再检验x2和x3)。

2、本程序在以上的基础之上,还分别检验了x2和x3,并且计算精度更高。

3、本程序可根据用户的需要,在输入不同的显著性水平α之下得到相应的解答。

4、本程序移植性强,对于其他数据,只需要改变excel中的数据即可。

5、本程序输出的可读性强,整洁美观。

二、数据入下(将数据存入excel表格,文件名为。注意数据是按x1,x2,…,xk,y这样来列来存储。若不是3个变量,则相应增减数据列就行。):

21850
7940
51446
12343
120
31240
317
6539
7837
02355
31660
01849
8450
61451
02151
31451
71256
16048
61645
01552
9040
4632
01747
9044
21639
9639
12551
61341
12747
02461
51237
41549
02045
61642
41748
10448
41436
51336
9851
61354
58100
51144
8663
21355
7850
41045
10540
317
41572
三、完整程序如下:

%----------------------------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的线性影响均显著。检验结束。下载本文

显示全文
专题