Global Index (all files) (short | long) | Local Index (files in subdir) (short | long)
[ccov] = lagcov(data,refer,lags,level,degf);
function [ccov] = lagcov(data,refer,[lags],[level],[degf]); calculate lagged covariances input : data - data array refer - reference series [lags] [0] - vector of lags (reference leads for positive) output : ccov - covariance uses : nsum.m nmean.m version 0.1.0 last change 27.01.1999
This function calls | |
---|---|
function [ccov] = lagcov(data,refer,lags,level,degf); % G.Krahmann, LDEO Palisades, Jan 1999 % history: % % % check arguments % if nargin<2 error('Not enough input arguments.') end refer = squeeze(refer); lr = length(refer); if ~(size(refer,1)==1 | size(refer,2)==1) error('Reference series must be a vector.') end if sum( lr==size(data) )==0 error('Data must contain a dimension with the length of the reference.') end if nargin<3 lags = 0; end if sum(isnan(refer))>1 error('Reference series must not contain NaN''s') end % % check for simple case % simple = 0; if length(lags)==1 if lags==0 simple = 1; end end % % prepare output arrays % ds = size(data); di = find(ds==lr); di = di(1); ns = ds; ns(di) = length(lags); ccoef = repmat(0,ns); % % subtract mean and enlarge reference % dr = ones(1,length(ns)); dr(di) = size(data,di); nr = ds; nr(di) = 1; data = data - repmat(nmean(data,di),dr); refer = refer - nmean(refer); ref = repmat(0,size(data)); ref = shiftdim(ref,di-1); % I was not able to get repamt for n=1:length(refer) % to work properly here ref(n,:) = ref(n,:) + refer(n); end ref = shiftdim(ref,length(ds)-di+1); % % do covariances % if simple==1 % ref2 = refer.^2; % mref2 = mean(ref2); ccov = nsum(data.*ref,di); nccov = nsum( (data*0+1).*(ref*0+1),di); ccov = ccov./nccov; else % shift dimensions to get the series into the first ref = shiftdim(ref,di-1); data = shiftdim(data,di-1); ccoef = shiftdim(ccoef,di-1); % reshape to get only two dimensions sr = size(ref); ref = reshape(ref,[sr(1),prod(sr(2:length(sr)))]); data = reshape(data,[sr(1),prod(sr(2:length(sr)))]); sc = size(ccoef); ccov = reshape(ccoef,[sc(1),prod(sc(2:length(sc)))]); % data2 = data.^2; for n=1:length(lags) if lags(n)<0 % ref2 = refer(1-lags(n):length(refer)).^2; % mref2 = mean(ref2); d = data(1:size(data,1)+lags(n),:); r = ref(1-lags(n):size(ref,1),:); ccov(n,:) = nsum(d.*r,1); nccov(n,:) = nsum( (d*0+1).*(r*0+1),di); ccov(n,:) = ccov(n,:)./nccov(n,:); elseif lags(n)>0 % ref2 = refer(1:length(refer)-lags(n)).^2; % mref2 = mean(ref2); d = data(1+lags(n):size(data,1),:); r = ref(1:size(ref,1)-lags(n),:); ccov(n,:) = nsum(d.*r,1); nccov(n,:) = nsum( (d*0+1).*(r*0+1),di); ccov(n,:) = ccov(n,:)./nccov(n,:); elseif lags(n)==0 % ref2 = refer.^2; % mref2 = mean(ref2); d = data; r = ref; ccov(n,:) = nsum(d.*r,1); nccov(n,:) = nsum( (d*0+1).*(r*0+1),di); ccov(n,:) = ccov(n,:)./nccov(n,:); end end % reshape back ref = reshape(ref,sr); data = reshape(data,sr); ccov = reshape(ccov,sc); % shift dimensions back ref = shiftdim(ref,length(ds)-di+1); data = shiftdim(data,length(ds)-di+1); ccov = shiftdim(ccov,length(ds)-di+1); end