14
$\begingroup$

I have what technically should be an event series, spike times of a neuron. Here's a subset of the spiking data -

st = {2.60661, 4.39836, 5.01687, 6.09621, 6.62883, 6.93686, 7.31116, 8.14444, 8.56538, 9.11395}

If I whip this into a TimeSeries then I can easily Accumulate[] them to yield a counting function like so:

spikeData = TimeSeries[Table[1,Length[st]],{st}];
accSpikeData = Accumulate[spikeData];
Row[{ListPlot[spikeData, Filling -> Bottom],ListPlot[accSpikeData, Filling -> Bottom]}]

Mathematica graphics

But- If I do the same thing with an EventSeries instead...

spikeData = EventSeries[Table[1, Length[st]], {st}];
accSpikeData = Accumulate[spikeData];
Row[{ListPlot[spikeData, Filling -> Bottom], ListPlot[accSpikeData, Filling -> Bottom]}]

Mathematica graphics

And, indeed, looking at the data-

accSpikeData["Path"]
(* {{2.60661, 1}, {4.39836, Missing[]}, {5.01687, Missing[]}, {6.09621, 
  Missing[]}, {6.62883, Missing[]}, {6.93686, Missing[]}, {7.31116, 
  Missing[]}, {8.14444, Missing[]}, {8.56538, Missing[]}} *)

I'm not sure if this is a bug or 'intended behavior'. As I understand EventSeries it is simply a non-interpolating version of TimeSeries, and, of course I can do what I need here with a TimeSeries but was just wondering why even having EventSeries is a thing.

$\endgroup$
10
$\begingroup$

This is intended behaviour and here is why. Accumulate on TimeSeries or on EventSeries assumes that it accumulates according to every regular step on times. So in case of irregularly sampled TimeSeries it interpolates and in case of irregularly sampled EventSeries it creates Missing[] values. Examples:

In[41]:= data = {1, 2, 3, 4, 5};
Accumulate[data]

Out[42]= {1, 3, 6, 10, 15}

Create a TimeSeries with irregular time stamps:

In[43]:= ts1 = TimeSeries[data, {{1, 1.5, 3, 3.5, 4}}];

Now Accumulate will cause the values to be interpolated automatically:

In[44]:= Accumulate[ts1]["Path"]

Out[44]= {{1., 1.}, {1.5, 3.}, {3., 11.}, {3.5, 15.}, {4., 20.}}

This is coming from subsampling ts11:

In[49]:= ts11 = TimeSeriesResample[ts1];
Accumulate[ts11]["Path"]

Out[50]= {{1., 1.}, {1.5, 3.}, {2., 5.33333}, {2.5, 8.}, {3., 11.}, {3.5, 15.}, {4., 20.}}

Compare to accumulating the values of ts1 directly:

In[46]:= Accumulate[ts1["Values"]]

Out[46]= {1, 3, 6, 10, 15}

Create another TimeSeries forcing the irregular time stamps to be treated as sequentially regular:

In[47]:= ts2 = TimeSeries[data, {{1, 1.5, 3, 3.5, 4}}, TemporalRegularity -> True];

Now accumulating ts2 gives the expected answer equivalent to accumulating the original data:

In[48]:= Accumulate[ts2]["Values"]

Out[48]= {1, 3, 6, 10, 15}

EventSeries does not interpolate automatically hence Accumulate chokes on Missing[] and gives red flag that something is off. What you need is to Accumulate the values directly or set TemporalRegularity to True upon (re)construction.

$\endgroup$
  • $\begingroup$ OK- this makes sense now, thank you @Gosia. The Wolfram docs need to be a little clearer on the difference betwixt Event and TimeSeries methinks. $\endgroup$ – flip Mar 4 '16 at 14:01

Your Answer

By clicking "Post Your Answer", you acknowledge that you have read our updated terms of service, privacy policy and cookie policy, and that your continued use of the website is subject to these policies.

Not the answer you're looking for? Browse other questions tagged or ask your own question.