Chapter 4: limit of zero weight given to previous temporal intervals
clear %#ok<*UNRCH>
%%%%%%%%%%%%%
%%% Flags %%%
reset=false;
%%%%%%%%%%%%%%%%%%%%%%%%%
%%% Timing with drift %%%
L=801;
Ngroups=4; Nper=80; T=Ngroups*Nper;
trange=[.3 1]; drange=.1*diff(trange); dvar=.05;
taus=linspace(0,1.5,L)';
pri=zeros(L,1);
if and(~reset,exist(['timedat2.mat'],'file'))
load(['timedat2.mat'])
else
disp('generating temporal intervals');
tmat=linspace(trange(1),trange(2),Ngroups+1);
tmat=[str8n(tmat(1:Ngroups))-drange str8n(tmat(2:end))+drange]; %matrix of overlapping timing ranges
tnow=nan(size(tmat,1),Nper);
like=@(t,sig) -log(sig)-.5*(t-taus).^2./sig^2; tset=nan(size(tmat));
drange=.2;
for n=1:Ngroups,
inow=randi(size(tmat,1));
tset(n,:)=tmat(inow,:);
tmat=RFL(tmat,inow);
tnow(n,:)=diff(tset(n,:))*(rand([1 Nper])-.5)+mean(tset(n,:)); end
tnow=str8n(tnow'); signow=tnow/17; save('timedat2.mat'); end %scalar property
%time differences and likelihood over differences
dtaus=taus*ones(1,L)-ones(L,1)*taus';
LtauD=0*(-.5*dtaus.^2./dvar^2);
%likelihood computation
Like=@(onow,snow) -log(snow)-.5*(onow-taus).^2/snow^2;
%initialize likelihood and estimate
Lnow=zeros(L,1); tauest=nan(T,1); tic
for t=1:T,
Llastpostsum=logsum(Lnow*ones(1,L)+LtauD,1,diff(taus(1:2)));
Lnow=like(tnow(t),signow(t))+Llastpostsum;
tauest(t)=logpeakval([Lnow taus]);
if rem(t,Nper)==0, toc; end, end
%%%%%%%%%%%%%%%%
%%% PLOTTING %%%
figure(1); clf; %est by trial
subplot(2,1,1); hold on
for n=1:Ngroups,
plot((n-1)*Nper+[1 Nper],mean(tset(n,:))*[1 1],'k-','LineWidth',2); end
plot(tauest,'.')
%%% remembered / estimated
subplot(2,1,2); hold on
plot([0 1.2],[0 1.2],'k--')
for n=1:Ngroups,
plot(tset(n,:),mean(tset(n,:))*[1 1],'k-','LineWidth',1.3); end
plot(tnow,tauest,'.','Color',[.2 .3 .7]);
punderover=[]; %proportional error
for n=1:Ngroups,
ilist=Nper*(n-1)+round(.5*Nper):Nper;
punderover=[punderover; [tnow(ilist)-tset(n,1) (tauest(ilist)-tnow(ilist))/diff(tset(n,:))]]; end %#ok<AGROW>
figure(2); clf; plotmat(punderover,'ko','MarkerFaceColor','k','MarkerSize',6)
figure(3); clf; meshc(taus,taus,LtauD)