%% check Pig implementation: mu = 0.01; D = 1.0; dx=0.0001; x = dx:dx:10.0; for D = [0.1 1 10 100] for mu = [0.01 0.03 0.1 .03] %pig = exp(-(x-mu).^2/4.0/D./x./mu/mu)./sqrt(4*pi*D*x.^3.0); pig = invgauss(x,mu,D); P = sum(pig)*dx; mig = sum(x.*pig)*dx; qig = sum(x.*x.*pig)*dx; vig = qig - mig*mig; dig = 0.5*vig/mig^3; fprintf('Integral=%.3f\n', P); fprintf('Average=%.3f = %.3f\n', mig, mu); %fprintf('Variance=%.3f\n', vig); fprintf('Diffusion=%.3f = %.3f\n\n', dig, D); plot(x, pig) hold on plot([mu mu], [0 max(pig)], 'k') hold off xmax = 3.0*mu; if xmax < 0.1 xmax = 0.1; end xlim([0 xmax]) text(0.6, 0.8, sprintf('D=%.3g', D), 'units', 'normalized') pause( 1.0 ) end end %% fit to data: trials = 1; tmax = 100.0; input = 10.0; % the input I Dnoise = 1.0; % noise strength outau = 0.1; % correlation time of the noise in seconds %for input = [9.5 10.1 11.7 15.9] % spikes = lifouspikes(trials, input, tmax, Dnoise, outau); for input = [1.0 2.0 5.0 10.0] spikes = pifouspikes(trials, input, tmax, Dnoise, outau); isis = diff(spikes{1}); mu = mean(isis); fprintf('mean firing rate = %.0f Hz\n', 1.0/mu) v = var(isis); D = 0.5*v/mu^3; [h,b] = hist(isis, 0:0.001:1); h = h/sum(h)/(b(2)-b(1)); bar(b, h); hold on; dx=0.0001; x = dx:dx:max(isis); pig = exp(-(x-mu).^2/4.0/D./x./mu/mu)./sqrt(4*pi*D*x.^3.0); plot(x, pig, 'r', 'linewidth', 2); % mle fit: phat = mle(isis, 'pdf', @invgauss, 'start', [0.1 0.1] ); mu = phat(1); D = phat(2); pig = exp(-(x-mu).^2/4.0/D./x./mu/mu)./sqrt(4*pi*D*x.^3.0); plot(x, pig, 'c', 'linewidth', 2); xlim([0 4.0*mu]) hold off; pause( 4.0 ) end