偏最小二乘回归 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==1 w_star(:,i)=w(:,i); else for j=1:i-1 temp=temp*(eye(col-1)-w(:,j)*alpha(:,j)'); end w_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:num t1=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); end press(i)=sum(press_i) if i>1 Q_h2(i)=1-press(i)/ss(i-1) else Q_h2(1)=1 end if Q_h2(i)<0.0985 fprintf('提出的成分个数 r=%d',i); r=i; break endendbeta_z=[t,ones(num,1)]\f0; %求标准化 Y 关于主成分得分向量 t 的回归系数beta_z(end,:)=[]; %删除常数项xishu=w_star*beta_z; %求标准化 Y 关于 X 的回归系数, 且是针对标准数据的回归系数,每一列是一个回归方程mu_x=aver(1:col-1);mu_y=aver(end);sig_x=stdcov(1:col-1);sig_y=stdcov(end);ch0=mu_y-mu_x./sig_x*sig_y*xishu; %计算原始数据的回归方程的常数项xish=xishu'./sig_x*sig_y; %计算原始数据的回归方程的系数...