This repository contains code and data accompanying the following paper:
Marcel Bausch1, Johannes Niediek1, Thomas P. Reber1,2*, Sina Mackay1, Jan Boström3, Christian E. Elger1, Florian Mormann1
1 Department of Epileptology, University of Bonn Medical Centre, Bonn, Germany
2 Faculty of Psychology, UniDistance Suisse, Brig, Switzerland
3 Department of Neurosurgery, University of Bonn Medical Centre, Bonn, Germany
If you have any questions, please contact marcel.bausch.ukb@gmail.com.
- MATLAB R2021a or later
- MATLAB Statistics and Machine Learning Toolbox
To reproduce the figures in the manuscript, start MATLAB, navigate to the repository folder and add it to the MATLAB path:
cd('/Path/to/this/repo');
addpath(genpath(pwd));
% To generate Figure 2E
plot_figure_2E
% To derive neuron counts with specific significance threshold
alpha_level = 10^-3;
load all_unitinfo
load rmANOVA
valid_neurons = find(get_unitinfo('sitenums', all_unitinfo) & get_unitinfo('session', all_unitinfo) ~= 26);
stimulus_neurons = sum(all_ps(valid_neurons, 1) < alpha_level);
context_neurons = sum(all_ps(valid_neurons, 2) < alpha_level);
stimulus_context_neurons = sum(all_ps(valid_neurons, 3) < alpha_level);
% Display results
fprintf('Neurons responding to stimulus: %d\n', stimulus_neurons);
fprintf('Neurons responding to context: %d\n', context_neurons);
fprintf('Neurons responding to stimulus-context interaction: %d\n', stimulus_context_neurons);
% To generate Figure 3
plot_fig3
% To generate Figure 4
plot_fig4
% To generate Figure 5
plot_fig5
-
all_unitinfo.mat: Metadata for each neuron (structure with fields 'data' and 'labels')
- Contains information about recording sites, sessions, and patient IDs
- Access metadata using
get_unitinfofunction, e.g.,site_info = get_unitinfo('sitenums', all_unitinfo)
-
rmANOVA.mat: Results from repeated-measures ANOVA for each neuron
- all_etas (Nunits × 3): Partial eta squared values for stimulus, context, and stimulus-context effects
- all_etas_imperm_boot (Nunits × 3): Eta values from permuting image labels PER question (control)
- all_etas_qperm_boot (Nunits × 3): Eta values from permuting question labels PER image (control)
- all_ps (Nunits × 3): P-values for stimulus, context, and stimulus-context effects
- plot_2E.m: Generates boxplots comparing partial eta squared values across effect types
- boxplot2.m: Enhanced boxplot with better formatting than MATLAB's built-in function
- get_seaborn.m: Creates color palettes similar to Python's Seaborn
- get_sitenames.m: Returns site name identifiers
- get_unitinfo.m: Retrieves metadata about specific units
- sigstar.m: Adds significance stars to plots
Neurons are classified as responsive to different effects based on significance thresholds:
% Example classification with p < 0.001
alpha_level = 10^-3;
valid_neurons = find(get_unitinfo('sitenums', all_unitinfo) & get_unitinfo('session', all_unitinfo) ~= 26);
% Count neurons responding to each effect
stimulus_neurons = sum(all_ps(valid_neurons, 1) < alpha_level);
context_neurons = sum(all_ps(valid_neurons, 2) < alpha_level);
stimulus_context_neurons = sum(all_ps(valid_neurons, 3) < alpha_level);
% Count neurons responding to combinations of effects
stimulus_only = sum(all_ps(valid_neurons, 1) < alpha_level & all_ps(valid_neurons, 2) >= alpha_level & all_ps(valid_neurons, 3) >= alpha_level);
context_only = sum(all_ps(valid_neurons, 1) >= alpha_level & all_ps(valid_neurons, 2) < alpha_level & all_ps(valid_neurons, 3) >= alpha_level);
interaction_only = sum(all_ps(valid_neurons, 1) >= alpha_level & all_ps(valid_neurons, 2) >= alpha_level & all_ps(valid_neurons, 3) < alpha_level);The analysis uses repeated-measures ANOVA to calculate partial eta squared values and p-values for:
- Main effect of stimulus (image identity)
- Main effect of context (question type)
- Interaction effect between stimulus and context
Statistical significance in Figure 2E is assessed using Wilcoxon signed-rank tests with Bonferroni correction, comparing actual data against permutation test controls.