2017-08-01 3 views
0

Il existe plusieurs threads qui demandent un moyen de simuler des processus poisson non homogènes en temps en python. Le module NeuroTools offre un moyen simple de le faire via la fonction inh_poisson_generator(). L'aide de cette fonction est présentée en bas de ce fil. La fonction a été conçue à l'origine pour simuler des trains de pointes et utilise la méthode d'amincissement. Je voudrais simuler un train de pointes pendant 2000ms. Le taux de pic (en Hertz) change toutes les millisecondes et est compris entre 20 pointes/seconde et 160 pointes/seconde. J'ai essayé de simuler cela en utilisant le code suivant:Simulation d'un processus de Poisson inhomogène dans le temps en utilisant la méthode d'amincissement et le module python de NeuroTools

import NeuroTools 
import numpy as np 
from NeuroTools import stgen 
import matplotlib.pyplot as plt 
import random 

st_gen = stgen.StGen() 
time = np.arange(0, 2000) 
t_rate = [] 
for i in range (2000): 
    t_rate.append(random.randrange(20, 161, 1)) 
t_rate = np.array(t_rate) 

Psim = st_gen.inh_poisson_generator(rate = t_rate, t = time, t_stop = 2000, array = True) 

Cependant, le code renvoie très peu horodatages (par exemple, un tableau ([397,55345905, 1208,79804513, 1478,03525045, 1982,63643262]), qui ne fait pas de sens moi. Je vous serais reconnaissant toute aide à ce sujet.

inh_poisson_generator(self, rate, t, t_stop, array=False) method of NeuroTools.stgen.StGen instance 
Returns a SpikeTrain whose spikes are a realization of an inhomogeneous 
poisson process (dynamic rate). The implementation uses the thinning 
method, as presented in the references. 

Inputs: 
    rate - an array of the rates (Hz) where rate[i] is active on interval 
      [t[i],t[i+1]] 
    t  - an array specifying the time bins (in milliseconds) at which to 
      specify the rate 
    t_stop - length of time to simulate process (in ms) 
    array - if True, a numpy array of sorted spikes is returned, 
      rather than a SpikeList object. 

Note: 
    t_start=t[0] 

References: 

Eilif Muller, Lars Buesing, Johannes Schemmel, and Karlheinz Meier 
Spike-Frequency Adapting Neural Ensembles: Beyond Mean Adaptation and Renewal Theories 
Neural Comput. 2007 19: 2958-3010. 

Devroye, L. (1986). Non-uniform random variate generation. New York: Springer-Verlag. 

Examples: 
    >> time = arange(0,1000) 
    >> stgen.inh_poisson_generator(time,sin(time), 1000)enter code here 

Répondre

1

Je n'ai pas vraiment une réponse pour vous, mais parce que ce poste m'a aidé à démarrer avec NeuroTools, je pensais que je partagerais mon petit exemple qui est fonctionnant bien

Pour le inh_poisson_generator() le taux en mettre est en unité Hz et tous les temps sont en ms. J'utilise un taux moyen de 1,6 picots/ms, donc je m'attends à recevoir environ 4000 événements. Les résultats confirment que tout va bien!

Je suppose que vous utilisez peut-être un taux non continu. Cependant, je connais à peine l'algorithme implémenté pour cette fonction.

J'espère que mon exemple peut vous aider d'une manière ou d'une autre!

import NeuroTools 
from NeuroTools import stgen 
v0=1.6 #spikes/ms 
Amp=1 # amplitude in spikes/ms 
w=4/1000 # periodic frequency in spikes/ms 
st_gen = stgen.StGen() 
tstop=2500.0 
intervals=np.arange(0,tstop,0.05) 
rate=np.array([]) 
for tt in intervals: 
    v_next=v0+Amp*math.sin(2*math.pi*w*tt) 
    if (v_next>0.0): 
      rate=np.append(rate,v_next*1000) 
    else: rate=np.append(rate,0.0) 
PSim=st_gen.inh_poisson_generator(rate=rate,t = intervals, t_stop = 2500.0, array = True) # important to have rate in Hz and all other times in ms 
print len(PSim) 
print np.mean(rate)/1000*tstop