0001 function [AA,BB,RR,SD]=nt_cca_crossvalidate(xx,yy,shifts)
0002
0003
0004
0005
0006
0007
0008
0009
0010
0011 if nargin<3; shifts=[0]; end
0012 if nargin<2; error('!'); end
0013 if ~iscell(xx) || ~iscell(yy); error('!'); end
0014 if length(xx) ~= length (yy); error('!'); end
0015 if size(xx{1},1) ~= size(yy{1},1); error('!'); end
0016
0017 if nargout==0 || nargout==4; doSurrogate=1; else doSurrogate=0; end
0018
0019
0020
0021 nTrials=length(xx);
0022 n=size(xx{1},2)+size(yy{1},2);
0023 C=zeros(n,n,length(shifts),nTrials);
0024 disp('Calculate all covariances...');
0025 nt_whoss;
0026 for iTrial=1:nTrials
0027 C(:,:,:,iTrial)=nt_cov_lags(xx{iTrial}, yy{iTrial},shifts);
0028 end
0029
0030
0031
0032 disp('Calculate CCAs...');
0033 for iOut=1:nTrials
0034 CC=sum(C(:,:,:,setdiff(1:nTrials,iOut)),4);
0035 [A,B,R]=nt_cca([],[],[],CC,size(xx{1},2));
0036 AA{iOut}=A;
0037 BB{iOut}=B;
0038 end
0039 clear C CC
0040
0041
0042
0043 disp('Calculate cross-correlations...');
0044 for iOut=1:nTrials
0045 iNext=mod(iOut,nTrials)+1;
0046 A=AA{iOut};
0047 B=BB{iOut};
0048 for iShift=1:length(shifts)
0049 [x,y]=nt_relshift(xx{iOut},yy{iOut},shifts(iShift));
0050 a=A(:,:,iShift);
0051 b=B(:,:,iShift);
0052 r(:,iShift)=diag( nt_normcol(x*a)' * nt_normcol(y*b )) / size(x,1);
0053 end
0054 RR(:,:,iOut)=r;
0055 if doSurrogate
0056 for iShift=1:length(shifts)
0057 [x,y]=nt_relshift(xx{iOut},yy{iNext},shifts(iShift));
0058 a=A(:,:,iShift);
0059 b=B(:,:,iShift);
0060 mn=min(size(x,1),size(y,1));
0061 s(:,iShift)=diag( nt_normcol(x(1:mn,:)*a)' * nt_normcol(y(1:mn,:)*b )) / mn;
0062 end
0063 ss(:,:,iOut)=s;
0064 end
0065 end
0066 if doSurrogate
0067 VAR=(sum(ss.^2,3)-sum(ss,3).^2/nTrials) / (nTrials-1);
0068 SD(:,:)=sqrt(VAR);
0069 end
0070 disp('done');
0071
0072
0073
0074
0075 if nargout==0
0076 figure(1); clf;
0077 if length(shifts)>1;
0078 plot(mean(RR,3)'); title('correlation for each CC'); xlabel('shift'); ylabel('correlation');
0079 hold on;
0080 plot(SD', ':r');
0081 legend('correlation','standard error'); legend boxoff
0082 else
0083 plot(squeeze(mean(RR,3))); title ('correlation for each CC'); xlabel('CC'); ylabel('correlation');
0084 plot(SD', ':r');
0085 end
0086 figure(2); clf;
0087 size(RR)
0088 for k=1:min(4,size(RR,1))
0089 subplot(2,2,k);
0090 [~,idx]=max(mean(RR(k,:,:),3));
0091 [x,y]=nt_relshift(xx{1},yy{1},shifts(idx));
0092 plot([x*A(:,k,idx), y*B(:,k,idx)]);
0093 disp(corr(nt_normcol([x*A(:,k,idx), y*B(:,k,idx)])));
0094 title(['CC ',num2str(k)]); xlabel('sample');
0095 end
0096 end
0097