From 994f9f6636bfddcdf2615f0d019a251fcef2801d Mon Sep 17 00:00:00 2001 From: "Documenter.jl" Date: Fri, 24 Jan 2025 09:21:07 +0000 Subject: [PATCH] build based on fe8cf17 --- dev/.documenter-siteinfo.json | 2 +- dev/90-contributing/index.html | 2 +- dev/91-developer/index.html | 4 +- dev/HowTo/custom_solvers/index.html | 4 +- dev/HowTo/multiple_events/index.html | 4 +- dev/HowTo/pymne/index.html | 4 +- dev/HowTo/standarderrors/index.html | 4 +- dev/assets/logo.png | Bin 0 -> 14884 bytes dev/explanations/basisfunctions/0d47e2f7.png | Bin 94355 -> 0 bytes dev/explanations/basisfunctions/31156a06.png | Bin 0 -> 90090 bytes dev/explanations/basisfunctions/index.html | 6 +- dev/explanations/development/index.html | 4 +- dev/generated/HowTo/FIRduration/index.html | 4 +- dev/generated/HowTo/contrasts/index.html | 4 +- dev/generated/HowTo/effects/index.html | 4 +- .../HowTo/juliacall_unfold/index.html | 4 +- dev/generated/HowTo/unfold_io/index.html | 4 +- .../explanations/nonlinear_effects/index.html | 4 +- dev/generated/explanations/predict/index.html | 4 +- .../explanations/window_length/index.html | 4 +- dev/generated/references/solver/index.html | 6 +- dev/index.html | 4 +- dev/installation/index.html | 2 +- dev/references/benchmarks/index.html | 4 +- dev/references/extensions/index.html | 4 +- dev/references/functions/index.html | 56 +++++++++--------- dev/references/types/index.html | 2 +- dev/tutorials/lm_mu/index.html | 4 +- dev/tutorials/lm_overlap/index.html | 4 +- 29 files changed, 76 insertions(+), 76 deletions(-) create mode 100644 dev/assets/logo.png delete mode 100644 dev/explanations/basisfunctions/0d47e2f7.png create mode 100644 dev/explanations/basisfunctions/31156a06.png diff --git a/dev/.documenter-siteinfo.json b/dev/.documenter-siteinfo.json index 9f775cbb..f8bc4df4 100644 --- a/dev/.documenter-siteinfo.json +++ b/dev/.documenter-siteinfo.json @@ -1 +1 @@ -{"documenter":{"julia_version":"1.11.3","generation_timestamp":"2025-01-24T09:11:29","documenter_version":"1.8.0"}} \ No newline at end of file +{"documenter":{"julia_version":"1.11.3","generation_timestamp":"2025-01-24T09:20:58","documenter_version":"1.8.0"}} \ No newline at end of file diff --git a/dev/90-contributing/index.html b/dev/90-contributing/index.html index 07480e23..7aa02b57 100644 --- a/dev/90-contributing/index.html +++ b/dev/90-contributing/index.html @@ -1,2 +1,2 @@ -Contributing guidelines · Unfold.jl Timeseries Analysis & Deconvolution

Contributing guidelines

First of all, thanks for the interest!

We welcome all kinds of contribution, including, but not limited to code, documentation, examples, configuration, issue creating, etc.

Be polite and respectful, and follow the code of conduct.

Bug reports and discussions

If you think you found a bug, feel free to open an issue. Focused suggestions and requests can also be opened as issues. Before opening a pull request, start an issue or a discussion on the topic, please.

Working on an issue

If you found an issue that interests you, comment on that issue what your plans are. If the solution to the issue is clear, you can immediately create a pull request (see below). Otherwise, say what your proposed solution is and wait for a discussion around it.

Tip

Feel free to ping us after a few days if there are no responses.

If your solution involves code (or something that requires running the package locally), check the developer documentation. Otherwise, you can use the GitHub interface directly to create your pull request.

+Contributing guidelines · Unfold.jl Timeseries Analysis & Deconvolution

Contributing guidelines

First of all, thanks for the interest!

We welcome all kinds of contribution, including, but not limited to code, documentation, examples, configuration, issue creating, etc.

Be polite and respectful, and follow the code of conduct.

Bug reports and discussions

If you think you found a bug, feel free to open an issue. Focused suggestions and requests can also be opened as issues. Before opening a pull request, start an issue or a discussion on the topic, please.

Working on an issue

If you found an issue that interests you, comment on that issue what your plans are. If the solution to the issue is clear, you can immediately create a pull request (see below). Otherwise, say what your proposed solution is and wait for a discussion around it.

Tip

Feel free to ping us after a few days if there are no responses.

If your solution involves code (or something that requires running the package locally), check the developer documentation. Otherwise, you can use the GitHub interface directly to create your pull request.

diff --git a/dev/91-developer/index.html b/dev/91-developer/index.html index e5ee7d11..6702c7fe 100644 --- a/dev/91-developer/index.html +++ b/dev/91-developer/index.html @@ -1,5 +1,5 @@ -Developer documentation · Unfold.jl Timeseries Analysis & Deconvolution

Developer documentation

Contributing guidelines

If you haven't, please read the Contributing guidelines first.

If you want to make contributions to this package that involves code, then this guide is for you.

First time clone

If you have writing rights

If you have writing rights, you don't have to fork. Instead, simply clone and skip ahead. Whenever upstream is mentioned, use origin instead.

If this is the first time you work with this repository, follow the instructions below to clone the repository.

  1. Fork this repo

  2. Clone your repo (this will create a git remote called origin)

  3. Add this repo as a remote:

    git remote add upstream https://github.com/unfoldtoolbox/Unfold.jl

This will ensure that you have two remotes in your git: origin and upstream. You will create branches and push to origin, and you will fetch and update your local main branch from upstream.

Linting and formatting

Install a plugin on your editor to use EditorConfig. This will ensure that your editor is configured with important formatting settings.

We use https://pre-commit.com to run the linters and formatters. In particular, the Julia code is formatted using JuliaFormatter.jl, so please install it globally first:

julia> # Press ]
+Developer documentation · Unfold.jl Timeseries Analysis & Deconvolution

Developer documentation

Contributing guidelines

If you haven't, please read the Contributing guidelines first.

If you want to make contributions to this package that involves code, then this guide is for you.

First time clone

If you have writing rights

If you have writing rights, you don't have to fork. Instead, simply clone and skip ahead. Whenever upstream is mentioned, use origin instead.

If this is the first time you work with this repository, follow the instructions below to clone the repository.

  1. Fork this repo

  2. Clone your repo (this will create a git remote called origin)

  3. Add this repo as a remote:

    git remote add upstream https://github.com/unfoldtoolbox/Unfold.jl

This will ensure that you have two remotes in your git: origin and upstream. You will create branches and push to origin, and you will fetch and update your local main branch from upstream.

Linting and formatting

Install a plugin on your editor to use EditorConfig. This will ensure that your editor is configured with important formatting settings.

We use https://pre-commit.com to run the linters and formatters. In particular, the Julia code is formatted using JuliaFormatter.jl, so please install it globally first:

julia> # Press ]
 pkg> activate
 pkg> add JuliaFormatter

To install pre-commit, we recommend using pipx as follows:

# Install pipx following the link
 pipx install pre-commit

With pre-commit installed, activate it as a pre-commit hook:

pre-commit install

To run the linting and formatting manually, enter the command below:

pre-commit run -a

Now, you can only commit if all the pre-commit tests pass.

Testing

As with most Julia packages, you can just open Julia in the repository folder, activate the environment, and run test:

julia> # press ]
@@ -7,4 +7,4 @@
 pkg> test

Working on a new issue

We try to keep a linear history in this repo, so it is important to keep your branches up-to-date.

  1. Fetch from the remote and fast-forward your local main

    git fetch upstream
     git switch main
     git merge --ff-only upstream/main
  2. Branch from main to address the issue (see below for naming)

    git switch -c 42-add-answer-universe
  3. Push the new local branch to your personal remote repository

    git push -u origin 42-add-answer-universe
  4. Create a pull request to merge your remote branch into the org main.

Branch naming

  • If there is an associated issue, add the issue number.
  • If there is no associated issue, and the changes are small, add a prefix such as "typo", "hotfix", "small-refactor", according to the type of update.
  • If the changes are not small and there is no associated issue, then create the issue first, so we can properly discuss the changes.
  • Use dash separated imperative wording related to the issue (e.g., 14-add-tests, 15-fix-model, 16-remove-obsolete-files).

Commit message

  • Use imperative or present tense, for instance: Add feature or Fix bug.
  • Have informative titles.
  • When necessary, add a body with details.
  • If there are breaking changes, add the information to the commit message.

Before creating a pull request

Atomic git commits

Try to create "atomic git commits" (recommended reading: The Utopic Git History).

  • Make sure the tests pass.

  • Make sure the pre-commit tests pass.

  • Fetch any main updates from upstream and rebase your branch, if necessary:

    git fetch upstream
    -git rebase upstream/main BRANCH_NAME
  • Then you can open a pull request and work with the reviewer to address any issues.

Building and viewing the documentation locally

Following the latest suggestions, we recommend using LiveServer to build the documentation. Here is how you do it:

  1. Run julia --project=docs to open Julia in the environment of the docs.
  2. If this is the first time building the docs
    1. Press ] to enter pkg mode
    2. Run pkg> dev . to use the development version of your package
    3. Press backspace to leave pkg mode
  3. Run julia> using LiveServer
  4. Run julia> servedocs()
+git rebase upstream/main BRANCH_NAME
  • Then you can open a pull request and work with the reviewer to address any issues.

  • Building and viewing the documentation locally

    Following the latest suggestions, we recommend using LiveServer to build the documentation. Here is how you do it:

    1. Run julia --project=docs to open Julia in the environment of the docs.
    2. If this is the first time building the docs
      1. Press ] to enter pkg mode
      2. Run pkg> dev . to use the development version of your package
      3. Press backspace to leave pkg mode
    3. Run julia> using LiveServer
    4. Run julia> servedocs()
    diff --git a/dev/HowTo/custom_solvers/index.html b/dev/HowTo/custom_solvers/index.html index f01bde04..82e3943b 100644 --- a/dev/HowTo/custom_solvers/index.html +++ b/dev/HowTo/custom_solvers/index.html @@ -1,5 +1,5 @@ -Alternative Solvers (Robust, GPU, B2B) · Unfold.jl Timeseries Analysis & Deconvolution

    Alternative Solvers

    A solver takes an Unfold-specified DesignMatrix and the data, and typically solves the equation system y = Xb (in the case of Linear Models). There are many different ways how one can approach this problem, depending if the matrix is sparse, if it is 2D or 3D, if one wants to use GPU etc.

    Most implemented solvers ultimately make use of solver_main for their main loop. See the reference tutorial for more information if that is interesting to you.

    Setup some data

    using Unfold
    +Alternative Solvers (Robust, GPU, B2B) · Unfold.jl Timeseries Analysis & Deconvolution

    Alternative Solvers

    A solver takes an Unfold-specified DesignMatrix and the data, and typically solves the equation system y = Xb (in the case of Linear Models). There are many different ways how one can approach this problem, depending if the matrix is sparse, if it is 2D or 3D, if one wants to use GPU etc.

    Most implemented solvers ultimately make use of solver_main for their main loop. See the reference tutorial for more information if that is interesting to you.

    Setup some data

    using Unfold
     using UnfoldMakie, CairoMakie
     using UnfoldSim
     dat, evts = UnfoldSim.predef_eeg(; noiselevel = 10, return_epoched = true)
    @@ -18,4 +18,4 @@
     m = Unfold.fit(UnfoldModel, designDict, evts, dat_3d; solver = b2b_solver)
     results = coeftable(m)
     
    -plot_erp(results)

    These are the decoding results for conditionA while considering conditionB, and vice versa.

    +plot_erp(results)

    These are the decoding results for conditionA while considering conditionB, and vice versa.

    diff --git a/dev/HowTo/multiple_events/index.html b/dev/HowTo/multiple_events/index.html index 5d0e2f83..125f25a1 100644 --- a/dev/HowTo/multiple_events/index.html +++ b/dev/HowTo/multiple_events/index.html @@ -1,5 +1,5 @@ -Multiple events · Unfold.jl Timeseries Analysis & Deconvolution

    How to model multiple events

    When dealing with overlapping data, it is often necessary to model multiple eventtypes (e.g. fixations, stimuli, responses).

    Load Example Data

    using Unfold
    +Multiple events · Unfold.jl Timeseries Analysis & Deconvolution

    How to model multiple events

    When dealing with overlapping data, it is often necessary to model multiple eventtypes (e.g. fixations, stimuli, responses).

    Load Example Data

    using Unfold
     using UnfoldMakie, CairoMakie
     using DataFrames
     using StatsModels
    @@ -23,4 +23,4 @@
         eventcolumn = "type",
     )
     results = coeftable(m)
    -plot_erp(results; stderror = true, mapping = (; col = :eventname))
    Example block output
    +plot_erp(results; stderror = true, mapping = (; col = :eventname))
    Example block output
    diff --git a/dev/HowTo/pymne/index.html b/dev/HowTo/pymne/index.html index 1b3caa10..cedccd3e 100644 --- a/dev/HowTo/pymne/index.html +++ b/dev/HowTo/pymne/index.html @@ -1,5 +1,5 @@ -🐍 Import EEG with PyMNE.jl · Unfold.jl Timeseries Analysis & Deconvolution

    Loading Data into Unfold

    Unfold is generally agnostic to how you load your data. You only require a Matrix (channel x time) or 3D-Array(channel x time x epochs) and an event-dataframe.

    Setup

    using Unfold
    +🐍 Import EEG with PyMNE.jl · Unfold.jl Timeseries Analysis & Deconvolution

    Loading Data into Unfold

    Unfold is generally agnostic to how you load your data. You only require a Matrix (channel x time) or 3D-Array(channel x time x epochs) and an event-dataframe.

    Setup

    using Unfold
     using UnfoldMakie,CairoMakie
     using PyMNE
     using DataFrames

    MNE Demo Dataset

    The easiest way to showcase this is to simply use a demo-dataset from MNE.

    limo_epochs = PyMNE.datasets.limo.load_data(subject=1,path="~/MNE/DATA",update_path=false)
    @@ -17,4 +17,4 @@
     rename!(events,2=>:coherence) # negative signs in formulas are not good ;)
     events.face = string.(events.face) # ugly names, but fast
     

    Next fit an Unfold Model

    uf = fit(UnfoldModel,[Any=>(@formula(0~face+coherence),Float64.(limo_epochs.times))],events,data)
    -results = coeftable(uf)
    plot_results(results)

    Read some of your own data

    We can make use of all PyMNE importer functions to load the data. Try it for your own data! Get starting with Unfold in no-time!

    #eeglabdata = PyMNE.io.read_raw_eeglab("pathToEEGLabSet.set")

    Contribute?

    Some extra conversions are needed to import the data from PyMNE to Unfold (as shown above). We could try putting these in a wrapper function - do you want to tackle this challenge? Would be a great first contribution to the toolbox :-)

    +results = coeftable(uf)
    plot_results(results)

    Read some of your own data

    We can make use of all PyMNE importer functions to load the data. Try it for your own data! Get starting with Unfold in no-time!

    #eeglabdata = PyMNE.io.read_raw_eeglab("pathToEEGLabSet.set")

    Contribute?

    Some extra conversions are needed to import the data from PyMNE to Unfold (as shown above). We could try putting these in a wrapper function - do you want to tackle this challenge? Would be a great first contribution to the toolbox :-)

    diff --git a/dev/HowTo/standarderrors/index.html b/dev/HowTo/standarderrors/index.html index 4ad4d470..b57a43fd 100644 --- a/dev/HowTo/standarderrors/index.html +++ b/dev/HowTo/standarderrors/index.html @@ -1,5 +1,5 @@ -Standard errors · Unfold.jl Timeseries Analysis & Deconvolution

    Standard Errors

    Setup some data

    using Unfold
    +Standard errors · Unfold.jl Timeseries Analysis & Deconvolution

    Standard Errors

    Setup some data

    using Unfold
     using UnfoldMakie, CairoMakie
     using UnfoldSim
     dat, evts = UnfoldSim.predef_eeg(; noiselevel = 10, return_epoched = true)
    @@ -8,4 +8,4 @@
     designDict = Dict(Any => (f, range(0, 1, length = size(dat, 1))))

    It is possible to specify a solver that calculates the standard errors of the estimates for a single subject as it possible for custom solvers.

    se_solver = (x, y) -> Unfold.solver_default(x, y, stderror = true)
     m = Unfold.fit(UnfoldModel, designDict, evts, dat, solver = se_solver)
     results = coeftable(m)
    -plot_erp(results; stderror = true)
    Warning

    In case of overlap-correction: Use single-subject standard errors on your own risk. EEG data is autocorrelated, which means that standard errors are typically too small.

    +plot_erp(results; stderror = true)
    Warning

    In case of overlap-correction: Use single-subject standard errors on your own risk. EEG data is autocorrelated, which means that standard errors are typically too small.

    diff --git a/dev/assets/logo.png b/dev/assets/logo.png new file mode 100644 index 0000000000000000000000000000000000000000..b107d3f58aae16ee71152c9f95e899a8e827ffc0 GIT binary patch literal 14884 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ℜ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 MUHx3vIVCg!04{b8(f|Me literal 0 HcmV?d00001 diff --git a/dev/explanations/basisfunctions/index.html b/dev/explanations/basisfunctions/index.html index 2c6a240e..3ea11c74 100644 --- a/dev/explanations/basisfunctions/index.html +++ b/dev/explanations/basisfunctions/index.html @@ -1,5 +1,5 @@ -Basisfunctions · Unfold.jl Timeseries Analysis & Deconvolution

    Basis Functions

    This document will give you an explanation of basis functions. We start with basis functions for fMRI because they are very popular.

    HRF / BOLD

    We want to define a basis function. There are currently only few basisfunctions implemented in Unfold.jl, but your imagination knows no borders!

    We first have a look at the BOLD-HRF basisfunction aka Blood Oxygenation Level Dependent Hemodynamic Response Function:

    using Unfold, DSP
    +Basisfunctions · Unfold.jl Timeseries Analysis & Deconvolution

    Basis Functions

    This document will give you an explanation of basis functions. We start with basis functions for fMRI because they are very popular.

    HRF / BOLD

    We want to define a basis function. There are currently only few basisfunctions implemented in Unfold.jl, but your imagination knows no borders!

    We first have a look at the BOLD-HRF basisfunction aka Blood Oxygenation Level Dependent Hemodynamic Response Function:

    using Unfold, DSP
     
     TR = 1.5 # the sampling rate
     bold = hrfbasis(TR) # using default SPM parameters
    @@ -12,7 +12,7 @@
     y_conv = conv(y, bold_kernel(0)) # convolve!
     lines(y_conv[:,1])
    Example block output

    Next, we would add some noise:

    using Random
     y_conv += randn(size(y_conv))
    -lines(y_conv[:,1])
    Example block output

    🎉 - we did it, we simulated fMRI data.

    Now you can see that the conditions overlap in time. To get back to the original amplitude values, we need to specify a basis function and use Unfold to deconvolve the signals.

    Note

    Events can fall between TR (the sampling rate). Some packages subsample the time signal, but in Unfold we can call the bold.kernel function directly at a given event time, which allows us to use non-TR multiples.

    FIR Basis Function

    Okay, let's have a look at a different basis function: The FIR basisfunction. FIR stands for Finite-Impulse-Response and is a term taken from the filtering literature.

    basisfunction = firbasis(τ=(-0.4,.8), sfreq=50, name="myFIRbasis")
    +lines(y_conv[:,1])
    Example block output

    🎉 - we did it, we simulated fMRI data.

    Now you can see that the conditions overlap in time. To get back to the original amplitude values, we need to specify a basis function and use Unfold to deconvolve the signals.

    Note

    Events can fall between TR (the sampling rate). Some packages subsample the time signal, but in Unfold we can call the bold.kernel function directly at a given event time, which allows us to use non-TR multiples.

    FIR Basis Function

    Okay, let's have a look at a different basis function: The FIR basisfunction. FIR stands for Finite-Impulse-Response and is a term taken from the filtering literature.

    basisfunction = firbasis(τ=(-0.4,.8), sfreq=50, name="myFIRbasis")
     fir_kernel = e -> Unfold.kernel(basisfunction, e)
     m = fir_kernel(0)
     f = Figure()
    @@ -30,4 +30,4 @@
      ⋅  ⋅  ⋅  ⋅  ⋅  ⋅  1  ⋅  ⋅  ⋅
      ⋅  ⋅  ⋅  ⋅  ⋅  ⋅  ⋅  1  ⋅  ⋅
      ⋅  ⋅  ⋅  ⋅  ⋅  ⋅  ⋅  ⋅  1  ⋅
    - ⋅  ⋅  ⋅  ⋅  ⋅  ⋅  ⋅  ⋅  ⋅  1

    (all . are 0's)

    The FIR basis set consists of multiple basis functions. That is, each event is now time-expanded to multiple predictors, each with a certain time delay to the event onset. This allows us to model any linear overlap shape, and doesn't force us to make assumptions about the convolution kernel, as we had to do in the BOLD case.

    + ⋅ ⋅ ⋅ ⋅ ⋅ ⋅ ⋅ ⋅ ⋅ 1

    (all . are 0's)

    The FIR basis set consists of multiple basis functions. That is, each event is now time-expanded to multiple predictors, each with a certain time delay to the event onset. This allows us to model any linear overlap shape, and doesn't force us to make assumptions about the convolution kernel, as we had to do in the BOLD case.

    diff --git a/dev/explanations/development/index.html b/dev/explanations/development/index.html index 7037162d..f66fe077 100644 --- a/dev/explanations/development/index.html +++ b/dev/explanations/development/index.html @@ -1,3 +1,3 @@ -- · Unfold.jl Timeseries Analysis & Deconvolution

    Install a dev-version of Unfold

    In order to see and change the tutorials, you have to install a local dev-version of Unfold via:

    ]dev --local Unfold

    This clones the git#main into ./dev/Unfold

    Instantiating the documentation environment

    To generate documentation, we recommend to install LiveServer.jl - then you can do:

    using LiveServer
    -servedocs(skip_dirs=joinpath("docs","src","generated"),literate_dir=joinpath("docs","literate"))

    If you prefer a one-off:

    • activate the ./docs folder (be sure to ]instantiate the first time!)
    • run include("docs/make.jl")
    +- · Unfold.jl Timeseries Analysis & Deconvolution

    Install a dev-version of Unfold

    In order to see and change the tutorials, you have to install a local dev-version of Unfold via:

    ]dev --local Unfold

    This clones the git#main into ./dev/Unfold

    Instantiating the documentation environment

    To generate documentation, we recommend to install LiveServer.jl - then you can do:

    using LiveServer
    +servedocs(skip_dirs=joinpath("docs","src","generated"),literate_dir=joinpath("docs","literate"))

    If you prefer a one-off:

    • activate the ./docs folder (be sure to ]instantiate the first time!)
    • run include("docs/make.jl")
    diff --git a/dev/generated/HowTo/FIRduration/index.html b/dev/generated/HowTo/FIRduration/index.html index 7cf834e4..1c1102a9 100644 --- a/dev/generated/HowTo/FIRduration/index.html +++ b/dev/generated/HowTo/FIRduration/index.html @@ -1,5 +1,5 @@ -Duration-scaled basisfunctions (Hassall-style) · Unfold.jl Timeseries Analysis & Deconvolution
    using Unfold
    +Duration-scaled basisfunctions (Hassall-style) · Unfold.jl Timeseries Analysis & Deconvolution
    using Unfold
     using Interpolations
     
     using UnfoldSim
    @@ -71,4 +71,4 @@
     
     
     heatmap(Matrix(modelmatrix(m))')
    Example block output

    as one can see, now the designmatrix is not stretched - but rather "block"-ed

    p = predict(m; overlap = false)[1]
    -heatmap(p[1, :, :])
    Example block output

    This page was generated using Literate.jl.

    +heatmap(p[1, :, :])
    Example block output

    This page was generated using Literate.jl.

    diff --git a/dev/generated/HowTo/contrasts/index.html b/dev/generated/HowTo/contrasts/index.html index bc336f78..dbb5647a 100644 --- a/dev/generated/HowTo/contrasts/index.html +++ b/dev/generated/HowTo/contrasts/index.html @@ -1,5 +1,5 @@ -Change contrasts / coding schema · Unfold.jl Timeseries Analysis & Deconvolution
    using CairoMakie
    +Change contrasts / coding schema · Unfold.jl Timeseries Analysis & Deconvolution
    using CairoMakie
     using Unfold
     using UnfoldMakie
     using UnfoldSim
    @@ -31,4 +31,4 @@
     c_e.group .= "Effects Coding"
     c = vcat(c_d, c_e)
     
    -plot_erp(c; mapping = (; color = :coefname, col = :group))
    Example block output

    As expected, the effects-coding slope of condition: face is half the size of the dummy-coding one (because -1/1 coding was used).


    This page was generated using Literate.jl.

    +plot_erp(c; mapping = (; color = :coefname, col = :group))
    Example block output

    As expected, the effects-coding slope of condition: face is half the size of the dummy-coding one (because -1/1 coding was used).


    This page was generated using Literate.jl.

    diff --git a/dev/generated/HowTo/effects/index.html b/dev/generated/HowTo/effects/index.html index 5cdba669..230ca70c 100644 --- a/dev/generated/HowTo/effects/index.html +++ b/dev/generated/HowTo/effects/index.html @@ -1,5 +1,5 @@ -Marginal effects (must read re: splines) · Unfold.jl Timeseries Analysis & Deconvolution

    Marginal effects

    Marginal effect plots are useful for understanding model fits.

    If you are an EEG researcher, you can think of the coefficients as the 'difference waves' and the (marginal) effects as the 'modelled ERP evaluated at a certain predictor value combination'. In some way, we are fitting a model with coefficients, receiving intercepts and slopes, and then try to recover the 'classical' ERPs in their "data-domain", typically with some effect adjustment, overlap removal, or similar.

    Setup things

    Setup some packages

    using Unfold
    +Marginal effects (must read re: splines) · Unfold.jl Timeseries Analysis & Deconvolution

    Marginal effects

    Marginal effect plots are useful for understanding model fits.

    If you are an EEG researcher, you can think of the coefficients as the 'difference waves' and the (marginal) effects as the 'modelled ERP evaluated at a certain predictor value combination'. In some way, we are fitting a model with coefficients, receiving intercepts and slopes, and then try to recover the 'classical' ERPs in their "data-domain", typically with some effect adjustment, overlap removal, or similar.

    Setup things

    Setup some packages

    using Unfold
     using DataFrames
     using Random
     using CSV
    @@ -24,4 +24,4 @@
     eff = effects(Dict(:condition => ["car", "face"]), m)
     eff.typical .= :mean # mean is the default
     
    -plot_erp(vcat(eff, eff_max); mapping = (; color = :condition, col = :typical))
    Example block output

    This page was generated using Literate.jl.

    +plot_erp(vcat(eff, eff_max); mapping = (; color = :condition, col = :typical))
    Example block output

    This page was generated using Literate.jl.

    diff --git a/dev/generated/HowTo/juliacall_unfold/index.html b/dev/generated/HowTo/juliacall_unfold/index.html index daf7c3d9..6948ac0b 100644 --- a/dev/generated/HowTo/juliacall_unfold/index.html +++ b/dev/generated/HowTo/juliacall_unfold/index.html @@ -1,5 +1,5 @@ -🐍 Calling Unfold.jl directly from Python · Unfold.jl Timeseries Analysis & Deconvolution

    Using Unfold.jl from Python

    it is straight forward to call Unfold from Python using JuliaCall.

    Quick start

    Create a Python environment and install JuliaCall.

    pip install juliacall

    Create a Julia environment and install Unfold

    # Import the Julia package manager
    +🐍 Calling Unfold.jl directly from Python · Unfold.jl Timeseries Analysis & Deconvolution

    Using Unfold.jl from Python

    it is straight forward to call Unfold from Python using JuliaCall.

    Quick start

    Create a Python environment and install JuliaCall.

    pip install juliacall

    Create a Julia environment and install Unfold

    # Import the Julia package manager
     from juliacall import Pkg as jlPkg
     
     # Activate the environment in the current folder
    @@ -13,4 +13,4 @@
     # The function seval() can be used to evaluate a piece of Julia code given as a string
     jl.seval("using Unfold")
     Unfold = jl.Unfold # simplify name

    Now you can use all Unfold functions as for example

    dummy_model = Unfold.UnfoldLinearModel(jl.Dict())

    Example: Unfold model fitting from Python

    In this notebook, you can find a more detailed example of how to use Unfold from Python to load data, fit an Unfold model and visualise the results in Python.

    Important limitations

    Python doesnt not offer the full expressions that are available in Julia. So there are some things you need to give special attention:

    @formula: we havent found a way to call macros yet, even though we think it should be possible. For now please use f = jl.seval("@formula(0~1+my+cool+design)"). Later versions might support something like f = @formula("0~1+my+cool+design)" directly

    Specifying the design: Since Unfold 0.7 we officially switched to the

    ["eventtypeA"=>(formula,basisfunction),
    -"eventtypeB"=>(otherformula,otherbasisfunction)]

    Array-based syntax, from a Dict-based syntax. Unfortunately, => (a pair) is not supported in Python and one needs to do some rewriting:

    jl.convert(jl.Pair,(formula,basisfunction))

    which makes the code less readable. We are thinking of ways to remedy this - but right now there is now way around. For now, it is also possible to use the old syntax e.g. in python

    {"eventtypeA"=>(formula,basisfunction),"eventtypeB"=>(otherformula,otherbasisfunction)}

    which is clearly easier to read :)

    UnfoldSim.design: we need a Dict with a Symbol , one has to do something like condition_dict_jl = {convert(jl.Symbol,"condA"):["car", "face"]} to do so. We will [try to allow strings}(https://github.com/unfoldtoolbox/UnfoldSim.jl/issues/96) here as well, removing this constraint.

    When preprocessing your raw data through MNE Python, take the following into consideration: The Raw object contains the first_samp attribute which is an integer representing the number of time samples that passed between the onset of the hardware acquisition system and the time when data recording started. The Raw data doesn't include these time samples, meaning that the first sample is the beginning of the data aquisition. From the Raw object you can obtain an events array from the annotations through mne.eventsfromannotations(). The events array, however, does include firstsamp, meaning that the annotated events in events array don't match the Raw object anymore. Alternatively, it might be easier to convert the annotations to a pandas dataframe directly (`todataframe()`), or even better, load the "*events.tsv" from a BIDS dataset. In the latter case, all columns will be preserved, which MNE's read_annotation drops.


    This page was generated using Literate.jl.

    +"eventtypeB"=>(otherformula,otherbasisfunction)]

    Array-based syntax, from a Dict-based syntax. Unfortunately, => (a pair) is not supported in Python and one needs to do some rewriting:

    jl.convert(jl.Pair,(formula,basisfunction))

    which makes the code less readable. We are thinking of ways to remedy this - but right now there is now way around. For now, it is also possible to use the old syntax e.g. in python

    {"eventtypeA"=>(formula,basisfunction),"eventtypeB"=>(otherformula,otherbasisfunction)}

    which is clearly easier to read :)

    UnfoldSim.design: we need a Dict with a Symbol , one has to do something like condition_dict_jl = {convert(jl.Symbol,"condA"):["car", "face"]} to do so. We will [try to allow strings}(https://github.com/unfoldtoolbox/UnfoldSim.jl/issues/96) here as well, removing this constraint.

    When preprocessing your raw data through MNE Python, take the following into consideration: The Raw object contains the first_samp attribute which is an integer representing the number of time samples that passed between the onset of the hardware acquisition system and the time when data recording started. The Raw data doesn't include these time samples, meaning that the first sample is the beginning of the data aquisition. From the Raw object you can obtain an events array from the annotations through mne.eventsfromannotations(). The events array, however, does include firstsamp, meaning that the annotated events in events array don't match the Raw object anymore. Alternatively, it might be easier to convert the annotations to a pandas dataframe directly (`todataframe()`), or even better, load the "*events.tsv" from a BIDS dataset. In the latter case, all columns will be preserved, which MNE's read_annotation drops.


    This page was generated using Literate.jl.

    diff --git a/dev/generated/HowTo/unfold_io/index.html b/dev/generated/HowTo/unfold_io/index.html index ed3e841f..d81244f8 100644 --- a/dev/generated/HowTo/unfold_io/index.html +++ b/dev/generated/HowTo/unfold_io/index.html @@ -1,5 +1,5 @@ -Save and load Unfold models · Unfold.jl Timeseries Analysis & Deconvolution

    Save and load Unfold models

    Unfold.jl allows storing Unfold models in a memory-efficient way using (compressed) .jld2 files.

    Simulate EEG data and fit an Unfold model

    +Save and load Unfold models · Unfold.jl Timeseries Analysis & Deconvolution

    Save and load Unfold models

    Unfold.jl allows storing Unfold models in a memory-efficient way using (compressed) .jld2 files.

    Simulate EEG data and fit an Unfold model

    Click to expand

    Simulate some example data using UnfoldSim.jl

    using UnfoldSim
     data, events = UnfoldSim.predef_eeg(; n_repeats = 10)
     first(events, 5)
    5×3 DataFrame
    Rowcontinuousconditionlatency
    Float64StringInt64
    12.77778car62
    2-5.0face132
    3-1.66667car196
    4-5.0car249
    55.0car303

    Fit an Unfold model

    using Unfold
    @@ -8,4 +8,4 @@
     bfDict = Dict(Any => (f, basisfunction))
     m = fit(UnfoldModel, bfDict, events, data);
    ┌ Warning: using `Dict(:A=>(@formula,times/basisfunction))` is deprecated, please use `[:A=>(@formula,times/basisfunction)]` from now on
     └ @ Unfold ~/work/Unfold.jl/Unfold.jl/src/fit.jl:74

    Save and load the fitted Unfold model

    The following code saves the model in a compressed .jld2 file. The default option of the save function is compress=false. For memory efficiency the designmatrix is set to missing. If needed, it can be reconstructed when loading the model.

    save_path = mktempdir(; cleanup = false) # create a temporary directory for the example
    -save(joinpath(save_path, "m_compressed.jld2"), m; compress = true);

    The load function allows to retrieve the model again. By default, the designmatrix is reconstructed. If it is not needed set generate_Xs=false` which improves time-efficiency.

    m_loaded = load(joinpath(save_path, "m_compressed.jld2"), UnfoldModel, generate_Xs = true);

    This page was generated using Literate.jl.

    +save(joinpath(save_path, "m_compressed.jld2"), m; compress = true);

    The load function allows to retrieve the model again. By default, the designmatrix is reconstructed. If it is not needed set generate_Xs=false` which improves time-efficiency.

    m_loaded = load(joinpath(save_path, "m_compressed.jld2"), UnfoldModel, generate_Xs = true);

    This page was generated using Literate.jl.

    diff --git a/dev/generated/explanations/nonlinear_effects/index.html b/dev/generated/explanations/nonlinear_effects/index.html index 3caa286d..2cdd1cc4 100644 --- a/dev/generated/explanations/nonlinear_effects/index.html +++ b/dev/generated/explanations/nonlinear_effects/index.html @@ -1,5 +1,5 @@ -Non-Linear effects · Unfold.jl Timeseries Analysis & Deconvolution

    [Non-linear effects]](@id nonlinear)

    using BSplineKit, Unfold
    +Non-Linear effects · Unfold.jl Timeseries Analysis & Deconvolution

    [Non-linear effects]](@id nonlinear)

    using BSplineKit, Unfold
     using CairoMakie
     using DataFrames
     using Random
    @@ -73,4 +73,4 @@
     [lines!(weighted[k, :]) for k = 1:10]
     current_figure()
    Example block output

    Now sum them up.

    lines(sum(weighted, dims = 1)[1, :])
     plot!(X * β, color = "gray") #(same as matrixproduct X*β directly!)
    -current_figure()
    Example block output

    And this is how you can think about splines.


    This page was generated using Literate.jl.

    +current_figure()
    Example block output

    And this is how you can think about splines.


    This page was generated using Literate.jl.

    diff --git a/dev/generated/explanations/predict/index.html b/dev/generated/explanations/predict/index.html index 89ae5a9e..2a5eefff 100644 --- a/dev/generated/explanations/predict/index.html +++ b/dev/generated/explanations/predict/index.html @@ -1,5 +1,5 @@ -Predictions · Unfold.jl Timeseries Analysis & Deconvolution

    The predict-family

    # Setup
    +Predictions · Unfold.jl Timeseries Analysis & Deconvolution

    The predict-family

    # Setup
     using Unfold
     using UnfoldSim
     using CairoMakie
    @@ -19,4 +19,4 @@
     p_face = predict(m, exclude_basis = ["car"], eventcolumn = :condition) # same as keep_basis=["face"]
     f = lines(p_car[1, 1:1000])
     lines!(p_face[1, 1:1000])
    -f
    Example block output

    In the plot, we see the two partial predictions for car and face. They are respectively "0" outside the basisfunction windows

    Note

    The above options can be combined as well, e.g. to get an epoch_to, exclude_basis version. epoch_timewindow can be specified as well.


    This page was generated using Literate.jl.

    +f
    Example block output

    In the plot, we see the two partial predictions for car and face. They are respectively "0" outside the basisfunction windows

    Note

    The above options can be combined as well, e.g. to get an epoch_to, exclude_basis version. epoch_timewindow can be specified as well.


    This page was generated using Literate.jl.

    diff --git a/dev/generated/explanations/window_length/index.html b/dev/generated/explanations/window_length/index.html index e794d11c..2415029f 100644 --- a/dev/generated/explanations/window_length/index.html +++ b/dev/generated/explanations/window_length/index.html @@ -1,5 +1,5 @@ -Window Length Effect · Unfold.jl Timeseries Analysis & Deconvolution

    Window length effects

    using Unfold, UnfoldSim
    +Window Length Effect · Unfold.jl Timeseries Analysis & Deconvolution

    Window length effects

    using Unfold, UnfoldSim
     using CairoMakie, AlgebraOfGraphics, MakieThemes
     using Random
     using DataFrames, DataFramesMeta
    @@ -80,4 +80,4 @@
         x -> draw(x, axis = (; xlabel = "time [s]", ylabel = "estimate [a.u.]"));

    Add zero grid lines

    h1 = hlines!(current_axis(), [0], color = Colors.Gray(0.8));
     h2 = vlines!(current_axis(), [0], color = Colors.Gray(0.8));
     translate!(h1, 0, 0, -1);
    -translate!(h2, 0, 0, -1);

    Plot figure

    current_figure()
    Example block output

    This page was generated using Literate.jl.

    +translate!(h2, 0, 0, -1);

    Plot figure

    current_figure()
    Example block output

    This page was generated using Literate.jl.

    diff --git a/dev/generated/references/solver/index.html b/dev/generated/references/solver/index.html index 09f52f07..ef1c6037 100644 --- a/dev/generated/references/solver/index.html +++ b/dev/generated/references/solver/index.html @@ -1,5 +1,5 @@ -Solver/optimizer implementations · Unfold.jl Timeseries Analysis & Deconvolution

    Solver implementation

    This document describes how the solver_main is implemented and how to add custom solvers.

    some setup

    using Unfold, UnfoldSim, CairoMakie
    +Solver/optimizer implementations · Unfold.jl Timeseries Analysis & Deconvolution

    Solver implementation

    This document describes how the solver_main is implemented and how to add custom solvers.

    some setup

    using Unfold, UnfoldSim, CairoMakie
     using LinearAlgebra: cholesky

    Solver main

    This function gis a eneral purpose solver-wrapper function. It calls prepare_fun and iterates over the first dimension of data, repeatedly calling the solver_fun.

    Without any bells and whistles (progress, history etc.) the function roughly looks like this:

    function _solver_min(X, data; prepare_fun, solver_fun!, stderror = false)
         Ĥ, dataP, prepared = prepare_fun(X, data)
         for ch = 1:size(dataP, 2)
    @@ -28,7 +28,7 @@
      
     Useful functions: `design(uf)`, `designmatrix(uf)`, `coef(uf)`, `coeftable(uf)`

    Remember from this table the time for one solve (~700ms on my test-computer) this is the time per channel.

    series(coef(m))
    Example block output

    Cholesky Example

    Note

    the following function is already implemented in Unfold.jl as well. See ?Unfold.solver_predefined

    Given that the prepare function returns all necessary ingredients, this is a bit simple. So let's make it more complex

    for nicety, we need some unpacking wrappers

    _prepare_cholesky(all::Tuple) = _prepare_cholesky(all...)
     _prepare_cholesky(Ĥ, data, all::Tuple) = _prepare_cholesky(Ĥ, data, all...)
    _prepare_cholesky (generic function with 2 methods)

    this function effectively only pre-calculates the cholesky decomposition

    _prepare_cholesky(Ĥ, data, Xt, R_xx, R_xy) = (Ĥ, data, (Xt, cholesky(R_xx), R_xy))
    _prepare_cholesky (generic function with 3 methods)

    now we have everything to put together our solver-pipeline

    _my_prepare =
    -    (x, y) -> Unfold.prepare(collect(x), y) |> Unfold.prepare_XTX |> _prepare_cholesky
    #4 (generic function with 1 method)

    let's test (note we have to reshape the data)

    @time _my_prepare(modelmatrix(m), reshape(data, 1, :))
    ([0.0 0.0 … 0.0 0.0], [0.31631798033146774; 0.40338935529989906; … ; -0.22230944464885682; -0.01320095208877194;;], ([0.0 0.0 … 0.0 0.0; 0.0 0.0 … 0.0 0.0; … ; 0.0 0.0 … 1.0 0.0; 0.0 0.0 … 0.0 1.0], LinearAlgebra.Cholesky{Float64, Matrix{Float64}}([44.721359549995796 0.0 … 1.1627553482998907 0.9167878707749137; 0.0 44.721359549995796 … 0.9391485505499116 1.1627553482998907; … ; 52.0 42.0 … 22.354427580020936 0.0008355409821590546; 41.0 52.0 … 0.0 22.354385443812227], 'U', 0), [5.0e-324, 0.0, 5.0e-324, 1.0e-323, 5.0e-324, 6.90647113172193e-310, 1.5e-323, 1.0e-323, 6.90647113210137e-310, 2.0e-323  …  5.24e-322, 5.0e-322, 2.5e-323, 5.7e-322, 5.7e-322, 1.5e-323, 1.0e-323, 1.0e-323, 1.0e-323, 1.0e-323]))

    finally, we need a solver this is how we solve the single-channel equation

    function _my_cholesky!(beta, data, Xt, XtX_cholesky, R_xy)
    +    (x, y) -> Unfold.prepare(collect(x), y) |> Unfold.prepare_XTX |> _prepare_cholesky
    #4 (generic function with 1 method)

    let's test (note we have to reshape the data)

    @time _my_prepare(modelmatrix(m), reshape(data, 1, :))
    ([0.0 0.0 … 0.0 0.0], [0.31631798033146774; 0.40338935529989906; … ; -0.22230944464885682; -0.01320095208877194;;], ([0.0 0.0 … 0.0 0.0; 0.0 0.0 … 0.0 0.0; … ; 0.0 0.0 … 1.0 0.0; 0.0 0.0 … 0.0 1.0], LinearAlgebra.Cholesky{Float64, Matrix{Float64}}([44.721359549995796 0.0 … 1.1627553482998907 0.9167878707749137; 0.0 44.721359549995796 … 0.9391485505499116 1.1627553482998907; … ; 52.0 42.0 … 22.354427580020936 0.0008355409821590546; 41.0 52.0 … 0.0 22.354385443812227], 'U', 0), [5.0e-324, 0.0, 5.0e-324, 8.0e-322, 5.0e-324, 6.9206745170336e-310, 1.0e-323, 5.0e-324, 6.92067451135464e-310, 2.0e-323  …  1.6e-322, 6.9207908779453e-310, 1.7e-322, 1.63e-322, 6.92080109927657e-310, 1.73e-322, 1.7e-322, 6.92079363678257e-310, 1.8e-322, 1.73e-322]))

    finally, we need a solver this is how we solve the single-channel equation

    function _my_cholesky!(beta, data, Xt, XtX_cholesky, R_xy)
         @time Unfold.calc_Rxy!(R_xy, Xt, data)
         @time beta .= XtX_cholesky \ R_xy
     end
    @@ -51,4 +51,4 @@
      
     ✔ model is fit.  size(coefs) (1, 122) 
      
    -Useful functions: `design(uf)`, `designmatrix(uf)`, `coef(uf)`, `coeftable(uf)`

    This (on my test-computer) took only 97ms per channel, so it is ~7x faster per channel.

    series(coef(m))
    Example block output

    This page was generated using Literate.jl.

    +Useful functions: `design(uf)`, `designmatrix(uf)`, `coef(uf)`, `coeftable(uf)`

    This (on my test-computer) took only 97ms per channel, so it is ~7x faster per channel.

    series(coef(m))
    Example block output

    This page was generated using Literate.jl.

    diff --git a/dev/index.html b/dev/index.html index d005208c..1bd3c71a 100644 --- a/dev/index.html +++ b/dev/index.html @@ -1,5 +1,5 @@ -Unfold Documentation · Unfold.jl Timeseries Analysis & Deconvolution

    Unfold Documentation

    If you want to follow the tutorials, best to start with the mass-univariate approach, which should be familiar to you if you did ERPs before. Then the overlap-correction tutorial. If you are then not satisfied, check out more advanced topics: effects-interface (aka what to do after fitting), or non-linear effects.

    In case you want to understand the tools better, check out our explanations.

    Once you are familiar with the tools, check out further how-to guides for specific applications.

    In case you want to understand the toolbox better, we plan to offer technical references. This includes Benchmarks & Explorations.

    Quick start

    There are four main model types

    1. Timeexpansion No, Mixed No : fit(UnfoldModel, [Any=>(f, -0.1:0.01:0.5)], evts, data_epoch)
    2. Timeexpansion Yes, Mixed No : fit(UnfoldModel, [Any=>(f, basisfunction)], evts, data)
    3. Timeexpansion No, Mixed Yes : fit(UnfoldModel, [Any=>(fLMM, -0.1:0.01:0.5)], evts, data_epoch)
    4. Timeexpansion Yes, Mixed Yes: fit(UnfoldModel, [Any=>(fLMM, basisfunction)], evts, data)

    rERP model

    using Unfold
    +Unfold Documentation · Unfold.jl Timeseries Analysis & Deconvolution

    Unfold Documentation

    If you want to follow the tutorials, best to start with the mass-univariate approach, which should be familiar to you if you did ERPs before. Then the overlap-correction tutorial. If you are then not satisfied, check out more advanced topics: effects-interface (aka what to do after fitting), or non-linear effects.

    In case you want to understand the tools better, check out our explanations.

    Once you are familiar with the tools, check out further how-to guides for specific applications.

    In case you want to understand the toolbox better, we plan to offer technical references. This includes Benchmarks & Explorations.

    Quick start

    There are four main model types

    1. Timeexpansion No, Mixed No : fit(UnfoldModel, [Any=>(f, -0.1:0.01:0.5)], evts, data_epoch)
    2. Timeexpansion Yes, Mixed No : fit(UnfoldModel, [Any=>(f, basisfunction)], evts, data)
    3. Timeexpansion No, Mixed Yes : fit(UnfoldModel, [Any=>(fLMM, -0.1:0.01:0.5)], evts, data_epoch)
    4. Timeexpansion Yes, Mixed Yes: fit(UnfoldModel, [Any=>(fLMM, basisfunction)], evts, data)

    rERP model

    using Unfold
     using UnfoldSim
     data, evts = UnfoldSim.predef_eeg()
     
    @@ -15,4 +15,4 @@
     
     fLMM = @formula 0 ~ 1 + condition + (1|subject) + (1|item)
     fit(UnfoldModel, [Any=>(f, times)], evts, data)
    -nothing #hide
    +nothing #hide
    diff --git a/dev/installation/index.html b/dev/installation/index.html index f82f33be..a01181d2 100644 --- a/dev/installation/index.html +++ b/dev/installation/index.html @@ -1,2 +1,2 @@ -Installing Julia + Unfold.jl · Unfold.jl Timeseries Analysis & Deconvolution

    Installation

    Installing Julia

    The easiest way to install julia is using juliaup

    TLDR;

    • Windows: winget install julia -s msstore
    • Mac/Linux: curl -fsSL https://install.julialang.org | sh

    We further recommend to use VSCode. Make sure to install the Julia-Plugin, and install Revise.jl - a tutorial with screenshots can be found here

    Installing Unfold.jl

    You can enter the package manager (similar to conda) using ] in the REPL ("julia-commandline").

    This should result in (currentFolder) pkg> (with currentFolder being the project you currently work in)

    Hint

    if you see (@v1.9) pkg> instead, you still have to activate your environment. This can be done using:

    cd("/path/to/your/project") and ]activate .

    or alternatively ]activate /path/to/your/project/

    Now you can do pkg> add Unfold

    and after some installation:

    julia> using Unfold in the REPL

    +Installing Julia + Unfold.jl · Unfold.jl Timeseries Analysis & Deconvolution

    Installation

    Installing Julia

    The easiest way to install julia is using juliaup

    TLDR;

    • Windows: winget install julia -s msstore
    • Mac/Linux: curl -fsSL https://install.julialang.org | sh

    We further recommend to use VSCode. Make sure to install the Julia-Plugin, and install Revise.jl - a tutorial with screenshots can be found here

    Installing Unfold.jl

    You can enter the package manager (similar to conda) using ] in the REPL ("julia-commandline").

    This should result in (currentFolder) pkg> (with currentFolder being the project you currently work in)

    Hint

    if you see (@v1.9) pkg> instead, you still have to activate your environment. This can be done using:

    cd("/path/to/your/project") and ]activate .

    or alternatively ]activate /path/to/your/project/

    Now you can do pkg> add Unfold

    and after some installation:

    julia> using Unfold in the REPL

    diff --git a/dev/references/benchmarks/index.html b/dev/references/benchmarks/index.html index 4a19221e..b334274b 100644 --- a/dev/references/benchmarks/index.html +++ b/dev/references/benchmarks/index.html @@ -1,5 +1,5 @@ -Solver benchmarks · Unfold.jl Timeseries Analysis & Deconvolution

    Benchmarks

    We ran benchmarks on 2024-11-07 as described in ./benchmark/cuda/solver_comparison.jl. Given that some were run on a GPU, we cannot run them on continuous-integration online.

    Important
    • Allocations are only CPU allocations - GPU allocations were not counted.
    • Solvers other than default_multi are currently NOT multi-threaded
    • Solvers other than default_multi and krylov_gpu solve $X'Xb = X'y$ instead of $Xb=y$ directly. They are likely less accurate, but should be faster for multi-channel data, as we can precalulate cholesky, qr or similar & the to-be-inverted matrix is much smaller.

    Small Model

    n_channels = 1,
    +Solver benchmarks · Unfold.jl Timeseries Analysis & Deconvolution

    Benchmarks

    We ran benchmarks on 2024-11-07 as described in ./benchmark/cuda/solver_comparison.jl. Given that some were run on a GPU, we cannot run them on continuous-integration online.

    Important
    • Allocations are only CPU allocations - GPU allocations were not counted.
    • Solvers other than default_multi are currently NOT multi-threaded
    • Solvers other than default_multi and krylov_gpu solve $X'Xb = X'y$ instead of $Xb=y$ directly. They are likely less accurate, but should be faster for multi-channel data, as we can precalulate cholesky, qr or similar & the to-be-inverted matrix is much smaller.

    Small Model

    n_channels = 1,
     sfreq = 10,
     n_splines = 4,
     n_repeats = 10;
    gpumethodel_typetimeGBpercent_X_filledsizeDesignn_channelsoverlapcomment
    truecholeskyFloat640.068(1190, 130)1(0.2, 0.2)PosDefException(-1)
    falsecholeskyFloat640.000560.000690.068(1190, 130)1(0.2, 0.2)
    trueinternFloat640.000880.000170.068(1190, 130)1(0.2, 0.2)
    falseinternFloat640.00110.000690.068(1190, 130)1(0.2, 0.2)
    trueqrFloat640.00130.000190.068(1190, 130)1(0.2, 0.2)
    falsecgFloat640.00150.000570.068(1190, 130)1(0.2, 0.2)
    falsedefault_multiFloat640.00170.000160.068(1190, 130)1(0.2, 0.2)
    falseqrFloat640.0020.000760.068(1190, 130)1(0.2, 0.2)
    truecgFloat640.00540.000560.068(1190, 130)1(0.2, 0.2)
    truepinvFloat640.00540.000320.068(1190, 130)1(0.2, 0.2)
    falsepinvFloat640.0160.00160.068(1190, 130)1(0.2, 0.2)
    truekrylov_gpuFloat640.0320.00130.068(1190, 130)1(0.2, 0.2)

    small-to-midsize: multi-channel

    n_channels = 128,
    @@ -8,4 +8,4 @@
     n_repeats = 200;

    Float64

    gpumethodel_typetimeGBpercent_X_filledsizeDesignn_channelsoverlapcomment
    truecholeskyFloat640.0068(239522, 1210)128(0.2, 0.2)PosDefException(-1)
    trueqrFloat640.380.250.0068(239522, 1210)128(0.2, 0.2)
    truepinvFloat640.420.260.0068(239522, 1210)128(0.2, 0.2)
    trueinternFloat640.70.250.0068(239522, 1210)128(0.2, 0.2)
    truecgFloat641.20.320.0068(239522, 1210)128(0.2, 0.2)
    falsecholeskyFloat641.50.310.0068(239522, 1210)128(0.2, 0.2)
    falseqrFloat641.70.310.0068(239522, 1210)128(0.2, 0.2)
    falsecgFloat642.00.30.0068(239522, 1210)128(0.2, 0.2)
    falsepinvFloat642.10.380.0068(239522, 1210)128(0.2, 0.2)
    truekrylov_gpuFloat645.90.40.0068(239522, 1210)128(0.2, 0.2)
    falsedefault_multiFloat6413.01.20.0068(239522, 1210)128(0.2, 0.2)
    falseinternFloat6413.01.70.0068(239522, 1210)128(0.2, 0.2)

    Float32

    gpumethodel_typetimeGBpercent_X_filledsizeDesignn_channelsoverlapcomment
    truecholeskyFloat320.0068(239522, 1210)128(0.2, 0.2)PosDefException(-1)
    truekrylov_gpuFloat320.0068(239522, 1210)128(0.2, 0.2)
    truepinvFloat320.390.250.0068(239522, 1210)128(0.2, 0.2)
    trueqrFloat320.620.240.0068(239522, 1210)128(0.2, 0.2)
    trueinternFloat320.690.240.0068(239522, 1210)128(0.2, 0.2)
    truecgFloat321.20.310.0068(239522, 1210)128(0.2, 0.2)
    falsecholeskyFloat321.20.170.0068(239522, 1210)128(0.2, 0.2)
    falsecgFloat321.30.160.0068(239522, 1210)128(0.2, 0.2)
    falseqrFloat321.40.170.0068(239522, 1210)128(0.2, 0.2)
    falsepinvFloat321.60.210.0068(239522, 1210)128(0.2, 0.2)
    falseinternFloat3213.00.860.0068(239522, 1210)128(0.2, 0.2)
    falsedefault_multiFloat3213.00.970.0068(239522, 1210)128(0.2, 0.2)

    large, realistic model

        n_channels = 128,
         sfreq = 500,
         n_splines = (4, 4),
    -    n_repeats = 500,
    gpumethodel_typetimeGBpercent_X_filledsizeDesignn_channelsoverlapcomment
    truecholeskyFloat640.0015(3001479, 9616)128(0.2, 0.2)PosDefException(-1)
    falsecholeskyFloat640.0015(3001479, 9616)128(0.2, 0.2)PosDefException(2760)
    falseinternFloat640.0015(3001479, 9616)128(0.2, 0.2)SingularException(9599)
    truecgFloat649.33.60.0015(3001479, 9616)128(0.2, 0.2)
    trueqrFloat6411.03.50.0015(3001479, 9616)128(0.2, 0.2)
    trueinternFloat6413.03.50.0015(3001479, 9616)128(0.2, 0.2)
    falseqrFloat6480.06.30.0015(3001479, 9616)128(0.2, 0.2)
    truepinvFloat6480.04.20.0015(3001479, 9616)128(0.2, 0.2)
    truekrylov_gpuFloat64107.03.90.0015(3001479, 9616)128(0.2, 0.2)
    falsedefault_multiFloat64500.015.00.0015(3001479, 9616)128(0.2, 0.2)
    falsepinvFloat64520.011.00.0015(3001479, 9616)128(0.2, 0.2)
    falsecgFloat64939.05.70.0015(3001479, 9616)128(0.2, 0.2)
    + n_repeats = 500,
    gpumethodel_typetimeGBpercent_X_filledsizeDesignn_channelsoverlapcomment
    truecholeskyFloat640.0015(3001479, 9616)128(0.2, 0.2)PosDefException(-1)
    falsecholeskyFloat640.0015(3001479, 9616)128(0.2, 0.2)PosDefException(2760)
    falseinternFloat640.0015(3001479, 9616)128(0.2, 0.2)SingularException(9599)
    truecgFloat649.33.60.0015(3001479, 9616)128(0.2, 0.2)
    trueqrFloat6411.03.50.0015(3001479, 9616)128(0.2, 0.2)
    trueinternFloat6413.03.50.0015(3001479, 9616)128(0.2, 0.2)
    falseqrFloat6480.06.30.0015(3001479, 9616)128(0.2, 0.2)
    truepinvFloat6480.04.20.0015(3001479, 9616)128(0.2, 0.2)
    truekrylov_gpuFloat64107.03.90.0015(3001479, 9616)128(0.2, 0.2)
    falsedefault_multiFloat64500.015.00.0015(3001479, 9616)128(0.2, 0.2)
    falsepinvFloat64520.011.00.0015(3001479, 9616)128(0.2, 0.2)
    falsecgFloat64939.05.70.0015(3001479, 9616)128(0.2, 0.2)
    diff --git a/dev/references/extensions/index.html b/dev/references/extensions/index.html index a6b993dd..fc455921 100644 --- a/dev/references/extensions/index.html +++ b/dev/references/extensions/index.html @@ -1,5 +1,5 @@ -Overview of package extensions · Unfold.jl Timeseries Analysis & Deconvolution

    Package-extensions

    In Julia 1.9 Package Extensions were introduced. Unfold.jl is making use of them in four ways. Prior to using some functionality, you have to add + load specific package(s) for the functionality to be available. The reason for this is, that if you don't need e.g. GPU-support, you also will not need to install it.

    GPU: Krylov,CUDA

    To use gpu support as described in @Ref(custom_solvers) you have to:

    using Krylov,CUDA
    +Overview of package extensions · Unfold.jl Timeseries Analysis & Deconvolution

    Package-extensions

    In Julia 1.9 Package Extensions were introduced. Unfold.jl is making use of them in four ways. Prior to using some functionality, you have to add + load specific package(s) for the functionality to be available. The reason for this is, that if you don't need e.g. GPU-support, you also will not need to install it.

    GPU: Krylov,CUDA

    To use gpu support as described in @Ref(custom_solvers) you have to:

    using Krylov,CUDA
     using Unfold

    RobustSolvers.jl

    To use robust (outlier-"safe") solvers support as described in @Ref(custom_solvers) you have to:

    using RobustSolvers
     using Unfold

    Non-linear effects: BSplineKit.jl

    Finally to use non-linear effects/splines like in @formula 0~1+spl(continuous,5) you have to use:

    using BSplineKit
    -using Unfold
    Note

    In principle you should be able to load the package after loading Unfold. But sometimes this doesnt work, a Base.retry_load_extensions() call might help in these situations.

    +using Unfold
    Note

    In principle you should be able to load the package after loading Unfold. But sometimes this doesnt work, a Base.retry_load_extensions() call might help in these situations.

    diff --git a/dev/references/functions/index.html b/dev/references/functions/index.html index 022b952b..c32576dc 100644 --- a/dev/references/functions/index.html +++ b/dev/references/functions/index.html @@ -1,9 +1,9 @@ -API: Functions · Unfold.jl Timeseries Analysis & Deconvolution
    Effects.effectsMethod
    effects(design::AbstractDict, model::UnfoldModel; typical = mean)

    Calculates marginal effects for all term combinations in design.

    Implementation based on Effects.jl package; likely could repackage in UnfoldEffects.jl; somebody wants to do it? This would make it easier to cross-maintain it to changes/bug fixes in the Effects.jl package. design is a dictionary containing those predictors (as keys) with levels (as values), that you want to evaluate. The typical refers to the value, which other predictors that are not specified in the dictionary, should take on.

    For MixedModels, the returned effects are based on the "typical" subject, i.e. all random effects are put to 0.

    Example

     julia> f = @formula 0 ~ categoricalA + continuousA + continuousB
    +API: Functions · Unfold.jl Timeseries Analysis & Deconvolution
    Effects.effectsMethod
    effects(design::AbstractDict, model::UnfoldModel; typical = mean)

    Calculates marginal effects for all term combinations in design.

    Implementation based on Effects.jl package; likely could repackage in UnfoldEffects.jl; somebody wants to do it? This would make it easier to cross-maintain it to changes/bug fixes in the Effects.jl package. design is a dictionary containing those predictors (as keys) with levels (as values), that you want to evaluate. The typical refers to the value, which other predictors that are not specified in the dictionary, should take on.

    For MixedModels, the returned effects are based on the "typical" subject, i.e. all random effects are put to 0.

    Example

     julia> f = @formula 0 ~ categoricalA + continuousA + continuousB
      julia> uf = fit(UnfoldModel, (Any => (f, times)), data, events)
      julia> d = Dict(:categorical => ["levelA", "levelB"], :continuous => [-2, 0, 2])
    - julia> effects(d, uf)

    will result in 6 predicted values: A/-2, A/0, A/2, B/-2, B/0, B/2.

    source
    FileIO.loadMethod
    FileIO.load(file, ::Type{<:UnfoldModel}; generate_Xs=true)

    Load UnfoldModel from a .jld2 file.

    By default, the designmatrix is reconstructed. If it is not needed set generate_Xs=false which improves time-efficiency.

    source
    FileIO.saveMethod
    FileIO.save(file, uf::T; compress=false) where {T<:UnfoldModel}

    Save UnfoldModel in a (by default uncompressed) .jld2 file.

    For memory efficiency the designmatrix is set to missing. If needed, it can be reconstructed when loading the model.

    source
    StatsAPI.coefnamesMethod
    coefnames(term)
    -

    coefnames of a TimeExpandedTerm concatenates the basis-function name with the kronecker product of the term name and the basis-function colnames. Separator is ' : ' Some examples for a firbasis: basis313 : (Intercept) : 0.1 basis313 : (Intercept) : 0.2 basis_313 : (Intercept) : 0.3 ...

    source
    StatsAPI.fitMethod
    fit(type::UnfoldModel,d::Vector{Pair},tbl::AbstractDataFrame,data::Array)
    + julia> effects(d, uf)

    will result in 6 predicted values: A/-2, A/0, A/2, B/-2, B/0, B/2.

    source
    FileIO.loadMethod
    FileIO.load(file, ::Type{<:UnfoldModel}; generate_Xs=true)

    Load UnfoldModel from a .jld2 file.

    By default, the designmatrix is reconstructed. If it is not needed set generate_Xs=false which improves time-efficiency.

    source
    FileIO.saveMethod
    FileIO.save(file, uf::T; compress=false) where {T<:UnfoldModel}

    Save UnfoldModel in a (by default uncompressed) .jld2 file.

    For memory efficiency the designmatrix is set to missing. If needed, it can be reconstructed when loading the model.

    source
    StatsAPI.coefnamesMethod
    coefnames(term)
    +

    coefnames of a TimeExpandedTerm concatenates the basis-function name with the kronecker product of the term name and the basis-function colnames. Separator is ' : ' Some examples for a firbasis: basis313 : (Intercept) : 0.1 basis313 : (Intercept) : 0.2 basis_313 : (Intercept) : 0.3 ...

    source
    StatsAPI.fitMethod
    fit(type::UnfoldModel,d::Vector{Pair},tbl::AbstractDataFrame,data::Array)
     fit(type::UnfoldModel,f::FormulaTerm,tbl::AbstractDataFrame,data::Array{T,3},times)
     fit(type::UnfoldModel,f::FormulaTerm,tbl::AbstractDataFrame,data::Array{T,2},basisfunction::BasisFunction)

    Generates Designmatrix & fits model, either mass-univariate (one model per epoched-timepoint) or time-expanded (modeling linear overlap).

    keyword arguments

    • fit::Bool (default: true) - fit the model after constructing the designmatrix. Setting this to false is sometimes helpful if you only want to inspect the designmatrix.
    • contrasts::Dict: (default: Dict()) contrast to be applied to formula. Example: Dict(:my_condition=>EffectsCoding()). More information here: https://juliastats.org/StatsModels.jl/stable/contrasts/
    • eventcolumn::Union{Symbol,String} (default :event) - the column in tbl to differentiate the basisfunctions as defined in d::Vector{Pair}
    • solver::function: (default: solver_default). The solver used for y=Xb, e.g. (X,y;kwargs...) -> solver_default(X,y;kwargs...). There are faster & alternative solvers available, see solver_predefined for a list of options, see solver benchmark in the online documentation. To use the GPU, you can provide the data as a CuArray after using CUDA. Please change the solver to e.g. solver_predef(X,y;solver=:qr) as lsmr+cuda => crash typically. It's worth though, speed increases >100x possible
    • show_progress::Bool (default true) - show progress via ProgressMeter - passed to solver
    • eventfields::Array: (optional, default[:latency]) Array of symbols, representing column names intbl`, which are passed to basisfunction event-wise. First field of array always defines eventonset in samples.

    If a Vector[Pairs] is provided, it has to have one of the following structures: For deconvolution analyses (use Any=>(f,bf) to match all rows of tbl in one basis functions). Assumes data is a continuous EEG stream, either a Vector or a ch x time Matrix

    f1 = @formula(0~1+my_condition)
     [
    @@ -22,20 +22,20 @@
     julia> model = fit(UnfoldModel,[Any=>(f,times)],evts,data_e)

    Timexpanded Univariate Linear

    julia> basisfunction = firbasis(τ=(-1,1),sfreq=10)
     julia> model = fit(UnfoldModel,f,evts,data,basisfunction)
     # or
    -julia> model = fit(UnfoldModel,[Any=>(f,basisfunction],evts,data)
    source
    StatsAPI.modelmatrixFunction
    StatsModels.modelmatrix(uf::UnfoldLinearModelContinuousTime, basisfunction = true)

    Setting the optional second args to false, will return the modelmatrix without the timeexpansion / basisfunction applied.

    source
    StatsAPI.modelmatrixMethod
    modelmatrix(uf::UnfoldLinearModel)

    returns the modelmatrix of the model. Concatenates them, except in the MassUnivariate cases, where a vector of modelmatrices is return

    Compare with modelmatrices which returns a vector of modelmatrices, one per event

    source
    StatsAPI.predictMethod
    function predict(
    +julia> model = fit(UnfoldModel,[Any=>(f,basisfunction],evts,data)
    source
    StatsAPI.modelmatrixFunction
    StatsModels.modelmatrix(uf::UnfoldLinearModelContinuousTime, basisfunction = true)

    Setting the optional second args to false, will return the modelmatrix without the timeexpansion / basisfunction applied.

    source
    StatsAPI.modelmatrixMethod
    modelmatrix(uf::UnfoldLinearModel)

    returns the modelmatrix of the model. Concatenates them, except in the MassUnivariate cases, where a vector of modelmatrices is return

    Compare with modelmatrices which returns a vector of modelmatrices, one per event

    source
    StatsAPI.predictMethod
    function predict(
         uf::UnfoldModel,
         f::Vector{<:FormulaTerm},
         evts::Vector{<:DataFrame};
         overlap::Bool = true,
         kwargs...
    -)

    Returns a predicted ("y_hat = X*b") Array.

    • uf is an <:UnfoldModel
    • f is a (vector of) formulas, typically Unfold.formulas(uf), but formulas can be modified e.g. by effects.
    • evts is a (vector of) events, can be Unfold.events(uf) to return the (possibly continuous-time) predictions of the model. Can be a custom even

    kwargs:

    if overlap = true (default), overlap based on the latency column of evts will be simulated, or in the case of !ContinuousTimeTrait just X*coef is returned.

    if overlap = false, returns predictions without overlap (models with ContinuousTimeTrait (=> with basisfunction / deconvolution) only), via predict_no_overlap

    if keep_basis or exclude_basis is defined, then predict_partial_overlap is called, which allows to selective introduce overlap based on specified (or excluded respective) events/basisfunctions

    epoch_to and epoch_timewindow: calculate (partial) overlap controlled predictions, but returns them at the specified epoch_at event, with the times epoch_timewindow (default is taken from the basisfunction) in samples.

    eventcolumn can be specified as well if different from the default event.

    Hint: all kwargs can be Vector, or if e.g. string types are provided, will be put into a length==1 vector.

    Output

    • If overlap=false, returns a 3D-Array
    • If overlap=true and epoch_to = nothing (default), returns a 2D-array
    • If overlap=true and epoch_to != nothing, returns a 3D array
    source
    StatsModels.modelcolsMethod
    modelcols(term, tbl)
    -

    calculates the actual designmatrix for a timeexpandedterm. Multiple dispatch on StatsModels.modelcols

    source
    Unfold._modelcolsMethod
    _modelcols(forms::Vector,events::Vector)

    A wrapper around StatsModels.modelcols that is only needed for easy multiple dispatch

    source
    Unfold.apply_basisfunctionMethod
    apply_basisfunction(
    +)

    Returns a predicted ("y_hat = X*b") Array.

    • uf is an <:UnfoldModel
    • f is a (vector of) formulas, typically Unfold.formulas(uf), but formulas can be modified e.g. by effects.
    • evts is a (vector of) events, can be Unfold.events(uf) to return the (possibly continuous-time) predictions of the model. Can be a custom even

    kwargs:

    if overlap = true (default), overlap based on the latency column of evts will be simulated, or in the case of !ContinuousTimeTrait just X*coef is returned.

    if overlap = false, returns predictions without overlap (models with ContinuousTimeTrait (=> with basisfunction / deconvolution) only), via predict_no_overlap

    if keep_basis or exclude_basis is defined, then predict_partial_overlap is called, which allows to selective introduce overlap based on specified (or excluded respective) events/basisfunctions

    epoch_to and epoch_timewindow: calculate (partial) overlap controlled predictions, but returns them at the specified epoch_at event, with the times epoch_timewindow (default is taken from the basisfunction) in samples.

    eventcolumn can be specified as well if different from the default event.

    Hint: all kwargs can be Vector, or if e.g. string types are provided, will be put into a length==1 vector.

    Output

    • If overlap=false, returns a 3D-Array
    • If overlap=true and epoch_to = nothing (default), returns a 2D-array
    • If overlap=true and epoch_to != nothing, returns a 3D array
    source
    StatsModels.modelcolsMethod
    modelcols(term, tbl)
    +

    calculates the actual designmatrix for a timeexpandedterm. Multiple dispatch on StatsModels.modelcols

    source
    Unfold._modelcolsMethod
    _modelcols(forms::Vector,events::Vector)

    A wrapper around StatsModels.modelcols that is only needed for easy multiple dispatch

    source
    Unfold.apply_basisfunctionMethod
    apply_basisfunction(
         form,
         basisfunction,
         eventfields,
         eventname
     )
    -

    timeexpand the rhs-term of the formula with the basisfunction

    source
    Unfold.combine_yhat!Method
    combine_yhat(list,single)

    combines single into list, if either list or single contains missing, automatically casts the respective counter-part to allow missings as well

    source
    Unfold.design_to_modeltypeMethod

    !!! Important: this is an ugly hack dating back to the time where UnfoldMixedModels was still an extension. We are overloading this function in UnfoldMixedModels.jl with a more specific type, to switch between MixedModels-Unfold types and not...

    source
    Unfold.designmatrixMethod
    designmatrix(type, f, tbl; kwargs...)

    call without basis function, continue with basisfunction = nothing

    source
    Unfold.combine_yhat!Method
    combine_yhat(list,single)

    combines single into list, if either list or single contains missing, automatically casts the respective counter-part to allow missings as well

    source
    Unfold.design_to_modeltypeMethod

    !!! Important: this is an ugly hack dating back to the time where UnfoldMixedModels was still an extension. We are overloading this function in UnfoldMixedModels.jl with a more specific type, to switch between MixedModels-Unfold types and not...

    source
    Unfold.designmatrixMethod
    designmatrix(type, f, tbl; kwargs...)

    call without basis function, continue with basisfunction = nothing

    source
    Unfold.designmatrixMethod
    designmatrix(
         unfoldmodeltype,
         f,
         tbl,
    @@ -44,36 +44,36 @@
         eventname,
         kwargs...
     )
    -

    designmatrix(type, f, tbl; kwargs...) Return a DesignMatrix used to fit the models.

    Arguments

    • type::UnfoldModel
    • f::FormulaTerm: Formula to be used in this designmatrix
    • tbl: Events (usually a data frame) to be modelled
    • basisfunction::BasisFunction: basisfunction to be used in modeling (if specified)
    • contrasts::Dict: (optional) contrast to be applied to formula
    • eventfields::Array: (optional) Array of symbols which are passed to basisfunction event-wise.

    First field of array always defines eventonset in samples. Default is [:latency]

    Examples

    julia>  designmatrix(UnfoldLinearModelContinuousTime,Dict(Any=>(f,basisfunction1),tbl)
    source
    Unfold.designmatrixMethod
    designmatrix(
    +

    designmatrix(type, f, tbl; kwargs...) Return a DesignMatrix used to fit the models.

    Arguments

    • type::UnfoldModel
    • f::FormulaTerm: Formula to be used in this designmatrix
    • tbl: Events (usually a data frame) to be modelled
    • basisfunction::BasisFunction: basisfunction to be used in modeling (if specified)
    • contrasts::Dict: (optional) contrast to be applied to formula
    • eventfields::Array: (optional) Array of symbols which are passed to basisfunction event-wise.

    First field of array always defines eventonset in samples. Default is [:latency]

    Examples

    julia>  designmatrix(UnfoldLinearModelContinuousTime,Dict(Any=>(f,basisfunction1),tbl)
    source
    Unfold.designmatrixMethod
    designmatrix(
         T::Type{<:UnfoldModel},
         design_array::Vector{<:Pair},
         tbl;
         eventcolumn = :event,
         contrasts = Dict{Symbol,Any}(),
    -    kwargs...,

    iteratively calls designmatrix for each event in the design_array, and returns a list of <:AbstractDesignMatrix

    source
    Unfold.designmatrixMethod
    designmatrix(
    +    kwargs...,

    iteratively calls designmatrix for each event in the design_array, and returns a list of <:AbstractDesignMatrix

    source
    Unfold.designmatrixMethod
    designmatrix(
         uf::UnfoldModel,
         tbl;
         eventcolumn = :event,
         contrasts = Dict{Symbol,Any}(),
    -    kwargs...,

    Main function called from fit(UnfoldModel...), generates the designmatrix, returns a list of <:AbstractDesignMatrix

    source
    Unfold.drop_missing_epochsMethod
    [X,y] = drop_missing_epochs(X, y::Array)

    Helper function to remove epochs of y that contain missings. Drops them from both X and y. Often used in combination with Unfold.epoch

    X can be anything that has two dimensions (Matrix, DataFrame etc)

    source
    Unfold.epochMethod
    epoch(data::Array{T,1},evts::DataFrame,τ::Tuple/Vector,sfreq;kwargs...,

    Basic function to epoch data; all input also available as kwargs.

    Additional kwarg: eventtime=:latency, which defines the column in evts that is used to cut the data (in samples). For uneven sample-times we use round()`

    source
    Unfold.equalize_sizeMethod
    equalize_size(X, data)
    -

    Equates the length of data and designmatrix by cutting the shorter one

    The reason we need this is because when generating the designmatrix, we do not know how long the data actually are. We only assume that event-latencies are synchronized with the data

    source
    Unfold.firbasisFunction
    firbasis(τ, sfreq; ...)
    +    kwargs...,

    Main function called from fit(UnfoldModel...), generates the designmatrix, returns a list of <:AbstractDesignMatrix

    source
    Unfold.drop_missing_epochsMethod
    [X,y] = drop_missing_epochs(X, y::Array)

    Helper function to remove epochs of y that contain missings. Drops them from both X and y. Often used in combination with Unfold.epoch

    X can be anything that has two dimensions (Matrix, DataFrame etc)

    source
    Unfold.epochMethod
    epoch(data::Array{T,1},evts::DataFrame,τ::Tuple/Vector,sfreq;kwargs...,

    Basic function to epoch data; all input also available as kwargs.

    Additional kwarg: eventtime=:latency, which defines the column in evts that is used to cut the data (in samples). For uneven sample-times we use round()`

    source
    Unfold.equalize_sizeMethod
    equalize_size(X, data)
    +

    Equates the length of data and designmatrix by cutting the shorter one

    The reason we need this is because when generating the designmatrix, we do not know how long the data actually are. We only assume that event-latencies are synchronized with the data

    source
    Unfold.firbasisFunction
    firbasis(τ, sfreq; ...)
     firbasis(τ, sfreq, name; interpolate, scale_duration)
    -

    Generate a sparse FIR basis around the τ timevector at sampling rate sfreq. This is useful if you cannot make any assumptions on the shape of the event responses. If unrounded events are supplied, they are split between samples. E.g. event-latency = 1.2 will result in a "0.8" and a "0.2" entry.

    Advanced: second input can be duration in samples - careful: times(firbasis) always assumes duration = 1. Therefore, issues with LMM and predict will appear!

    keyword arguments

    interpolate (Bool, default false): if true, interpolates events between samples linearly. This results in predict functions to return a trailling 0scale_duration(Union{Bool,Interpolations-Interpolator}, default false): if true, scales the response by the fit-kwargseventfieldssecond entry. That is, the FIR becomes a stepfunction instead of a impulse response. if Interpolations.interpolator, e.g.Interpolations.Linear()- uses the fit-kwargseventfieldssecond entry to stretch the FIR kernel based onimresize`. This implements Hassall

    Examples

    Generate a FIR basis function from -0.1s to 0.3s at 100Hz

    julia>  f = firbasis([-0.1,0.3],100)

    Evaluate at an event occuring at sample 103.3

    julia>  f(103.3)
    source
    Unfold.firkernelMethod
    firkernel(ev, times; interpolate, scale_duration)
    +

    Generate a sparse FIR basis around the τ timevector at sampling rate sfreq. This is useful if you cannot make any assumptions on the shape of the event responses. If unrounded events are supplied, they are split between samples. E.g. event-latency = 1.2 will result in a "0.8" and a "0.2" entry.

    Advanced: second input can be duration in samples - careful: times(firbasis) always assumes duration = 1. Therefore, issues with LMM and predict will appear!

    keyword arguments

    interpolate (Bool, default false): if true, interpolates events between samples linearly. This results in predict functions to return a trailling 0scale_duration(Union{Bool,Interpolations-Interpolator}, default false): if true, scales the response by the fit-kwargseventfieldssecond entry. That is, the FIR becomes a stepfunction instead of a impulse response. if Interpolations.interpolator, e.g.Interpolations.Linear()- uses the fit-kwargseventfieldssecond entry to stretch the FIR kernel based onimresize`. This implements Hassall

    Examples

    Generate a FIR basis function from -0.1s to 0.3s at 100Hz

    julia>  f = firbasis([-0.1,0.3],100)

    Evaluate at an event occuring at sample 103.3

    julia>  f(103.3)
    source
    Unfold.firkernelMethod
    firkernel(ev, times; interpolate, scale_duration)
     

    Calculate a sparse firbasis

    second input can be duration in samples - careful: times(firbasis) always assumes duration = 1. Therefore, issues with LMM and predict will appear!

    Examples

    julia>  f = firkernel(103.3,range(-0.1,step=0.01,stop=0.31))
    -julia>  f_dur = firkernel([103.3 4],range(-0.1,step=0.01,stop=0.31))
    source
    Unfold.formulasMethod
    formulas(design::Vector{<:Pair})

    returns vector of formulas, no schema has been applied (those formulas never saw the data). Also no timeexpansion has been applied (in the case of timecontinuous models)

    source
    Unfold.get_basis_indicesMethod
    get_basis_indices(uf, basisnames::Vector)

    returns a boolean vector with length spanning all coefficients, which coefficient is defined by basisnames (vector of names)

    source
    Unfold.get_basis_namesMethod
    get_basisnames(model::UnfoldModel)

    Return the basisnames for all predictor terms as a vector.

    The returned vector contains the name of the event type/basis, repeated by their actual coefficient number (after StatsModels.apply_schema / timeexpansion). If a model has more than one event type (e.g. stimulus and fixation), the vectors are concatenated.

    source
    Unfold.hrfbasisMethod
    hrfbasis(TR; parameters, name)
    +julia>  f_dur = firkernel([103.3 4],range(-0.1,step=0.01,stop=0.31))
    source
    Unfold.formulasMethod
    formulas(design::Vector{<:Pair})

    returns vector of formulas, no schema has been applied (those formulas never saw the data). Also no timeexpansion has been applied (in the case of timecontinuous models)

    source
    Unfold.get_basis_indicesMethod
    get_basis_indices(uf, basisnames::Vector)

    returns a boolean vector with length spanning all coefficients, which coefficient is defined by basisnames (vector of names)

    source
    Unfold.get_basis_namesMethod
    get_basisnames(model::UnfoldModel)

    Return the basisnames for all predictor terms as a vector.

    The returned vector contains the name of the event type/basis, repeated by their actual coefficient number (after StatsModels.apply_schema / timeexpansion). If a model has more than one event type (e.g. stimulus and fixation), the vectors are concatenated.

    source
    Unfold.hrfbasisMethod
    hrfbasis(TR; parameters, name)
     

    Generate a Hemodynamic-Response-Functio (HRF) basis with inverse-samplingrate "TR" (=1/FS)

    Optional Parameters p: defaults {seconds} p(1) - delay of response (relative to onset) 6 p(2) - delay of undershoot (relative to onset) 16 p(3) - dispersion of response 1 p(4) - dispersion of undershoot 1 p(5) - ratio of response to undershoot 6 p(6) - onset {seconds} 0 p(7) - length of kernel {seconds} 32

    Examples

    Generate a HRF basis function object with Sampling rate 1/TR. And evaluate it at an event occuring at TR 103.3 with duration of 4.1 TRs

    julia>  f = hrfbasis(2.3)
     julia>  f(103.3,4.1)
    -
    source
    Unfold.hrfkernelMethod
    hrfkernel(e, TR, p)
    -

    Calculate a HRF kernel. Input e can be [onset duration]

    Examples

    julia>  f = hrfkernel(103.3,2.3,[6. 16. 1. 1. 6. 0. 32.])
    source
    Unfold.linearizeMethod
    linearize(x)
    -

    Flatten a 1D array from of a 2D/3D array. Also drops the empty dimension

    source
    Unfold.hrfkernelMethod
    hrfkernel(e, TR, p)
    +

    Calculate a HRF kernel. Input e can be [onset duration]

    Examples

    julia>  f = hrfkernel(103.3,2.3,[6. 16. 1. 1. 6. 0. 32.])
    source
    Unfold.linearizeMethod
    linearize(x)
    +

    Flatten a 1D array from of a 2D/3D array. Also drops the empty dimension

    source
    Unfold.modelmatricesMethod
    modelmatrices(X::AbstractDesignMatrix)
     modelmatrices(X::Vector{<:AbstractDesignMatrix})
    -modelmatrices(modelmatrix::AbstractMatrix)

    Returns the modelmatrices (also called designmatrices) separately for the events. This is similar to StatsModels.modelcols, but merely access the precomputed designmatrix. If the designmatrix needs to be computed, please use modelcols

    Compare to modelmatrix which further concatenates the designmatrices (in the ContinuousTime case).

    source
    Unfold.predict_no_overlapMethod
    predict_no_overlap(, uf, coefs, f, evts)
    -

    in ContinuousTime case (typically the deconvolution model), we return idealized predictions without overlap between events.

    in the Not-ContinuousTime case (typically the MassUnivariate model), we return predictions for each event independently. In that case, the function is unfortunately a missnomer, as overlap cannot be removed from mass-univariate models.

    source
    Unfold.predict_partial_overlapMethod
    predict_partial_overlap(, uf, args; kwargs...)
    -

    Returns predicted time-continuous values, but only for a subset of events. This is achieved by excluding the part of the designmatrix that belongs to the basisfunctions/events you do not want to have in your model.

    Typically called via predict, for configuration, keyword-arguments and usage see there.

    One difference is, that we require the coefs(uf::UnfoldModel) already exctracted.

    Due to the time-continuous nature, running it with a model not containing the ContinuousTimeTrait it will throw an error.

    source
    Unfold.predicttableFunction
    predicttable(model<:UnfoldModel,events=Unfold.events(model),args...;kwargs...)

    Shortcut to call efficiently call (pseudocode) result_to_table(predict(...)).

    Returns a tidy DataFrame with the predicted results. Loops all input to predict, but really only makes sense to use if you specify either:

    overlap = false (the default) or epoch_to = "eventname".

    source
    Unfold.prepareMethod
    prepare(X, data)
    -

    convert and permutedim input to follow the following output:

    Ĥ, Y, X = prepare(X, data)

    where is used to save the beta, Y is the data in format ch x repeat x time (with size(time) = 1 if data is a Matrix), and X.

    • if data is a CuArray, everything is transformed to CuArrays as well (via UnfoldCUDAExt.jl, CUDA needs to be loaded)
    • same datatype between X and data is enforced
    source
    Unfold.prepare_XTXMethod
    prepare_XTX(all)
    -

    instead of solving y = Xb, we solve X'Xb = X'y. This function calculates X'X and instantiates X'y to be used in the solver-step, to facilitate X'y calculations later, X' is also calculated.

    source
    Unfold.prepare_pinvMethod
    prepare_pinv(all)
    -

    calculates pinv of the designmatrix for later use in the solver-step. This is helpful in case you have many chanels

    source
    Unfold.result_to_tableMethod
    result_to_table(model<:UnfoldModel, eff::AbstractArray, events::Vector{<:DataFrame})
    +modelmatrices(modelmatrix::AbstractMatrix)

    Returns the modelmatrices (also called designmatrices) separately for the events. This is similar to StatsModels.modelcols, but merely access the precomputed designmatrix. If the designmatrix needs to be computed, please use modelcols

    Compare to modelmatrix which further concatenates the designmatrices (in the ContinuousTime case).

    source
    Unfold.predict_no_overlapMethod
    predict_no_overlap(, uf, coefs, f, evts)
    +

    in ContinuousTime case (typically the deconvolution model), we return idealized predictions without overlap between events.

    in the Not-ContinuousTime case (typically the MassUnivariate model), we return predictions for each event independently. In that case, the function is unfortunately a missnomer, as overlap cannot be removed from mass-univariate models.

    source
    Unfold.predict_partial_overlapMethod
    predict_partial_overlap(, uf, args; kwargs...)
    +

    Returns predicted time-continuous values, but only for a subset of events. This is achieved by excluding the part of the designmatrix that belongs to the basisfunctions/events you do not want to have in your model.

    Typically called via predict, for configuration, keyword-arguments and usage see there.

    One difference is, that we require the coefs(uf::UnfoldModel) already exctracted.

    Due to the time-continuous nature, running it with a model not containing the ContinuousTimeTrait it will throw an error.

    source
    Unfold.predicttableFunction
    predicttable(model<:UnfoldModel,events=Unfold.events(model),args...;kwargs...)

    Shortcut to call efficiently call (pseudocode) result_to_table(predict(...)).

    Returns a tidy DataFrame with the predicted results. Loops all input to predict, but really only makes sense to use if you specify either:

    overlap = false (the default) or epoch_to = "eventname".

    source
    Unfold.prepareMethod
    prepare(X, data)
    +

    convert and permutedim input to follow the following output:

    Ĥ, Y, X = prepare(X, data)

    where is used to save the beta, Y is the data in format ch x repeat x time (with size(time) = 1 if data is a Matrix), and X.

    • if data is a CuArray, everything is transformed to CuArrays as well (via UnfoldCUDAExt.jl, CUDA needs to be loaded)
    • same datatype between X and data is enforced
    source
    Unfold.prepare_XTXMethod
    prepare_XTX(all)
    +

    instead of solving y = Xb, we solve X'Xb = X'y. This function calculates X'X and instantiates X'y to be used in the solver-step, to facilitate X'y calculations later, X' is also calculated.

    source
    Unfold.prepare_pinvMethod
    prepare_pinv(all)
    +

    calculates pinv of the designmatrix for later use in the solver-step. This is helpful in case you have many chanels

    source
    Unfold.result_to_tableMethod
    result_to_table(model<:UnfoldModel, eff::AbstractArray, events::Vector{<:DataFrame})
     result_to_table(
         eff::AbstractArray,
         events::Vector{<:DataFrame},
    @@ -84,8 +84,8 @@
         events::Vector{<:DataFrame},
         times::Vector,
         eventnames::Vector,
    -)

    Converts an array-result (prediction or coefficient) together with the events, to a tidy dataframe.

    To support multi-event models, we expect everything to be put into Vectors - this should be refactored at some point to be compatible with broadcasting, but it is not right now.

    args

    eff: A vector that contains the array(s) to be converted to a tidy dataframe. Each event in your events dataframe your have it's own array (i.e. the array should have length(eff) == length(unique(events.event))). Each array should be 3D, with channel x time x predictor events: A vector of event-dataframes, each need to match size(eff,3). Each individual event (unique(events.event)) should have it's own dataframe. E.g. [[df_event1::DataFrame], [df_event1::DataFrame]]times: A vector of time-vectors withlength(eff), each time-vector needs to matchsize.(eff,2)eventnames`: A vector of eventnames, either symbols or strings, should be a single entry per event

    source
    Unfold.solver_defaultMethod
    solver_default(X, y; kwargs...)
    -

    default solvers.

    • If data is continuous (2D), we solve Xb = y via lsmr
    • If data is epoched (3D) we solve Xb = y via pinv

    We highly recommend to check out solver_predefined for faster options by rather solving X'Xb = X'y via QR, cholesky, pinv or ``-solver. A benchmark is available in the online documentation.

    Please see ?solver_main for keyword arguments of the solver (like stderror, multithreading, show_time, show_progress)

    source
    Unfold.solver_predefinedMethod
    solver_predefined(X, y_in; solver, kwargs...)
    -

    helper function that returns solver with appropriate prepare-pipelines and fitting solver-functions. X is a (typically sparse) designmatrix, y is a 2D or 3D array.

    solver : one of :cg, :pinv, :intern, :qr, :cholesky, :lsmr (default)

    Only lsmr solves Xb = y via an iterative solver and should be more accurate in principle.

    The other predefined-solvers solve X'Xb = X'y which is often computationally much cheaper, and because X'X can be precalculated, it should be cheaper to apply.

    Testing this empirically is somewhat complicated, as depending on your sparsity structure (≈ your design) and the size of your data (sfreq & minutes) the best solver and the reached accuracy can change quite a bit.

    GPU

    All solvers except :lsmr support GPU calculations. For lsmr on the GPU try solver_krylov instead

    source
    Unfold.spdiagm_diagMethod

    Speed improved version of spdiagm, takes a single float value instead of a vector, like a version of spdiagm that takes in a UniformScaling

    e.g.

    sz = 5 ix = [1,3,10] spdiagm_diag(sz,(.-ix.=>1)...)

    source
    Unfold.timeexpand_colsMethod
    timeexpand_cols(basisfunction, bases, ncolsBasis, ncolsX)
    -

    calculates in which rows the individual event-basisfunctions should go in Xdc

    see also timeexpandrows timeexpandvals

    source
    Unfold.timeexpand_rowsMethod
    timeexpand_rows(onsets, bases, shift, ncolsX)
    -

    calculates in which rows the individual event-basisfunctions should go in Xdc

    timeexpandrows timeexpandvals

    source
    Unfold.timesMethod
    times(model<:UnfoldModel)

    returns arrays of time-vectors, one for each basisfunction / parallel-fitted-model (MassUnivarite case)

    source
    Unfold.unfold_apply_schemaMethod

    wrapper to make apply_schema mixed models as extension possible

    Note: type is not necessary here, but for LMM it is for multiple dispatch reasons!

    source
    +)

    Converts an array-result (prediction or coefficient) together with the events, to a tidy dataframe.

    To support multi-event models, we expect everything to be put into Vectors - this should be refactored at some point to be compatible with broadcasting, but it is not right now.

    args

    eff: A vector that contains the array(s) to be converted to a tidy dataframe. Each event in your events dataframe your have it's own array (i.e. the array should have length(eff) == length(unique(events.event))). Each array should be 3D, with channel x time x predictor events: A vector of event-dataframes, each need to match size(eff,3). Each individual event (unique(events.event)) should have it's own dataframe. E.g. [[df_event1::DataFrame], [df_event1::DataFrame]]times: A vector of time-vectors withlength(eff), each time-vector needs to matchsize.(eff,2)eventnames`: A vector of eventnames, either symbols or strings, should be a single entry per event

    source
    Unfold.solver_defaultMethod
    solver_default(X, y; kwargs...)
    +

    default solvers.

    • If data is continuous (2D), we solve Xb = y via lsmr
    • If data is epoched (3D) we solve Xb = y via pinv

    We highly recommend to check out solver_predefined for faster options by rather solving X'Xb = X'y via QR, cholesky, pinv or ``-solver. A benchmark is available in the online documentation.

    Please see ?solver_main for keyword arguments of the solver (like stderror, multithreading, show_time, show_progress)

    source
    Unfold.solver_predefinedMethod
    solver_predefined(X, y_in; solver, kwargs...)
    +

    helper function that returns solver with appropriate prepare-pipelines and fitting solver-functions. X is a (typically sparse) designmatrix, y is a 2D or 3D array.

    solver : one of :cg, :pinv, :intern, :qr, :cholesky, :lsmr (default)

    Only lsmr solves Xb = y via an iterative solver and should be more accurate in principle.

    The other predefined-solvers solve X'Xb = X'y which is often computationally much cheaper, and because X'X can be precalculated, it should be cheaper to apply.

    Testing this empirically is somewhat complicated, as depending on your sparsity structure (≈ your design) and the size of your data (sfreq & minutes) the best solver and the reached accuracy can change quite a bit.

    GPU

    All solvers except :lsmr support GPU calculations. For lsmr on the GPU try solver_krylov instead

    source
    Unfold.spdiagm_diagMethod

    Speed improved version of spdiagm, takes a single float value instead of a vector, like a version of spdiagm that takes in a UniformScaling

    e.g.

    sz = 5 ix = [1,3,10] spdiagm_diag(sz,(.-ix.=>1)...)

    source
    Unfold.timeexpand_colsMethod
    timeexpand_cols(basisfunction, bases, ncolsBasis, ncolsX)
    +

    calculates in which rows the individual event-basisfunctions should go in Xdc

    see also timeexpandrows timeexpandvals

    source
    Unfold.timeexpand_rowsMethod
    timeexpand_rows(onsets, bases, shift, ncolsX)
    +

    calculates in which rows the individual event-basisfunctions should go in Xdc

    timeexpandrows timeexpandvals

    source
    Unfold.timesMethod
    times(model<:UnfoldModel)

    returns arrays of time-vectors, one for each basisfunction / parallel-fitted-model (MassUnivarite case)

    source
    Unfold.unfold_apply_schemaMethod

    wrapper to make apply_schema mixed models as extension possible

    Note: type is not necessary here, but for LMM it is for multiple dispatch reasons!

    source
    diff --git a/dev/references/types/index.html b/dev/references/types/index.html index 6dd52c2e..2537d3c4 100644 --- a/dev/references/types/index.html +++ b/dev/references/types/index.html @@ -1,2 +1,2 @@ -API: Types · Unfold.jl Timeseries Analysis & Deconvolution
    Unfold.BasisFunctionType

    See FIRBasis for an examples

    a BasisFunction should implement:

    • kernel() # kernel(b::BasisFunction,sample) => returns the designmatrix for that event

    • height() # number of samples in continuous time, NaN if not defined

    • width() # number of coefficient columns (e.g. HRF 1 to 3, FIR=height(),except if interpolate=true )

    • colnames() # unique names of expanded columns

    • times() # vector of times along expanded columns, length = height()

    • name() # name of basisfunction

    • collabel() [default "colname_basis"] # name for coeftable

    • shift_onset() [default 0]

    source
    Unfold.DesignMatrixLinearModelType
    DesignMatrix

    Type that keeps an Array of formulas, designmatrices modelmatrix (Array or Array of Arrays in case of MixedModel) and events-dataframe

    source
    Unfold.FIRBasisType

    Defines a FIRBasisfunction which can be called for each event, defining the time-expanded basis kernel

    mutable struct FIRBasis <: Unfold.BasisFunction
    • times: vector of times along rows of kernel-output (in seconds)

    • name: name of the event, should be the actual eventName in eventcolumn of the dataframes later

    • shift_onset: by how many samples do we need to shift the event onsets? This number is determined by how many 'negative' timepoints the basisfunction defines

    • interpolate: should we linearly interpolate events not on full samples?

    • scale_duration: should we scale kernel to the duration? If yes, with which method

    (tipp: most users would you want to call firbasis, not generate it manually)

    Examples

    julia>  b = FIRBasis(range(0,1,length=10),"basisA",-1)
    source
    Unfold.TimeExpandedTermType

    Object with a term and an applicable BasisFunction and a eventfield that are later passed to the basisfunction.

    struct TimeExpandedTerm{T<:StatsModels.AbstractTerm} <: StatsModels.AbstractTerm
    • term: Term that the basis function is applied to. This is regularly called in other functions to get e.g. term-coefnames and timeexpand those

    • basisfunction: Kernel that determines what should happen to the designmatrix of the term

    • eventfields: Which fields of the event-table should be passed to the basisfunction.Important: The first entry has to be the event-latency in samples!

    Examples

    julia>  b = TimeExpandedTerm(term,kernel,[:latencyTR,:durationTR])
    source
    Unfold.UnfoldLinearModelType

    Concrete type to implement an Mass-Univariate LinearModel. .design contains the formula + times dict .designmatrix contains a DesignMatrix modelfit is a Any container for the model results

    source
    Unfold.UnfoldLinearModelContinuousTimeType

    Concrete type to implement an deconvolution LinearModel. .design contains the formula + times dict .designmatrix contains a DesignMatrix modelfit is a Any container for the model results

    source
    Unfold.UnfoldModelType

    using Base: @deprecate_binding The main abstract model-type of the toolbox. E.g. UnfoldLinearModel is a concrete type of this

    source
    +API: Types · Unfold.jl Timeseries Analysis & Deconvolution
    Unfold.BasisFunctionType

    See FIRBasis for an examples

    a BasisFunction should implement:

    • kernel() # kernel(b::BasisFunction,sample) => returns the designmatrix for that event

    • height() # number of samples in continuous time, NaN if not defined

    • width() # number of coefficient columns (e.g. HRF 1 to 3, FIR=height(),except if interpolate=true )

    • colnames() # unique names of expanded columns

    • times() # vector of times along expanded columns, length = height()

    • name() # name of basisfunction

    • collabel() [default "colname_basis"] # name for coeftable

    • shift_onset() [default 0]

    source
    Unfold.DesignMatrixLinearModelType
    DesignMatrix

    Type that keeps an Array of formulas, designmatrices modelmatrix (Array or Array of Arrays in case of MixedModel) and events-dataframe

    source
    Unfold.FIRBasisType

    Defines a FIRBasisfunction which can be called for each event, defining the time-expanded basis kernel

    mutable struct FIRBasis <: Unfold.BasisFunction
    • times: vector of times along rows of kernel-output (in seconds)

    • name: name of the event, should be the actual eventName in eventcolumn of the dataframes later

    • shift_onset: by how many samples do we need to shift the event onsets? This number is determined by how many 'negative' timepoints the basisfunction defines

    • interpolate: should we linearly interpolate events not on full samples?

    • scale_duration: should we scale kernel to the duration? If yes, with which method

    (tipp: most users would you want to call firbasis, not generate it manually)

    Examples

    julia>  b = FIRBasis(range(0,1,length=10),"basisA",-1)
    source
    Unfold.TimeExpandedTermType

    Object with a term and an applicable BasisFunction and a eventfield that are later passed to the basisfunction.

    struct TimeExpandedTerm{T<:StatsModels.AbstractTerm} <: StatsModels.AbstractTerm
    • term: Term that the basis function is applied to. This is regularly called in other functions to get e.g. term-coefnames and timeexpand those

    • basisfunction: Kernel that determines what should happen to the designmatrix of the term

    • eventfields: Which fields of the event-table should be passed to the basisfunction.Important: The first entry has to be the event-latency in samples!

    Examples

    julia>  b = TimeExpandedTerm(term,kernel,[:latencyTR,:durationTR])
    source
    Unfold.UnfoldLinearModelType

    Concrete type to implement an Mass-Univariate LinearModel. .design contains the formula + times dict .designmatrix contains a DesignMatrix modelfit is a Any container for the model results

    source
    Unfold.UnfoldLinearModelContinuousTimeType

    Concrete type to implement an deconvolution LinearModel. .design contains the formula + times dict .designmatrix contains a DesignMatrix modelfit is a Any container for the model results

    source
    Unfold.UnfoldModelType

    using Base: @deprecate_binding The main abstract model-type of the toolbox. E.g. UnfoldLinearModel is a concrete type of this

    source
    diff --git a/dev/tutorials/lm_mu/index.html b/dev/tutorials/lm_mu/index.html index b72cacef..824bec63 100644 --- a/dev/tutorials/lm_mu/index.html +++ b/dev/tutorials/lm_mu/index.html @@ -1,5 +1,5 @@ -rERP (mass univariate) · Unfold.jl Timeseries Analysis & Deconvolution

    Mass Univariate Linear Models (no overlap correction)

    In this notebook we will fit regression models to simulated EEG data. We will see that we need some type of overlap correction, as the events are close in time to each other, so that the respective brain responses overlap. If you want more detailed introduction to this topic check out our paper.

    Setting up & loading the data

    using DataFrames
    +rERP (mass univariate) · Unfold.jl Timeseries Analysis & Deconvolution

    Mass Univariate Linear Models (no overlap correction)

    In this notebook we will fit regression models to simulated EEG data. We will see that we need some type of overlap correction, as the events are close in time to each other, so that the respective brain responses overlap. If you want more detailed introduction to this topic check out our paper.

    Setting up & loading the data

    using DataFrames
     using Unfold
     using UnfoldMakie, CairoMakie # for plotting
     using UnfoldSim

    Load Data

    We'll start with some predefined simulated continuos EEG data. We have 2000 events, 1 channel and one condition with two levels

    data, evts = UnfoldSim.predef_eeg()

    Inspection

    The data has only little noise. The underlying signal pattern is a positive-negative-positive spike.

    times_cont = range(0,length=200,step=1/100) # we simulated with 100hz for 0.5 seconds
    @@ -24,4 +24,4 @@
     size(data_epochs)
    (1, 121, 2000)
    • τ specifies the epoch size.
    • sfreq - sampling rate, converts τ to samples.
    typeof(data_epochs)
    Array{Union{Missing, Float64}, 3}
    Note

    In julia, missing is supported throughout the ecosystem. Thus, we can have partial trials and they will be incorporated / ignored at the respective functions. Helpful functions are the julia-base disallowmissing and the internal Unfold.drop_missing_epochs functions

    2. Specify a formula

    Define a formula to be applied to each time point (and each channel) relative to the event. condition and continuous are the names of the event-describing columns in evts that we want to use for modelling.

    f = @formula 0 ~ 1 + condition + continuous # note the formulas left side is `0 ~ ` for technical reasons`

    3. Fit a linear model to each time point & channel

    Fit the "UnfoldModel" (the fit syntax is used throughout the Julia ecosystem, with the first element indicating what kind of model to fit)

    m = fit(UnfoldModel, f, evts, data_epochs, times);
    ┌ Warning: Missings in data - we remove any trial from data and designmatrix
     └ @ Unfold ~/work/Unfold.jl/Unfold.jl/src/solver/prepare.jl:19

    Alternative way to call this model is below. This syntax allows you to fit multiple events at once. For example, replacing Any with :fixation =>... will fit this model specifically to the fixation event type.

    m = fit(UnfoldModel, [Any=>(f, times)], evts, data_epochs);
    ┌ Warning: Missings in data - we remove any trial from data and designmatrix
     └ @ Unfold ~/work/Unfold.jl/Unfold.jl/src/solver/prepare.jl:19

    Inspect the fitted model:

    m

    Note these functions to discover the model: design, designmatrix, modelfit and most importantly, coeftable.

    Info
    There are of course further methods, e.g. `coef`, `ranef`, `Unfold.formula`, `modelmatrix` which might be helpful at some point, but not important now.

    Using coeftable, we can get a tidy DataFrames, very useful for your further analysis.

    first(coeftable(m), 6)
    6×7 DataFrame
    Rowchannelcoefnameestimateeventnamegroupstderrortime
    Int64StringFloat64DataTypeNothingNothingFloat64
    11(Intercept)0.923324Any-0.4
    21(Intercept)0.978652Any-0.39
    31(Intercept)1.11101Any-0.38
    41(Intercept)1.33857Any-0.37
    51(Intercept)1.6288Any-0.36
    61(Intercept)1.93554Any-0.35

    4. Visualize the results

    Tidy DataFrames are easy to visualize using e.g. AlgebraOfGraphics.jl. Function plot_erp from UnfoldMakiemakes it even easier.

    results = coeftable(m)
    -plot_erp(results)
    Example block output

    As you can see, there is a lot going on, even in the baseline period! This is because the signal was simulated with overlapping events. In the next tutorial you will learn how to fix this.

    +plot_erp(results)
    Example block output

    As you can see, there is a lot going on, even in the baseline period! This is because the signal was simulated with overlapping events. In the next tutorial you will learn how to fix this.

    diff --git a/dev/tutorials/lm_overlap/index.html b/dev/tutorials/lm_overlap/index.html index a8ca4912..f2a97b6d 100644 --- a/dev/tutorials/lm_overlap/index.html +++ b/dev/tutorials/lm_overlap/index.html @@ -1,8 +1,8 @@ -rERP (overlap correction) · Unfold.jl Timeseries Analysis & Deconvolution

    Linear Model with Overlap Correction

    Note

    We recommend you briefly go over the mass-univariate linear modelling tutorial

    In this notebook we will fit regression models to (simulated) EEG data. We will see that we need some type of overlap correction, as the events are close in time to each other, so that the respective brain responses overlap. If you want more detailed introduction to this topic check out our paper.

    Setting up & loading the data

    using Unfold
    +rERP (overlap correction) · Unfold.jl Timeseries Analysis & Deconvolution

    Linear Model with Overlap Correction

    Note

    We recommend you briefly go over the mass-univariate linear modelling tutorial

    In this notebook we will fit regression models to (simulated) EEG data. We will see that we need some type of overlap correction, as the events are close in time to each other, so that the respective brain responses overlap. If you want more detailed introduction to this topic check out our paper.

    Setting up & loading the data

    using Unfold
     using UnfoldSim
     using UnfoldMakie,CairoMakie
     using DataFrames
     
     data, evts = UnfoldSim.predef_eeg()

    Overlap Correction

    For an overlap correction analysis we will do one additional step: define a temporal basisfunction. The steps are as following:

    1. specify a temporal basisfunction
    2. specify a formula
    3. fit a linear model for each channel (one for all timepoints!)
    4. visualize the results.

    Timeexpanded / Deconvolved ModelFit

    1. specify a temporal basisfunction

    By default, we would want to use a FIR basisfunction. See Basis Functions for more details.

    basisfunction = firbasis(τ=(-0.4,.8),sfreq=100)

    2. specify a formula

    We specify the same formula as before

    f  = @formula 0~1+condition+continuous

    3. fit the linear model

    The formula and basisfunction is not enough on their own. We also need to specify which event and which formula matches - this is important in cases where there are multiple events with different formulas

    bf_vec = [Any=>(f,basisfunction)]
    Note

    The Any means to use all rows in evts. In case you have multiple events, you'd want to specify multiple basisfunctions e.g. bfDict = ["stimulus"=>(f1,basisfunction1), "response"=>(f2,basisfunction2)] You likely have to specify a further argument to fit: eventcolumn="type" with type being the column in evts that codes for the event (stimulus / response in this case)

    Now we are ready to fit a UnfoldLinearModel. Not that instead of times as in the mass-univariate case, we have to provide the BasisFunction type now.

    m = fit(UnfoldModel,bf_vec,evts,data);

    4. Visualize the model

    Similarly to the previous tutorial, we can visualize the model

    results = coeftable(m)
    -plot_erp(results)
    Example block output

    Cool! All overlapping activity has been removed and we recovered the simulated underlying signal.

    +plot_erp(results)
    Example block output

    Cool! All overlapping activity has been removed and we recovered the simulated underlying signal.