sails issueshttps://vcs.ynic.york.ac.uk/analysis/sails/-/issues2020-03-17T14:04:18Zhttps://vcs.ynic.york.ac.uk/analysis/sails/-/issues/64increase range of AR estimators2020-03-17T14:04:18ZAndrew Quinnincrease range of AR estimatorsWould be nice to include implementations of Yule-Walker, Nuttall-Strand and Burg algorithms alongside the Vieira-Morf and OLSWould be nice to include implementations of Yule-Walker, Nuttall-Strand and Burg algorithms alongside the Vieira-Morf and OLShttps://vcs.ynic.york.ac.uk/analysis/sails/-/issues/63forecasting2020-03-17T14:04:29ZAndrew QuinnforecastingAR models are often used for forecasting multiple steps ahead in a time-series. We currently only have functionality for making predictions a single step ahead.
We should consider adding a forecast module with functions for multiple step predictions and related functionalityAR models are often used for forecasting multiple steps ahead in a time-series. We currently only have functionality for making predictions a single step ahead.
We should consider adding a forecast module with functions for multiple step predictions and related functionalityhttps://vcs.ynic.york.ac.uk/analysis/sails/-/issues/62mode thresholding by permutation2020-03-17T14:04:44ZAndrew Quinnmode thresholding by permutationWe should include functions for establishing which modes in a decomposition are 'significant' by non-parametric permutationWe should include functions for establishing which modes in a decomposition are 'significant' by non-parametric permutationhttps://vcs.ynic.york.ac.uk/analysis/sails/-/issues/61check AIC/BIC values against other regression packages2020-03-17T14:03:44ZAndrew Quinncheck AIC/BIC values against other regression packagesI did this years ago but more alternative packages around now. For example: the statsmodels fit used in [tutorial8](https://sails.readthedocs.io/en/stable/tutorials/tutorial8.html) has a different AIC to our fit, would be good to at least understand the differenceI did this years ago but more alternative packages around now. For example: the statsmodels fit used in [tutorial8](https://sails.readthedocs.io/en/stable/tutorials/tutorial8.html) has a different AIC to our fit, would be good to at least understand the differencehttps://vcs.ynic.york.ac.uk/analysis/sails/-/issues/60review unused functions2020-03-17T13:48:12ZAndrew Quinnreview unused functionsSeveral functions around are either redundant following other developments or part of experimental pipelines that aren't recommended anymore. We should review/move/delete these
in particular, model.py has
* ``find_noise_poles``
* ``get_noise_thresh_gamma``
* ``cluster_modes``
* ``get_cluster_average``Several functions around are either redundant following other developments or part of experimental pipelines that aren't recommended anymore. We should review/move/delete these
in particular, model.py has
* ``find_noise_poles``
* ``get_noise_thresh_gamma``
* ``cluster_modes``
* ``get_cluster_average``https://vcs.ynic.york.ac.uk/analysis/sails/-/issues/59rationalise modal transfer function methods2020-03-17T13:48:35ZAndrew Quinnrationalise modal transfer function methodsWe currently have 4 methods for computing a modal H
* ``modal_transfer_function`` in mvar_metrics
* ``MvarModalDecomposition.transfer_function``
* ``MvarModalDecomposition.per_mode_transfer_function``
* ``MvarModalDecomposition.modal_transfer_function``
We should split out a canonical function which can be reused where necessary - several of the existing ones are probably redundantWe currently have 4 methods for computing a modal H
* ``modal_transfer_function`` in mvar_metrics
* ``MvarModalDecomposition.transfer_function``
* ``MvarModalDecomposition.per_mode_transfer_function``
* ``MvarModalDecomposition.modal_transfer_function``
We should split out a canonical function which can be reused where necessary - several of the existing ones are probably redundanthttps://vcs.ynic.york.ac.uk/analysis/sails/-/issues/58rationalise ModalMvarMetrics constructors2020-03-17T13:48:22ZAndrew Quinnrationalise ModalMvarMetrics constructors``initialise`` and ``initialise_from_modes`` in ``ModalMvarMetrics`` are very similar and only have one or two args different - probably worth simplifying into a single function``initialise`` and ``initialise_from_modes`` in ``ModalMvarMetrics`` are very similar and only have one or two args different - probably worth simplifying into a single functionhttps://vcs.ynic.york.ac.uk/analysis/sails/-/issues/21cache computed versions of less common MVAR metrics2020-03-17T14:02:05ZAndrew Quinncache computed versions of less common MVAR metricsThe major spectral metrics in the MVARMetrics objects (eg H,S) are computed on init and stored in the memory. The less commonly used ones (partial_directed_coherence, partial_coherence, geweke_granger_causality) are computed when the property is accessed. We should consider caching these metrics once the first computation has completed to save time on subsequent calls
ie
```
self._pdc = None
@property
def pdc(self):
if self._pdc is None:
#compute pdc
self._pdc = pdc
return self._pdc
```The major spectral metrics in the MVARMetrics objects (eg H,S) are computed on init and stored in the memory. The less commonly used ones (partial_directed_coherence, partial_coherence, geweke_granger_causality) are computed when the property is accessed. We should consider caching these metrics once the first computation has completed to save time on subsequent calls
ie
```
self._pdc = None
@property
def pdc(self):
if self._pdc is None:
#compute pdc
self._pdc = pdc
return self._pdc
```https://vcs.ynic.york.ac.uk/analysis/sails/-/issues/18add pole-pair identification function to modal2020-02-27T17:09:51ZAndrew Quinnadd pole-pair identification function to modalAdd function for finding pairs within a set of indices into modal.evalsAdd function for finding pairs within a set of indices into modal.evalshttps://vcs.ynic.york.ac.uk/analysis/sails/-/issues/17add epoching functions to utils2020-03-17T14:00:40ZAndrew Quinnadd epoching functions to utilsAdd functions to
a) apply epochs to continuous dataset based on a [2 x n] array of epoch start,stop indices
b) apply pseudoepochs to a continuous dataset based on a specified epoch lengthAdd functions to
a) apply epochs to continuous dataset based on a [2 x n] array of epoch start,stop indices
b) apply pseudoepochs to a continuous dataset based on a specified epoch lengthhttps://vcs.ynic.york.ac.uk/analysis/sails/-/issues/14make an AbstractModal class2019-02-03T14:09:49ZAndrew Quinnmake an AbstractModal classCurrently the MvarModalDecomposition contains all the modal routines, we should move some of these out to an Abstract class so alternative decompositions can be implemented (eg Hankel). Could use Fourier/Modal MVAR metrics as a referenceCurrently the MvarModalDecomposition contains all the modal routines, we should move some of these out to an Abstract class so alternative decompositions can be implemented (eg Hankel). Could use Fourier/Modal MVAR metrics as a referencehttps://vcs.ynic.york.ac.uk/analysis/sails/-/issues/13speed up metrics2020-03-17T14:00:23ZAndrew Quinnspeed up metricsThere are too many loops in the functions called by AbstractMVARMetrics. We don't notice for smaller datasets but is quite time-consuming for whole brain runs. Can we reduce these by using smarter numpy matrix multiplications?There are too many loops in the functions called by AbstractMVARMetrics. We don't notice for smaller datasets but is quite time-consuming for whole brain runs. Can we reduce these by using smarter numpy matrix multiplications?https://vcs.ynic.york.ac.uk/analysis/sails/-/issues/12Review use of .initialise constructors2019-02-03T14:04:06ZAndrew QuinnReview use of .initialise constructorsxxx.initialise is used quite frequently as a classmethod, but often on classes with a single initialisation paradigm and ends up getting cumbersome to use. I think I ended up using this by default when writing some classes (eg modes and metrics). It could possibly be simplified.xxx.initialise is used quite frequently as a classmethod, but often on classes with a single initialisation paradigm and ends up getting cumbersome to use. I think I ended up using this by default when writing some classes (eg modes and metrics). It could possibly be simplified.