本人下载了一份偏最小二乘Matlab源代码,但运行中程序报错,求助各位高手帮助排解问题!!!!
function [t,q,w,wh,f0,FF]=fun717(px,py,C)
% px自变量的输入个数
% py输入因变量的个数。
% C输入的自变量和因变量组成的矩阵
% t提取的主成分
% q为回归系数。
% w最大特征值所对应的特征向量。
% wh处理后的特征向量
% f0回归的标准化的方程系数
% FF原始变量的回归方程的系数
c=norm1(C); %norm1为标准化函数
y=c(:,px+1:px+py); %截取标准化的因变量
E0=c(:,1:px);
F0=c(:,px+1:px+py);
A=E0'*F0*F0'*E0;
w(:,1)=maxdet(A); %求最大特征向量
t(:,1)=E0*w(:,1); %提取主成分
E(:,1:px)=E0-t(:,1)*(E0'*t(:,1)/(t(:,1)'*t(:,1)))'; % 获得回归系数
p(:,1:px)=(E0'*t(:,1)/(t(:,1)'*t(:,1)))';
for i=0:px-2
B(:,px*i+1:px*i+px)=E(:,px*i+1:px*i+px)'*F0*F0'*E(:,px*i+1:px*i+px);
w(:,i+2)=maxdet(B(:,px*i+1:px*i+px));
% maxdet为求最大特征值的函数
t(:,i+2)=E(:,px*i+1:px*i+px)*w(:,i+2);
p(:,px*i+px+1:px*i+2*px)=(E(:,px*i+1:px*i+px)'*t(:,i+2)/(t(:,i+2)'*t(:,i+2)))';
E(:,px*i+px+1:px*i+2*px)=E(:,px*i+1:px*i+px)-t(:,i+2)*(E(:,px*i+1:px*i+px)'*t(:,i+2)/(t(:,i+2)'*t(:,i+2)))';
end
for s=1:px
q(:,s)=p(1,px*(s-1)+1:px*s)';
end
[n,d]=size(q);
for h=1:px
iw=eye(d);
for j=1:h-1
iw=iw*(eye(d)-w(:,j)*q(:,j)');
end
wh(:,h)=iw*w(:,h);
end
for j=1:py
zr(j,:)=(regress1(y(:,j),t))'; %求回归系数
endfor j=1:px
fori=1:py %生成标准化变量的方程的系数矩阵
w1=wh(:,1:j);
zr1=(zr(i,1:j))';
f0(i,:,j)=(w1*zr1)';
end
[normxy,meanxy,covxy]=norm1(C); %normxy标准化后的数据矩阵
%meanxy每一列的均值
%covxy每一列的方差
ccxx=ones(py,1)*meanxy(1,1:px);
ccy=(covxy(1,px+1:px+py))'*ones(1,px);
ccx=ones(py,1)*(covxy(1,1:px));
ff=ccy.*f0(:,:,j)./ccx;
fff=-(sum((ccy.*ccxx.*f0(:,:,j)./ccx)')-meanxy(1,px+1:px+py))';
FF(:,:,j)=[fff,ff]; %生成原始变量方程的常数项和系数矩阵
end
当程序运行至粉红色字段时,程序报错,试了很多方法,均不行。