function cval_arofmvc1
load temp_values
set(k36_ipofmvc1,'Enable','on')
set(k36a_ipofmvc1,'Enable','on')
set(k39a_ipofmvc1,'Enable','off')
set(k39b_ipofmvc1,'Enable','off')
set(k39c_ipofmvc1,'Enable','off')
set(k39d_ipofmvc1,'Enable','off')
% ***********************************
% Here start the calculations
% for cross-validation
% ***********************************
tic;
eval(['load ',ckname_ipofmvc1]);
ck_ipofmvc1=eval(strtok(ckname_ipofmvc1,'.'));
I_ipofmvc1=size(ck_ipofmvc1,1);
if datacal_ipofmvc1<2
aaa_ipofmvc1=textread(calname_ipofmvc1,'%s');
for i=1:I_ipofmvc1
eval(['load ',aaa_ipofmvc1{i}])
end
if datacal_ipofmvc1==0
eval(['R_ipofmvc1=',strtok(aaa_ipofmvc1{1},'.'),';']);
for i=2:I_ipofmvc1
R_ipofmvc1=[R_ipofmvc1,eval(strtok(aaa_ipofmvc1{i},'.'),';')];
end
elseif datacal_ipofmvc1==1
eval(['R_ipofmvc1=',strtok(aaa_ipofmvc1{1},'.'),'(:,2);']);
for i=2:I_ipofmvc1
eval(['R_ipofmvc1=[R_ipofmvc1,',(strtok(aaa_ipofmvc1{i},'.')),'(:,2)];']);
end
end
elseif datacal_ipofmvc1==2
eval(['load ', Rname_ipofmvc1])
R_ipofmvc1=eval(strtok(Rname_ipofmvc1,'.'));
end
I=I_ipofmvc1;clear I_ipofmvc1
R=R_ipofmvc1;clear R_ipofmvc1
ck=ck_ipofmvc1;clear ck_ipofmvc1
[J,I]=size(R);
% Selects spectral regions
if size(reg_ipofmvc1,2)>0
Rtemp=R;
R=[];
for i=1:size(reg_ipofmvc1,2)/2
R=[R;Rtemp(reg_ipofmvc1(2*i-1):reg_ipofmvc1(2*i),:)];
end
clear Rtemp
end
% Excludes samples from calibration
sam=ones(I,1);
for i=1:I
for j=1:size(exccal_ipofmvc1,2)
if i==exccal_ipofmvc1(j)
sam(i)=0;
end
end
end
cktemp=ck;
Rtemp=R;
ck=[];
R=[];
for i=1:I
if sam(i)==1
ck=[ck;cktemp(i)];
R=[R,Rtemp(:,i)];
end
end
clear cktemp Rtemp
[J,I]=size(R);
s=[1:J];
% SNV if needed
if snv01_ipofmvc1==1
for i=1:I
delta=(max(R(:,i))-min(R(:,i)));
R(:,i)=(R(:,i)-mean(R(:,i)))/delta;
end
end
if snv11_ipofmvc1==1
for i=1:I
delta=(max(R(:,i))-min(R(:,i)));
R(:,i)=(2*R(:,i)-max(R(:,i))-min(R(:,i)))/delta;
end
end
% Spectral derivatives
if deriv_ipofmvc1>0
x=[order_ipofmvc1,degree_ipofmvc1,npoints_ipofmvc1];
sgrc_arofmvc1;
end
[J,I]=size(R);
s=[1:J];
R=R';
% Starts cross-validation
disp(' ');
disp('LEAVE-ONE-OUT CROSS VALIDATION')
disp(' ');
press=zeros(Amax_ipofmvc1+1,1);
% Method OSC/CLS
if met_ipofmvc1 == 9
for map=1:I
disp(['Sample left out = ',int2str(map),' of a total of ',int2str(I),' samples'])
temp=R(map,:);
Rcv=R';
Rcv(:,map)=Rcv(:,I);
Rcv=Rcv(:,1:I-1);
ctemp=ck(map);
ckcv=ck;
ckcv(map)=ckcv(I);
ckcv=ckcv(1:I-1);
% MSC
if msc_ipofmvc1==1
meanr=sum(Rcv')/(I-1);
espx=meanr-mean(meanr);
espy=Rcv-mean(meanr);
beta=espy'*pinv(espx);
alpha=(1/J)*(sum(Rcv)-beta'*sum(meanr));
Rcv=(Rcv-ones(J,1)*alpha)./(ones(J,1)*beta');
end
% Centers data
if cent_ipofmvc1==1
meanr=sum(Rcv')/(I-1);
meanc=sum(ckcv)/(I-1);
Rcv=Rcv-meanr'*ones(1,I-1);
temp=temp-meanr;
ckcv=ckcv-ones(I-1,1)*meanc;
ctemp=ctemp-meanc;
end
skLS=Rcv*ckcv/norm(ckcv)^2;
Aux=Rcv*ckcv;
M=eye(J,J)-Aux*Aux'/(Aux'*Aux);
Z=Rcv'*M;
[a,b,c]=svd(Z',0);
clear Z
t=a*b;
clear a
la=diag(t'*t);
clear t
p=Rcv*c;
for z=1:I-1
if la(z)>0
p(:,z)=p(:,z)/sqrt(la(z));
end
end
Wq=M*p;
clear M
press(1)=press(1)+(ctemp)^2;
for z=1:Amax_ipofmvc1
pnas=eye(J)-Wq(:,1:z)*p(:,1:z)';
snet=pnas'*skLS;
bk=snet/(norm(snet)^2);
d(z,map)=(bk'*pnas'*temp'-ctemp)^2;
press(z+1)=press(z+1)+(bk'*pnas'*temp'-ctemp)^2;
end
clear Wq p
end
clear pnas
end
% Methods based on NAS calculations
if met_ipofmvc1 < 4
for map=1:I
disp(['Sample left out = ',int2str(map),' of a total of ',int2str(I),' samples'])
Rtemp=R';
temp=Rtemp(:,map);
Rcv=R';
Rcv(:,map)=Rcv(:,I);
Rcv=Rcv(:,1:I-1);
ctemp=ck(map);
ckcv=ck;
ckcv(map)=ckcv(I);
ckcv=ckcv(1:I-1);
% MSC
if msc_ipofmvc1==1
meanr=sum(Rcv')/(I-1);
espx=meanr-mean(meanr);
espy=Rcv-mean(meanr);
beta=espy'*pinv(espx);
alpha=(1/J)*(sum(Rcv)-beta'*sum(meanr));
Rcv=(Rcv-ones(J,1)*alpha)./(ones(J,1)*beta');
end
% Centers data
meanr=sum(Rcv')/(I-1);
meanc=sum(ckcv)/(I-1);
if cent_ipofmvc1==1
Rcv=Rcv-meanr'*ones(1,I-1);
temp=temp-meanr';
ckcv=ckcv-ones(I-1,1)*meanc;
ctemp=ctemp-meanc;
end
skLS=Rcv*ckcv/norm(ckcv)^2;
% Method HLA/XS
if met_ipofmvc1==1
X1=[];
X2=[];
for i=1:I-1
if ckcv(i)== 0
X1=[X1,Rcv(:,i)];
else
X2=[X2,Rcv(:,i)/ckcv(i)];
end
end
ix2=size(X2,2);
meanx2=sum(X2')/ix2;
X2=X2-meanx2'*ones(1,ix2);
R1=[X1,X2];
R1=R1';
end
% Method HLA/GO
if met_ipofmvc1==2
R1=Rcv'-ckcv*meanr/meanc;
end
% Method NAP/CLS
if met_ipofmvc1==3
R1=Rcv'-ckcv*skLS';
end
[u,S,v]=svd(R1',0);
clear R1 S
u=u(:,1:Amax_ipofmvc1);
for A=0:Amax_ipofmvc1;
if A==0
press(1)=press(1)+(ctemp)^2;
else
x=u(:,1:A);
pnas=eye(J)-x*x';
snet=pnas*Rcv*ckcv/norm(ckcv)^2;
bk=snet/(norm(snet)^2);
d(A,map)=(bk'*temp-ctemp)^2;
press(A+1)=press(A+1)+(bk'*temp-ctemp)^2;
end
clear pnas
end
end
end
% Method PLS-1
if met_ipofmvc1 == 4
for map=1:I
disp(['Sample left out = ',int2str(map),' of a total of ',int2str(I),' samples'])
T=[];
P=[];
W=[];
Wn=[];
v=[];
temp=R(map,:);
Rcv=R';
Rcv(:,map)=Rcv(:,I);
Rcv=Rcv(:,1:I-1);
ctemp=ck(map);
ckcv=ck;
ckcv(map)=ckcv(I);
ckcv=ckcv(1:I-1);
% MSC
if msc_ipofmvc1==1
meanr=sum(Rcv')/(I-1);
espx=meanr-mean(meanr);
espy=Rcv-mean(meanr);
beta=espy'*pinv(espx);
alpha=(1/J)*(sum(Rcv)-beta'*sum(meanr));
Rcv=(Rcv-ones(J,1)*alpha)./(ones(J,1)*beta');
end
% Centers data
if cent_ipofmvc1==1
meanr=sum(Rcv')/(I-1);
meanc=sum(ckcv)/(I-1);
Rcv=Rcv-meanr'*ones(1,I-1);
temp=temp-meanr;
ckcv=ckcv-ones(I-1,1)*meanc;
ctemp=ctemp-meanc;
end
for i=0:Amax_ipofmvc1;
if i==0
press(1)=press(1)+(ctemp)^2;
else
W=Rcv*ckcv/(ckcv'*ckcv);
Wn(:,i)=W/(sqrt(W'*W));
T(:,i)=Rcv'*Wn(:,i);
v(:,i)=T(:,i)'*ckcv/(T(:,i)'*T(:,i));
P(:,i)=Rcv*T(:,i)/(T(:,i)'*T(:,i));
Rcv=Rcv'-(T(:,i)*P(:,i)');
Rcv=Rcv';
ckcv=ckcv-(v(:,i)*T(:,i));
bk=Wn(:,1:i)*inv(P(:,1:i)'*Wn(:,1:i))*v(:,1:i)';
d(i,map)=(bk'*temp'-ctemp)^2;
press(i+1)=press(i+1)+(bk'*temp'-ctemp)^2;
end
end
end
end
% Method PCR
if met_ipofmvc1 == 5
for map=1:I
disp(['Sample left out = ',int2str(map),' of a total of ',int2str(I),' samples'])
temp=R(map,:);
Rcv=R';
Rcv(:,map)=Rcv(:,I);
Rcv=Rcv(:,1:I-1);
ctemp=ck(map);
ckcv=ck;
ckcv(map)=ckcv(I);
ckcv=ckcv(1:I-1);
% MSC
if msc_ipofmvc1==1
meanr=sum(Rcv')/(I-1);
espx=meanr-mean(meanr);
espy=Rcv-mean(meanr);
beta=espy'*pinv(espx);
alpha=(1/J)*(sum(Rcv)-beta'*sum(meanr));
Rcv=(Rcv-ones(J,1)*alpha)./(ones(J,1)*beta');
end
% Centers data
if cent_ipofmvc1==1
meanr=sum(Rcv')/(I-1);
meanc=sum(ckcv)/(I-1);
Rcv=Rcv-meanr'*ones(1,I-1);
temp=temp-meanr;
ckcv=ckcv-ones(I-1,1)*meanc;
ctemp=ctemp-meanc;
end
[P,x,y]=svd(Rcv,0);
for i=0:Amax_ipofmvc1;
if i==0
press(1)=press(1)+(ctemp)^2;
else
Pa=P(:,1:i);
Ta=Rcv'*Pa;
v1a=pinv(Ta)*ckcv;
bk=Pa*v1a;
d(i,map)=(bk'*temp'-ctemp)^2;
press(i+1)=press(i+1)+(bk'*temp'-ctemp)^2;
end
end
end
end
% Method OSC/PLS
if met_ipofmvc1 == 6
for map=1:I
disp(['Sample left out = ',int2str(map),' of a total of ',int2str(I),' samples'])
T=[];
P=[];
W=[];
Wn=[];
v=[];
temp=R(map,:);
Rcv=R';
Rcv(:,map)=Rcv(:,I);
Rcv=Rcv(:,1:I-1);
ctemp=ck(map);
ckcv=ck;
ckcv(map)=ckcv(I);
ckcv=ckcv(1:I-1);
% MSC
if msc_ipofmvc1==1
meanr=sum(Rcv')/(I-1);
espx=meanr-mean(meanr);
espy=Rcv-mean(meanr);
beta=espy'*pinv(espx);
alpha=(1/J)*(sum(Rcv)-beta'*sum(meanr));
Rcv=(Rcv-ones(J,1)*alpha)./(ones(J,1)*beta');
end
% Centers data
if cent_ipofmvc1==1
meanr=sum(Rcv')/(I-1);
meanc=sum(ckcv)/(I-1);
Rcv=Rcv-meanr'*ones(1,I-1);
temp=temp-meanr;
ckcv=ckcv-ones(I-1,1)*meanc;
ctemp=ctemp-meanc;
end
Aux=Rcv*ckcv;
M=eye(J,J)-Aux*Aux'/(Aux'*Aux);
Z=Rcv'*M;
[a,b,c]=svd(Z',0);
clear Z
t=a*b;
clear a b
la=diag(t'*t);
p=Rcv*c;
for z=1:I-1
if la(z)>0
p(:,z)=p(:,z)/sqrt(la(z));
end
end
Wq=M*p;
clear M t
if Aext_ipofmvc1>0
for z=1:Aext_ipofmvc1
pnas=eye(J)-Wq(:,1:z)*p(:,1:z)';
end
else
pnas=eye(J);
end
clear Wq p
Rcv1=pnas'*Rcv;
temp1=temp*pnas;
ckcv1=ckcv;
clear pnas
for i=0:Amax_ipofmvc1;
if i==0
press(1)=press(1)+(ctemp)^2;
else
W=Rcv1*ckcv1/(ckcv1'*ckcv1);
Wn(:,i)=W/(sqrt(W'*W));
T(:,i)=Rcv1'*Wn(:,i);
v(:,i)=T(:,i)'*ckcv1/(T(:,i)'*T(:,i));
P(:,i)=Rcv1*T(:,i)/(T(:,i)'*T(:,i));
Rcv1=Rcv1'-(T(:,i)*P(:,i)');
Rcv1=Rcv1';
ckcv1=ckcv1-(v(:,i)*T(:,i));
bk=Wn(:,1:i)*inv(P(:,1:i)'*Wn(:,1:i))*v(:,1:i)';
d(i,map)=(bk'*temp1'-ctemp)^2;
press(i+1)=press(i+1)+(bk'*temp1'-ctemp)^2;
end
end
end
end
% Method NAP/PLS
if met_ipofmvc1 == 7
for map=1:I
disp(['Sample left out = ',int2str(map),' of a total of ',int2str(I),' samples'])
T=[];
P=[];
W=[];
Wn=[];
v=[];
temp=R(map,:);
Rcv=R';
Rcv(:,map)=Rcv(:,I);
Rcv=Rcv(:,1:I-1);
ctemp=ck(map);
ckcv=ck;
ckcv(map)=ckcv(I);
ckcv=ckcv(1:I-1);
% MSC
if msc_ipofmvc1==1
meanr=sum(Rcv')/(I-1);
espx=meanr-mean(meanr);
espy=Rcv-mean(meanr);
beta=espy'*pinv(espx);
alpha=(1/J)*(sum(Rcv)-beta'*sum(meanr));
Rcv=(Rcv-ones(J,1)*alpha)./(ones(J,1)*beta');
end
% Centers data
if cent_ipofmvc1==1
meanr=sum(Rcv')/(I-1);
meanc=sum(ckcv)/(I-1);
Rcv=Rcv-meanr'*ones(1,I-1);
temp=temp-meanr;
ckcv=ckcv-ones(I-1,1)*meanc;
ctemp=ctemp-meanc;
end
skLS=Rcv*ckcv/norm(ckcv)^2;
Rmk=Rcv'-ckcv*skLS';
[u,S,vv]=svd(Rmk',0);
if Aext_ipofmvc1>0
for z=1:Aext_ipofmvc1
pnas=eye(J)-u(:,1:z)*u(:,1:z)';
end
else
pnas=eye(J);
end
Rcv1=pnas'*Rcv;
temp1=temp*pnas;
clear pnas
ckcv1=ckcv;
for i=0:Amax_ipofmvc1;
if i==0
press(1)=press(1)+(ctemp)^2;
else
W=Rcv1*ckcv1/(ckcv1'*ckcv1);
Wn(:,i)=W/(sqrt(W'*W));
T(:,i)=Rcv1'*Wn(:,i);
v(:,i)=T(:,i)'*ckcv1/(T(:,i)'*T(:,i));
P(:,i)=Rcv1*T(:,i)/(T(:,i)'*T(:,i));
Rcv1=Rcv1'-(T(:,i)*P(:,i)');
Rcv1=Rcv1';
ckcv1=ckcv1-(v(:,i)*T(:,i));
bk=Wn(:,1:i)*inv(P(:,1:i)'*Wn(:,1:i))*v(:,1:i)';
d(i,map)=(bk'*temp1'-ctemp)^2;
press(i+1)=press(i+1)+(bk'*temp1'-ctemp)^2;
end
end
end
end
% Method DOSC/PLS
if met_ipofmvc1 == 8
for map=1:I
disp(['Sample left out = ',int2str(map),' of a total of ',int2str(I),' samples'])
T=[];
P=[];
W=[];
Wn=[];
v=[];
temp=R(map,:);
Rcv=R';
Rcv(:,map)=Rcv(:,I);
Rcv=Rcv(:,1:I-1);
ctemp=ck(map);
ckcv=ck;
ckcv(map)=ckcv(I);
ckcv=ckcv(1:I-1);
% MSC
if msc_ipofmvc1==1
meanr=sum(Rcv')/(I-1);
espx=meanr-mean(meanr);
espy=Rcv-mean(meanr);
beta=espy'*pinv(espx);
alpha=(1/J)*(sum(Rcv)-beta'*sum(meanr));
Rcv=(Rcv-ones(J,1)*alpha)./(ones(J,1)*beta');
end
% Centers data
if cent_ipofmvc1==1
meanr=sum(Rcv')/(I-1);
meanc=sum(ckcv)/(I-1);
Rcv=Rcv-meanr'*ones(1,I-1);
temp=temp-meanr;
ckcv=ckcv-ones(I-1,1)*meanc;
ctemp=ctemp-meanc;
end
skLS=Rcv*ckcv/norm(ckcv)^2;
Rmk=Rcv-skLS*ckcv';
[u,S,vv]=svd(Rmk,0);
u=u(:,1:Aext_ipofmvc1);
tmk=u'*Rmk;
tmk=tmk';
[u2,s2,v2]=svd(Rcv,0);
u2=u2(:,1:Aaux_ipofmvc1);
t2=Rcv'*u2;
Rmas=u2*pinv(t2);
rr=Rmas*tmk;
pp=pinv(tmk)*Rcv';
Rcv1=(Rcv'-Rcv'*rr*pp)';
temp1=temp-temp*rr*pp;
ckcv1=ckcv;
for i=0:Amax_ipofmvc1;
if i==0
press(1)=press(1)+(ctemp)^2;
else
W=Rcv1*ckcv1/(ckcv1'*ckcv1);
Wn(:,i)=W/(sqrt(W'*W));
T(:,i)=Rcv1'*Wn(:,i);
v(:,i)=T(:,i)'*ckcv1/(T(:,i)'*T(:,i));
P(:,i)=Rcv1*T(:,i)/(T(:,i)'*T(:,i));
Rcv1=Rcv1'-(T(:,i)*P(:,i)');
Rcv1=Rcv1';
ckcv1=ckcv1-(v(:,i)*T(:,i));
bk=Wn(:,1:i)*inv(P(:,1:i)'*Wn(:,1:i))*v(:,1:i)';
d(i,map)=(bk'*temp1'-ctemp)^2;
press(i+1)=press(i+1)+(bk'*temp1'-ctemp)^2;
end
end
end
end
% Method DOSC/CLS
if met_ipofmvc1 == 10
for map=1:I
disp(['Sample left out = ',int2str(map),' of a total of ',int2str(I),' samples'])
temp=R(map,:);
Rcv=R';
Rcv(:,map)=Rcv(:,I);
Rcv=Rcv(:,1:I-1);
ctemp=ck(map);
ckcv=ck;
ckcv(map)=ckcv(I);
ckcv=ckcv(1:I-1);
% MSC
if msc_ipofmvc1==1
meanr=sum(Rcv')/(I-1);
espx=meanr-mean(meanr);
espy=Rcv-mean(meanr);
beta=espy'*pinv(espx);
alpha=(1/J)*(sum(Rcv)-beta'*sum(meanr));
Rcv=(Rcv-ones(J,1)*alpha)./(ones(J,1)*beta');
end
% Centers data
if cent_ipofmvc1==1
meanr=sum(Rcv')/(I-1);
meanc=sum(ckcv)/(I-1);
Rcv=Rcv-meanr'*ones(1,I-1);
temp=temp-meanr;
ckcv=ckcv-ones(I-1,1)*meanc;
ctemp=ctemp-meanc;
end
skLS=Rcv*ckcv/norm(ckcv)^2;
Rmk=Rcv-skLS*ckcv';
[u,S,vv]=svd(Rmk,0);
u=u(:,1:Aext_ipofmvc1);
tmk=u'*Rmk;
tmk=tmk';
[u2,s2,v2]=svd(Rcv,0);
for i=0:Amax_ipofmvc1
t2=Rcv'*u2(:,1:i);
Rmas=u2(:,1:i)*pinv(t2);
rr=Rmas*tmk;
pp=pinv(tmk)*Rcv';
Rcv1=(Rcv'-Rcv'*rr*pp)';
temp1=temp-temp*rr*pp;
if i==0
press(1)=press(1)+(ctemp)^2;
else
snet=Rcv1*pinv(ckcv)';
bk=snet/norm(snet)^2;
d(i,map)=(bk'*temp1'-ctemp)^2;
press(i+1)=press(i+1)+(bk'*temp1'-ctemp)^2;
end
end
end
end
format short e
% Calculates statistical parameters
sep=sqrt(press/I);
rep=100*sep/mean(ck);
r2=1-press/norm(ck-mean(ck)*ones(size(ck)))^2;
[mini,Amin]=min(press);
Fpract=[];
pro=[];
for i=1:Amax_ipofmvc1+1
if i<=Amin
Fpract(i)=press(i)/(mini);
vec=[Fpract(i),I,I];
pro(i)=1-prob_arofmvc1(vec);
else
Fpract(i)=0;
pro(i)=0;
end
end
% Check for outliers
criti=fcrt_arofmvc1([(100-level_ipofmvc1)/100,1,I]);
outliers=[];Ratio=[];
for i=1:Amax_ipofmvc1
for j=1:I
Fprac=(I-1)*d(i,j)/(sum(d(i,:))-d(i,j));
if Fprac > criti;
outliers(i,j)=1;
else
outliers(i,j)=0;
end
Ratio(i,j)=Fprac/criti;
end
end
fac=0:Amax_ipofmvc1;
% Figures
if met_ipofmvc1==9
metodo='OSC/CLS';
end
if met_ipofmvc1==1
metodo='HLA/XS';
end
if met_ipofmvc1==2
metodo='HLA/GO';
end
if met_ipofmvc1==3
metodo='NAP/CLS';
end
if met_ipofmvc1==4
metodo='PLS-1';
end
if met_ipofmvc1==5
metodo='PCR';
end
if met_ipofmvc1==6
metodo='OSC';
end
if met_ipofmvc1==7
metodo='NAP/PLS';
end
if met_ipofmvc1==8
metodo='DOCS/PLS';
end
if met_ipofmvc1==10
metodo='DOCS/CLS';
end
format short e
resul1=[fac',press,Fpract',pro'];
resul2=[fac',sep,rep,r2];
disp(' ')
disp(' A PRESS F p');
disp(resul1);
disp(' ')
disp(' A SEP REP% R2 ');
disp(resul2);
% Saves results
if saveres_ipofmvc1 ==1
resul=[resul1,resul2];
save resul_cv.txt resul -ascii
end
elap=toc;
disp(' ')
disp('Total elapsed time (seconds): ')
disp(elap)
save temp_values fac press metodo sep I outliers Ratio d -append
figure(1)