本帖最后由 xiaowu55 于 -3-25 22:30 编辑
flag_go_on=1;
num_of_loop=0;
a = [];%存储剔除的变量下标
xx = 1:k;%存储最原始的变量下标,如果有5个变量x,则存储1,2,3,4,5
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='%15.4f';
for ii=1:k-1
format_str=[format_str '%13.4f'];
end
fprintf(['\r第%d次检验:\rcii: ' format_str '%13.4f\r ci: ' ...
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;
% 这样就可以输出正确的下标了
index_xx = xx(beta_index-1);
fprintf('\r x%d 对y的线性影响最不显著(|β%d|=%0.4f)。 删除x%d, 进行第%d次计算:',...
index_xx,index_xx,abs(beta_all(beta_index)), index_xx,loop_num + 2);
xx(beta_index-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,...
% num_of_loop+2)
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)=[];
% 这样更改就没问题了
k1 = (beta_index-1)*10+1;
k2 = (beta_index)*10;
k = k1:k2;
format_str0(k)=[];
fprintf(format_str0,beta_mao);
% fmt_str1='';
% for i1=1:beta_index-2
% fmt_str1=[fmt_str1 'β' num2str(i1) ' = %0.4f\r'];
% end
% for i1=beta_index: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
这样更改后显示显著性的系数就没有问题了。
如果觉得《matlab 线性回归 参数显著性 matlab做多元线性回归后回归系数的显著性检验》对你有帮助,请点赞、收藏,并留下你的观点哦!