Fisher and Shannon information in finite neural populations (Yarrow et al. 2012)

 Download zip file 
Help downloading and running models
Here we model populations of rate-coding neurons with bell-shaped tuning curves and multiplicative Gaussian noise. This Matlab code supports the calculation of information theoretic (mutual information, stimulus-specific information, stimulus-specific surprise) and Fisher-based measures (Fisher information, I_Fisher, SSI_Fisher) in these population models. The information theoretic measures are computed by Monte Carlo integration, which allows computationally-intensive decompositions of the mutual information to be computed for relatively large populations (hundreds of neurons).
1 . Yarrow S, Challis E, Seri├Ęs P (2012) Fisher and Shannon information in finite neural populations. Neural Comput 24:1740-80 [PubMed]
Model Information (Click on a link to find other models with that property)
Model Type: Connectionist Network;
Brain Region(s)/Organism: Unknown;
Cell Type(s):
Gap Junctions:
Simulation Environment: MATLAB;
Model Concept(s): Rate-coding model neurons;
Implementer(s): Yarrow, Stuart [s.yarrow at];
function pfr = fig5_B(fTau, fbg)
% fig5_B  Reproduce points from Figure 5B
% pfr = fig5_B(fTau, fbg) calculates the peak-flank ratio (SSI_peak/SSI_flank), for:
% variability F/tau = fTau spikes/s^2
% background activity f_bg = fbg spikes/s

% Stuart Yarrow - 15/11/2011


stderr = 2e-2;      % Target relative error for MC halting
maxiter = 5e3;      % MC iteration limit

tau = 1.0;          % integration time (s)
F = fTau .* tau;    % Fano factor
alpha = 0.5;        % variability exponent
fmax = 50.0;        % peak firing rate (spikes/s)
sigma = 30.0;       % tuning curve width parameter (degrees)
N = 4;              % population size

% Preferred stimuli
nrns = [-180 : 360/N : 180-360/N];
nrn = floor(N/2)+1;

% Define stimulus ensemble and population
stim = StimulusEnsemble('circular', 360, 360);
popNrns = CircGaussNeurons(nrns, sigma, fmax, fbg, tau, 'Gaussian-independent', [F alpha]);
singleNrn = CircGaussNeurons(0.0, sigma, fmax, fbg, tau, 'Gaussian-independent', [F alpha]);

% Compute measures
fisher = singleNrn.fisher('analytic', stim, 0.0);
[dummy, ord1] = max(fisher(1:180));
[dummy, ord2] = max(fisher(181:end));
ords = [ord1 180 ord2+180];

ssi = popNrns.ssiss(nrn, 'randMC', stim, ords, stderr, maxiter, 1e10);
pfr = ssi(2) ./ mean(ssi([1 3]));

fprintf('Parameters: F/tau = %g spikes/s^2, f_bg = %g spikes/s\n', fTau, fbg)
fprintf('SSI_peak / SSI_flank = %g\n', pfr)

Loading data, please wait...