Skip to content

Simulate EEG / ERP data with overlap, non-linear effects, multiple regression

License

Notifications You must be signed in to change notification settings

unfoldtoolbox/UnfoldSim.jl

Repository files navigation

logo_UnfoldSim jl_120px

Stable Dev Build Status Coverage DOI

rERP EEG visualisation EEG Simulations BIDS pipeline Decode EEG data Statistical testing

A Julia package to simulate multivariate time series, e.g. model-based ERPs, fMRI activity, pupil dilation etc. UnfoldSim.jl provides multi-channel support via EEG-forward models. Moreover, it is possible to simulate overlapping event-related activity and to add noise of a certain type e.g. Pink noise.

Many tutorials, guides, how-tos and references are available in the documentation!

readme_figure

Install

Julia

Click to expand

The recommended way to install julia is juliaup. It allows you to, e.g., easily update Julia at a later point, but also test out alpha/beta versions etc.

TL:DR; If you dont want to read the explicit instructions, just copy the following command

Windows

AppStore -> JuliaUp, or winget install julia -s msstore in CMD

Mac & Linux

curl -fsSL https://install.julialang.org | sh in any shell

Unfold.jl

using Pkg
Pkg.add("UnfoldSim")

Quickstart

using UnfoldSim
data, events = UnfoldSim.predef_eeg(; n_repeats = 1, noiselevel = 0.8)

Produces continuous "EEG" with PinkNoise and some overlap between 20 events (2 conditions * 10 levels of the continuous variable).

Slightly longer

using UnfoldSim
using Random

# Start by defining the design / events data frame
design =
    SingleSubjectDesign(; conditions = Dict(:condA => ["levelA", "levelB"])) |>
    d -> RepeatDesign(d, 10);

# Next define a ground truth signal + relation to events/design with Wilkinson formulas
signal = LinearModelComponent(;
    basis = [0, 0, 0, 0.5, 1, 1, 0.5, 0, 0],
    formula = @formula(0 ~ 1 + condA),
    β = [1, 0.5],
);
# finally, define some inter-onset distribution and noise, and simulate data!
data, events = simulate(
    Random.MersenneTwister(1),
    design,
    signal,
    UniformOnset(; offset = 5, width = 4),
    PinkNoise(),
);    

All simulation ingredients (design, components, onsets, noise) can be easily modified and you can simply plugin your own!

Contributions

Contributions of any kind are very welcome. Please have a look at CONTRIBUTING.md for guidance on contributing to UnfoldSim.jl.

Contributors

Maanik Marathe
Maanik Marathe

📖 💻
Benedikt Ehinger
Benedikt Ehinger

🐛 💻 📖 🤔 🚇 🚧 👀 ⚠️
Luis
Luis

🐛 💻 📖 🤔
Judith Schepers
Judith Schepers

🤔 🐛 📖 💻 ⚠️
Vladimir Mikheev
Vladimir Mikheev

🐛
Manpa Barman
Manpa Barman

🚇
René Skukies
René Skukies

📖

This project follows the all-contributors specification. Please reach out, if you have contributed to UnfoldSim.jl but we have not listed you as a contributor yet.

Citation

TBA

Acknowledgements

Funded by Deutsche Forschungsgemeinschaft (DFG, German Research Foundation) under Germany´s Excellence Strategy – EXC 2075 – 390740016. Furthermore, the authors thank the International Max Planck Research School for Intelligent Systems (IMPRS-IS) for supporting Judith Schepers.