Closed Datseris closed 5 years ago
Thanks! I need some time to do all these things, but everything seems reasonable, so I'll do it.
As a heads up: I decided I will make a minimal and dedicated package DelayEmbedding
. TimeseriesPrediction and RA can depend on that one, since they don't need OrdinaryDiffEq which is a very heavy dependency. I will finish all of this this weekend, and then you can put it in your depdencies and move the estimate_dimension methods there!
Alright, delay embedding moved here: https://github.com/JuliaDynamics/DelayEmbeddings.jl (it's not registered yet of course!).
I will now start porting the methods that estimate embedding dimension and delay time. I will also open up issues to discuss stuffs.
Alright, I've moved everything. You will find our old mutual information code in the file old_mutual_info.jl
, which I no longer include in DelayEmbeddings
until we compare with yours.
I've made the list a checklist for easier development.
Put ~
DynamicalSystemsBase
~DelayEmbeddings
to the dependencies of RA.
This is done, but if the methods to estimate the optimal dimension is eventually moved to DelayEmbeddings
, then this dependency should be removed, because RecurrenceAnalysis
will not use any of its methods. (RQA is done after the time series are embedded, so there is no need of the functions related to embedding.)
In general I plus one this. I have moved all methods that we had for estimating delay and dimension to DelayEmbeddings
so I guess we are waiting for the 2 remaining from this repo FNN and FFNN, if you want to move them.
We also have to compare the mutual information code which is another method for delay time.
One note: having DelayEmbeddings
as a dependency allows you to re-export it, which means that upon using RecurrenceAnalysis
all names from DelayEmbeddings
come into scope. This is convenient but of course may not be worth a full dependency :P
Following from here: https://gist.github.com/Datseris/3ca61b32dea2033aeae5c4dfe3e0b78c and from the discussion in #8
Here is what I believe are the best steps forward to make this really nice package an "official" part of JuliaDynamics:
RecurrenceAnalysis
to JuliaDynamics org. (When you do I will give you owner priviliges for it)DynamicalSystemsBase
~DelayEmbeddings
to the dependencies of RA.reconstruct
~embed
fromDelayEmbeddings
exclusively. It is too many more features and it is much faster! This also means that all originalembed
code from RecurrenceAnalysis.jl is discarded.distancematrix
is concerned, we could mainly use the method I wrote in this notebook, which uses aDataset
. I suggest to write a higher level if-clause that if the dimensionality of the dataset is more than let's say 10, it converts it to a matrix and uses your method. This means that both mine and your methods are written and we choose which one to use!recurrencematrix
could be made more intuitive. But on the other hand your method is just so darn fast!!! I don't know why, but I suggest that we keep your method for now and see how it goes. [Helios: I have actually modified it, and made a version for Datasets with improved performance.]estimate_dimension
to DynamicalSystemsBase. At the moment it lives inChaosTools
. (I'll do that)estimate_dimension
from DelayEmbeddings exclusively. Contribute your extra two methods FNN and FFNN to DelayEmbeddings. I will be overviewing the contribution PRs and be sure we also get better performance (they should also be reworked to "just return the values at the given dimensions" instead of only first and last).estimate_delay
) and the one in RA. Use the best one exclusively in both DelayEmbeddings and RA. It is already clear that the method in RA has more features than then one in DelayEmbeddings, the only thing left to check is the performance.Metric
instance. E.g."euclidean" => Euclidean()
. This is important for education as it teaches the Julia way. But this is just my humble opinion. [The eventual solution is allowing both methods, using function barrier for better performance.]Once these are done, and if you agree of course, we make RA an official part of DS by
ChaosTools
). For this to happen we will also have to write a proper documentation (i.e. separate / expand the current README to documenter acceptable files that expand the docstrings. I will take care of that).You might think number 1 is irrelevant or useless or unecessary but the philoshopy of JuliaDynamics is that the source code is clear and understandable.