如何用matlab实现偏相关分析
matlab偏最小二乘分析(2009-11-2016:43:07)转载▼标签:杂谈单因变量functiony=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);%对角阵fori=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))^2e=e0-t(:,i)*alpha(:,i)'%计算残差矩阵e0=e;%计算w*矩阵ifi==1w_star(:,i)=w(:,i);elseforj=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)forj=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)ifi>1Q_h2(i)=1-press(i)/ss(i-1)elseQ_h2(1)=1endifQ_h2(i)1Q_h2(i)=1-press(i)/ss(i-1)elseQ_h2(1)=1endifQ_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);fori=1:mch0(i)=mu_y(i)-mu_x./sig_x*sig_y(i)*xishu(:,i);%计算原始数据的回归方程的常数项endfori=1:mxish(:,i)=xishu(:,i)./sig_x'*sig_y(i);%计算原始数据的回归方程的系数,每一列是一个回归方程endsol=[ch0;xish]%显示回归方程的系数,每一列是一个方程,每一列的第一个数是常数项