123456789101112131415161718192021222324252627282930313233343536373839404142434445 |
- function [Rout,BWmax,MSRout]=optimalBW05(Rstin,Tin)
- %Tbin is the window to run the optimal bin on, such as Tbin=start:step:end i.e. Tbin=-1:0.005:2
- %Tin the PETH duration
- %T0 is window w/ the smallest binsize
- %
- global Tbin
- BW=[0.01:0.005:1];
- NUMTRL=length(Rstin);PTH0=[];
- Bsize=Tbin(2)-Tbin(1);
- Rst_all=sort(cell2mat(Rstin'));
- T0=[Tbin(1)-Bsize:Bsize:Tbin(end)+Bsize];L0=length(Tbin)-2;
- R0=hist(Rst_all,T0)/(Bsize*NUMTRL);R0=R0(2:end-1);SST=sum((R0-mean(R0)).^2);
- if isempty(Rst_all)
- R0=R0';
- end
- AIC=[];
- for i=1:length(BW)
- T=[Tbin(1)-BW(i):BW(i):Tbin(end)+BW(i)];P=length(T)-2;PTH=[];
- PTH_all=hist(Rst_all,T)/(BW(i)*NUMTRL);
- lambda_est=interp1(T(2:end-1),PTH_all(2:end-1),T0(2:end-1),'nearest','extrap');
-
- SSE=sum((lambda_est-R0).^2);
- %AIC
- AIC(i)=L0*log(SSE/L0)+2*P;
- % AIC(i)=2*mean(lambda_est)/(NUMTRL*BW(i))-var(lambda_est)
- end
- AICF=filtfilt(0.1*ones(1,10),1,AIC);
- [qwe,Imin]=min(AICF);BWmax=BW(Imin);
- % figure(1);plot(BW,AIC);hold on;plot(BW,AICF,'r')
- % fprintf(1,'final BW %1.4f\n',BWmax);
- MSRout=AIC;
- Tn=[-BWmax/2:-BWmax:Tin(1)-BWmax]; Tp=[BWmax/2:BWmax:Tin(end)+BWmax];T=[Tn(end:-1:1),Tp];%making PSTH centered on zero
- %T=[T0(1)-BWmax:BWmax:T0(end)+BWmax];
- PTH_opt=hist(Rst_all,T)/(BWmax*NUMTRL);
- %Assigning the output
- Rout=interp1(T(2:end-1),PTH_opt(2:end-1),Tin,'nearest','extrap');
|