偏最小二乘回归分析_matlab.wps
%偏最小二乘回归 MATLAB 程序代码%单因变量function y=pls(pz)row,col=size(pz);aver=mean(pz);stdcov=std(pz);%求均值和标准差rr=corrcoef(pz);%求相关系数矩阵%data=zscore(pz);%数据标准化stdarr=(pz-aver(ones(row,1),:)./stdcov(ones(row,1),:);%标准化数据结果与 zscore()一致 x0=pz(:,1:col-1);y0=pz(:,end);%提取原始的自变量、因变量数据e0=stdarr(:,1:col-1);f0=stdarr(:,end);%提取标准化后的自变量、因变量数据num=size(e0,1);%求样本点的个数temp=eye(col-1);%对角阵for i=1:col-1%以下计算 w,w*和 t 的得分向量,w(:,i)=(e0*f0)/norm(e0*f0);t(:,i)=e0*w(:,i)%计算成分 ti 的得分alpha(:,i)=e0*t(:,i)/(t(:,i)*t(:,i)%计 算 alpha_i,其 中(t(:,i)*t(:,i)等 价 于 norm(t(:,i)2 e=e0-t(:,i)*alpha(:,i)%计算残差矩阵e0=e;%计算 w*矩阵if i=1w_star(:,i)=w(:,i);elsefor j=1:i-1temp=temp*(eye(col-1)-w(:,j)*alpha(:,j);endw_star(:,i)=temp*w(:,i);end%以下计算 ss(i)的值beta=t(:,1:i),ones(num,1)f0%求回归方程的系数beta(end,:)=;%删除回归分析的常数项cancha=f0-t(:,1:i)*beta;%求残差矩阵ss(i)=sum(sum(cancha.2);%求误差平方和%以下计算 press(i)for j=1:numt1=t(:,1:i);f1=f0;she_t=t1(j,:);she_f=f1(j,:);%把舍去的第 j 个样本点保存起来 t1(j,:)=;f1(j,:)=;%删除第 j 个观测值beta1=t1,ones(num-1,1)f1;%求回归分析的系数beta1(end,:)=;%删除回归分析的常数项cancha=she_f-she_t*beta1;%求残差向量press_i(j)=sum(cancha.2);endpress(i)=sum(press_i)if i1Q_h2(i)=1-press(i)/ss(i-1)elseQ_h2(1)=1endif Q_h2(i)1Q_h2(i)=1-press(i)/ss(i-1)elseQ_h2(1)=1endif Q_h2(i)0.0985fprintf(提出的成分个数 r=%d,i);r=i;breakendendbeta_z=t(:,1:r),ones(num,1)f0;%求标准化 Y 关于 t 的回归系数beta_z(end,:)=;%删除常数项xishu=w_star(:,1:r)*beta_z;%求标准化 Y 关于 X 的回归系数,且是针对标准数据的回归系数,每一列是一个回归方程mu_x=aver(1:n);mu_y=aver(n+1:end);sig_x=stdcov(1:n);sig_y=stdcov(n+1:end);for i=1:mch0(i)=mu_y(i)-mu_x./sig_x*sig_y(i)*xishu(:,i);%计算原始数据的回归方程的常数项 endfor i=1:mxish(:,i)=xishu(:,i)./sig_x*sig_y(i);%计算原始数据的回归方程的系数,每一列是一个回归方程endsol=ch0;xish%显示回归方程的系数,每一列是一个方程,每一列的第一个数是常数项