1
0
2026-04-09 08:21:30 -07:00
2026-04-09 08:21:30 -07:00
2026-04-09 08:21:30 -07:00
2026-04-09 08:21:30 -07:00
2026-04-09 08:21:30 -07:00
2026-04-09 08:21:30 -07:00
2026-04-09 08:21:30 -07:00

Reproduction: Mwata-Velu et al. (2023)

Paper: "EEG-BCI Features Discrimination between Executed and Imagined Movements Based on FastICA, Hjorth Parameters, and SVM"
Journal: Mathematics 2023, 11, 4409
DOI: https://doi.org/10.3390/math11214409

Overview

This repository contains an attempted reproduction of the above paper as part of a thesis on reproducibility challenges in EEG-based BCI research. The reproduction was partially completed — the core pipeline is implemented but several ambiguities in the paper prevented a definitive reproduction.

Repository Structure

config.py                  — Constants, channel lists, run mappings, parameters
data_loading.py            — CSV data loading, MNE Raw creation, annotations
pipeline.py                — Filtering, FastICA, Hjorth features, SVM classification
reproduction_notebook.ipynb — Main analysis notebook (Method 2: cross-subject)
requirements.txt           — Python dependencies

Data

This code expects the PhysioNet EEG Motor Movement/Imagery Dataset in the curated CSV format provided by: Z. Shuqfa, A. Lakas, and A. N. Belkacem, “Increasing accessibility to a large brain computer interface dataset: Curation of physionet EEG motor movement/imagery dataset for decoding and classification,” Data in Brief, vol. 54, p. 110181, Jun. 2024, doi: 10.1016/j.dib.2024.110181.

Files are named:

  • eegmmidb/SUB_001_SIG_01.csv — Signal data (n_samples × 64 channels)
  • eegmmidb/SUB_001_ANN_01.csv — Annotations (label, duration, start/end rows)

The curated dataset excludes the 6 problematic subjects (S088, S089, S092, S100, S104, S106) noted in the paper. Run numbering is offset by 2 from PhysioNet's original (our Run 01 = PhysioNet R03).

Usage

  1. Install dependencies: pip install -r requirements.txt
  2. Place curated CSV data in eegmmidb/ directory
  3. Edit config.py to set ICA_STRATEGY ('per_run', 'per_subject', or 'global')
  4. Run reproduction_notebook.ipynb

Key Implementation Decisions

Decision Paper says We do Rationale
Pipeline order Figure 1: filter→ICA; Algorithm 1: ICA with internal sub-band eval ICA then sub-band eval Energy criterion is meaningless on pre-filtered data
ICA algorithm Gram-Schmidt (Algorithm 1, Step 3) algorithm='deflation' Deflation uses Gram-Schmidt
Energy criterion ∀χ ∈ {α, β, γ} ∀χ ∈ {θ, α, β} γ never defined; likely typo for θ
ICA scope Not specified Configurable Reproducibility variable
Classification Method Methods 1 and 2 Method 2 only (cross-subject) Method 1 split is contradictory

Paper's Reported Results (Method 2, Set 3)

Metric Paper
Overall accuracy 68.8 ± 0.71%
ME recall 68.17%
MI recall 68.41%
Description
No description provided
Readme 43 KiB
Languages
Python 84%
Jupyter Notebook 16%