Alpha power increases spontaneously during a neurofeedback session.
The 4 matches
- [1] § Methods › Statistical analyses and hypotheses testing › EEG data ↔ statistical analyses/ANS_BFsynth_wf.R, lines 1–42 · score 0.78 · brms syntax, multilevel models, full model, sensitive, Bayesian, blocks
- [2] § Methods › Statistical analyses and hypotheses testing › EEG data ↔ statistical analyses/ANS_BFsynth.R, lines 1–54 · score 0.78 · brms syntax, multilevel models, full model, sensitive, Bayesian, blocks
- [3] § Methods › EEG online processing ↔ material/ANS_set_EEG_recording_params.m, lines 86–110 · score 0.55 · 1–20 Hz, 8–12 Hz, window, filtering, online, band
- [4] § Methods › Statistical analyses and hypotheses testing › Feeling of feedback control and feedback credibility ↔ statistical analyses/ANS_stats4qreps.R, lines 85–166 · score 0.53 · random feedback variations, 1–5, BF01, belief, Genuine, Sham
Paper
Loaded from Europe PMC by your browser, not stored by OSCR: doi.org · Europe PMC
The paper is loaded when this pane is shown.
The authors' code
R · 189 lines · 8 KB · no license · 1 match
- ############################################################## ANS_BFsynth_wf.R
- # So far, we computed Bayes factors from 72 Bayesian multilevel models. Each
- # model was specific to one from 12 DV, to one from 3 random seeds, and to one
- # from 2 possible sets of priors. Indeed, we use 2 possible prior effect sizes
- # for the effects of interest (sensitivity analysis).
- # These models have been executed on the neurofeedback "evaluation" blocks. Here
- # is the full model equation (brms syntax):
- # Power ~ Trial*Task + (1 + Trial | Subject)
- # From each model, a dataframe resuming the results in terms of BF10s for the 5
- # effects of interest has been written. Here, we load each of these dataframes
- # and synthetise the results in one single data frame for all.
- ### Libraries ----
- library(readr)
- library(dplyr)
- ### Set WD and parameters (modify the XXXX part) ----
- wd <- "XXXX/statistical analyses/"
- setwd(wd)
- # Number of possible DV, seeds and possible priors
- ndv <- 12
- nsim <- 3
- npr <- 1; bs <- c("1")
- # DV names
- dvnames <- c(
- "Fz_Theta","Fz_Alpha","Fz_SMR","Fz_HighBeta",
- "Cz_Theta","Cz_Alpha","Cz_SMR","Cz_HighBeta",
- "Pz_Theta","Pz_Alpha","Pz_SMR","Pz_HighBeta"
- )
- # Effects names and number
- effnames_inmod <- c(
- "Trial", "TaskcNFvsSham","TaskcShamvsPass",
- "Trial:TaskcNFvsSham","Trial:TaskcShamvsPass"
- )
- effnames <- c(
- "Trial","Task - NF vs Sham","Task - Sham vs Passive",
- "Trial:Task - NF vs Sham","Trial:Task - Sham vs Passive"
- )
- npar <- length(effnames)
- # Possible seeds
- seeds10 <- c(300,1280,123,526,486,1284,242,666,814,956)
- # Deduce total number of rows for output df
- rtot <- ndv*nsim*npr*npar
- rdv <- nsim*npar # nb rows per dv
- # Initiate output df
- BFresults <- data.frame(matrix(NA,nrow = rtot,ncol = 11))
- names(BFresults) <- c("Parameter","Estimate","SE","Lower","Upper","Rhat","BF10","BF10+","DV","Seed","Prior SD")
- ### Let's do it ----
- i_models <- 0
- for (i in 1:ndv){ # i<-1
- dvlab <- dvnames[i]
- for (j in 1:length(bs)){ # j<-1
- for (k in 1:nsim){ # k<-1 ; j<-1;i<-1
- ### Load corresponding input ----
- inpath <- paste0(wd,"BF_tables/eval/",bs[j],"/",dvlab,"_BFs_out",k,".csv")
- buf <- read_delim(inpath,";",escape_double = F, trim_ws = T,
- show_col_types = F,locale = locale(decimal_mark = ","))
- ### Deduce corresponding start and end indexes ----
- i_models <- i_models + 1
- i_end <- npar*i_models
- i_start <- i_end-npar+1
- ### Do corresponding transfer ----
- BFresults[i_start:i_end,1:8] <- buf
- BFresults[i_start:i_end,9] <- dvlab
- BFresults[i_start:i_end,10] <- seeds10[k]
- BFresults[i_start:i_end,11] <- bs[j]
- BFresults[i_start:i_end,1] <- effnames
- }
- }
- }
- BFresultsf <- BFresults %>%
- tidyr::separate(DV, into = c("Electrode","Frequency-band"), sep = "_") %>%
- mutate(
- BF10 = ifelse(BF10 > 100, "> 100", as.character(BF10)),
- `BF10+` = ifelse(`BF10+` > 100, "> 100", as.character(`BF10+`)),
- `Frequency-band` = ifelse(`Frequency-band` == "HighBeta","Beta", as.character(`Frequency-band`))
- ) %>%
- relocate(`Frequency-band`,Electrode,Parameter,Estimate,SE,Lower,Upper,Rhat,
- BF10,`BF10+`,Seed,`Prior SD`)
- write.csv2(BFresultsf, file = paste0(wd,"BF_tables/eval/All_results.csv"), row.names=FALSE)
- write.csv2(BFresults, file = paste0(wd,"BF_tables/eval/All_results2plot.csv"), row.names=FALSE)
- ### Resume results to report them ------------
- results_report <- BFresults %>%
- dplyr::select(-Rhat,-SE) %>%
- mutate(across(c(Estimate,Lower,Upper,BF10,`BF10+`),as.numeric)) %>%
- group_by(DV,Parameter,`Prior SD`) %>%
- # Synthetize results
- summarize(
- Estimate = mean(Estimate),
- Lower = min(Lower),
- Upper = max(Upper),
- `Maximal BF10` = max(BF10),
- `Minimal BF10` = min(BF10),
- BF10 = mean(BF10),
- `Maximal BF10+` = max(`BF10+`),
- `Minimal BF10+` = min(`BF10+`),
- `BF10+` = mean(`BF10+`)
- ) %>% ungroup() %>%
- mutate(across(where(is.numeric), \(x) round(x,digits=3))) %>%
- tidyr::separate(DV, into = c("Electrode","Frequency-band"), sep = "_") %>%
- mutate(
- BF10 = ifelse(BF10 > 100, "> 100", as.character(BF10)),
- `BF10+` = ifelse(`BF10+` > 100, "> 100", as.character(`BF10+`)),
- `Minimal BF10` = ifelse(`Minimal BF10` > 100,"> 100", as.character(`Minimal BF10`)),
- `Maximal BF10` = ifelse(`Maximal BF10` > 100,"> 100", as.character(`Maximal BF10`)),
- `Minimal BF10+`= ifelse(`Minimal BF10+` > 100,"> 100", as.character(`Minimal BF10+`)),
- `Maximal BF10+`= ifelse(`Maximal BF10+` > 100,"> 100", as.character(`Maximal BF10+`)),
- `Frequency-band` = ifelse(`Frequency-band` == "HighBeta","Beta", as.character(`Frequency-band`))
- ) %>%
- relocate(c(`Frequency-band`,Electrode, Parameter,Estimate,Lower,Upper,BF10,
- `Minimal BF10`,`Maximal BF10`,`BF10+`,`Minimal BF10+`,`Maximal BF10+`,`Prior SD`))
- results_report$`Frequency-band` <- factor(results_report$`Frequency-band`, levels = c(
- "Theta","Alpha","SMR","Beta"
- ))
- results_report$Electrode <- factor(results_report$Electrode, levels = c("Fz","Cz","Pz"))
- results_report$Parameter <- factor(results_report$Parameter, levels = effnames)
- results_report <- results_report %>% arrange(Electrode,`Frequency-band`, Parameter) %>% ungroup()
- write.csv2(results_report, file = paste0(wd,"BF_tables/eval/Resume_results.csv"),
- row.names=FALSE)
- ### Extract results for Trial effect -----------
- results_trial <- results_report %>%
- filter(Parameter == "Trial") %>% select(-Parameter)
- write.csv2(results_trial, file = paste0(wd,"BF_tables/eval/Resume_results_trial.csv"),
- row.names=FALSE)
- ### Extract results for Task effect (NF vs. Sham) -----------
- results_TcNFvsSham <- results_report %>%
- filter(Parameter == "Task - NF vs Sham") %>% select(-Parameter)
- write.csv2(results_TcNFvsSham, file = paste0(wd,"BF_tables/eval/Resume_results_TcNFvsSham.csv"),
- row.names=FALSE)
- ### Extract results for Task effect (Sham vs. Passive) -----------
- results_TcShamvsPass <- results_report %>%
- filter(Parameter == "Task - Sham vs Passive") %>% select(-Parameter)
- write.csv2(results_TcShamvsPass, file = paste0(wd,"BF_tables/eval/Resume_results_TcShamvsPass.csv"),
- row.names=FALSE)
- ### Extract results for Trial x Task (NF vs. Sham) interaction effect -----------
- results_trialxTcNFvsSham <- results_report %>%
- filter(Parameter == "Trial:Task - NF vs Sham") %>% select(-Parameter)
- write.csv2(results_trialxTcNFvsSham, file = paste0(wd,"BF_tables/eval/Resume_results_trialxTcNFvsSham.csv"),
- row.names=FALSE)
- ### Extract results for Trial x Task (Sham vs. Passive) interaction effect -----------
- results_trialxTcShamvsPass <- results_report %>%
- filter(Parameter == "Trial:Task - Sham vs Passive") %>% select(-Parameter)
- write.csv2(results_trialxTcShamvsPass, file = paste0(wd,"BF_tables/eval/Resume_results_trialxTcShamvsPass.csv"),
- row.names=FALSE)
- ### Extract results for Theta band -------------------
- results_theta <- results_report %>%
- filter(`Frequency-band` == "Theta") %>%
- select(-`Frequency-band`)
- write.csv2(results_theta,file = paste0(wd,"BF_tables/eval/Resume_results1band_theta.csv"))
- ### Extract results for Alpha band -------------------
- results_alpha <- results_report %>%
- filter(`Frequency-band` == "Alpha") %>%
- select(-`Frequency-band`)
- write.csv2(results_alpha,file = paste0(wd,"BF_tables/eval/Resume_results1band_alpha.csv"))
- ### Extract results for SMR -------------------
- results_SMR <- results_report %>%
- filter(`Frequency-band` == "SMR") %>%
- select(-`Frequency-band`)
- write.csv2(results_SMR,file = paste0(wd,"BF_tables/eval/Resume_results1band_SMR.csv"))
- ### Extract results for Beta band -------------------
- results_beta <- results_report %>%
- filter(`Frequency-band` == "Beta") %>%
- select(-`Frequency-band`)
- write.csv2(results_beta,file = paste0(wd,"BF_tables/eval/Resume_results1band_beta.csv"))
ANS_BFsynth_wf.R, no license · at the source
Overview
- Aix Marseille Univ, CNRS, CRPN,Marseille, France
- Institute Neuro-Marseille, NeuroSchool, Aix Marseille Univ,Marseille, France
- Institute of Language, Communication and the Brain, Aix Marseille Univ,Marseille, France
- Aix Marseille Univ, PSYCLE,Aix-en-Provence, France
Abstract
Electroencephalographic neurofeedback (EEG-NF) has been proposed as a promising technique to modulate brain activity through real-time EEG-based feedback. Alpha neurofeedback in particular is believed to induce rapid self-regulation of brain rhythms, with applications in cognitive enhancement and clinical treatment. However, whether this modulation reflects specific volitional control or non-specific influences remains unresolved. In a preregistered, double-blind, sham-controlled study, we evaluated alpha upregulation in healthy participants receiving either genuine (n = 30) or sham (n = 30) EEG-NF during a single-session design. A third arm composed of a passive control group (n = 32) was also included to differentiate between non-specific influences related or not to the active engagement in EEG-NF. Throughout the session, alpha power increased robustly, yet independently of feedback veracity, engagement in self-regulation, or feedback update frequency. Parallel increases in theta and sensorimotor rhythms further suggest broadband non-specific modulation. Importantly, these results challenge the foundational assumption of EEG-NF: that feedback enables volitional EEG control. Instead, they point to spontaneous repetition-related processes as primary drivers, calling for a critical reassessment of neurofeedback efficacy and its underlying mechanisms.
Reproduced under the paper's license (CC BY), from the paper cited above.
Repository
Its files are read in the Code ↔ Paper reader above, with 4 matches between paragraphs and lines of code.
OSF wevtz
Availability: 1 check, the latest on 30 September 2026: the link answers (HTTP 200)
- 30 September 2026: the link answers (HTTP 200)
13 files
- material/
ANS_assign_cond_order.m , MATLAB, 124 lines - material/
ANS_circle_and_EEG.m , MATLAB, 547 lines - material/
ANS_doubleblinding.m , MATLAB, 69 lines - material/
ANS_execute.m , MATLAB, 178 lines - material/
ANS_onesteponline.m , MATLAB, 105 lines - material/
ANS_set_EEG_recording_pa , MATLAB, 110 lines, 1 matchrams.m - material/
scripts4questions/ , MATLAB, 38 lineslikert1to5.m - material/
scripts4questions/ , MATLAB, 58 linesqoutput.m - statistical analyses/
ANS_BFsynth.R , R, 289 lines, 1 match - statistical analyses/
ANS_BFsynth_wf.R , R, 189 lines, 1 match - statistical analyses/
ANS_execute_stats.R , R, 621 lines - statistical analyses/
ANS_mainplots.R , R, 867 lines - statistical analyses/
ANS_stats4qreps.R , R, 167 lines, 1 match
Code availability
All material and analysis codes are available via the OSF at: https://
Reproduced under the paper's license (CC BY), from the paper cited above.
Tracing map
Proposed by the machine: these links were found in the paper and verified at the source, without human review. The map will receive a Zenodo DOI once one of the paper's authors has validated it with their ORCID.
What the map holds:
- 1 repository of the authors' code, each at its verified commit, with its license and how the link was found in the paper;
- 13 scripts, each with its path and the digest of its content;
- 4 matches between paragraphs of the paper and lines of the code (method lexical-v1);
- neither the text of the paper nor the code itself.
Its JSON (tracing-map.json) is deposited on Zenodo with its DOI once the map is validated.
Data
No dataset and no data link were found in the paper.
Data availability
All data are available via the OSF at: https://
Reproduced under the paper's license (CC BY), from the paper cited above.
Versions
The history of this record: each version stored by the harvester or made by a correction of its authors or of the maintainers of its code, and what changed in its facts. The texts of the paper (its abstract, its availability statements) are not part of it; versions that changed only those are not listed.
Version 1, 30 September 2026: the first record
Recorded: type, language, journal, volume, issue, pages, dates, 5 authors, 3 keywords, 3 funders, 81 references.
Cite
This paper
Maaz, J., Waroquier, L., Dia, A., Paban, V., & Rey, A. (2026). Alpha power increases spontaneously during a neurofeedback session. Communications psychology, 4(1), 75. https://
BibTeX
@article{maaz2026alpha,
author = {Maaz, Jacob and Waroquier, Laurent and Dia, Alexandra and Paban, Véronique and Rey, Arnaud},
title = {{Alpha power increases spontaneously during a neurofeedback session}},
journal = {Communications psychology},
year = {2026},
month = mar,
volume = {4},
number = {1},
pages = {75},
publisher = {Nature Publishing Group},
issn = {2731-9121},
doi = {10.1038/
url = {https://
pmid = {41820645},
pmcid = {PMC13125214}
}
RIS
TY - JOUR
AU - Maaz, Jacob
AU - Waroquier, Laurent
AU - Dia, Alexandra
AU - Paban, Véronique
AU - Rey, Arnaud
TI - Alpha power increases spontaneously during a neurofeedback session
T2 - Communications psychology
J2 - Commun Psychol
PY - 2026
DA - 2026/
VL - 4
IS - 1
SP - 75
SN - 2731-9121
PB - Nature Publishing Group
DO - 10.1038/
UR - https://
LA - en
ER -
CSL-JSON
{
"id": "10.1038/
"type": "article-journal",
"title": "Alpha power increases spontaneously during a neurofeedback session",
"container-title": "Communications psychology",
"author": [
{
"family": "Maaz",
"given": "Jacob"
},
{
"family": "Waroquier",
"given": "Laurent"
},
{
"family": "Dia",
"given": "Alexandra"
},
{
"family": "Paban",
"given": "Véronique"
},
{
"family": "Rey",
"given": "Arnaud"
}
],
"container-title-short":
"volume": "4",
"issue": "1",
"page": "75",
"DOI": "10.1038/
"PMID": "41820645",
"PMCID": "PMC13125214",
"ISSN": "2731-9121",
"publisher": "Nature Publishing Group",
"URL": "https://
"language": "en",
"issued": {
"date-parts": [
[
2026,
3,
12
]
]
}
}
The tracing map gets a citation of its own once an author has validated it and it has a DOI.
Similar papers
The papers with a page that share the most with this one: the tools found in their code, their categories, datasets, cited references and authors, the rarest counting most.
- [1] doi:10.1111/psyp.70285 [code]
- Spontaneous Modulation of Alpha Power During a Neurofeedback Session Without Instructions.Journal: PsychophysiologyIn common: afex, Stan, brms, 9 other tools, EEG, 55 references, author Jacob Maaz
- [2] doi:10.1162/imag.a.1258 [code]
- Non-specific increase in alpha power during a neurofeedback session targeting its downregulation.Journal: Imaging neuroscience (Cambridge, Mass.)In common: BayesFactor, afex, Stan, 12 other tools, EEG, 52 references, author Jacob Maaz
- [3] doi:10.1186/s13229-026-00730-3 [code]
- Predicting emotional valence in autism: a preregistered study in the Bayesian Brain framework.Journal: Molecular autismIn common: BayesFactor, Stan, brms, 7 other tools, cognitive, 2 references
- [4] doi:10.1038/s41467-026-74565-0 [code]
- The functional neurobiology of dispositions towards negative emotions.Journal: Nature communicationsIn common: BayesFactor, afex, brms, 7 other tools, cognitive
- [5] doi:10.64898/2026.03.02.709173 [code]
- Corpus Callosum Dysgenesis impairs metacognition: evidence from multi-modality and multi-cohort replicationsJournal: bioRxiv (preprint)In common: Stan, brms, easystats, 6 other tools, cognitive
- [6] doi:10.1093/nc/niag029 [code]
- A data-driven approach to identifying and evaluating connectivity-based neural correlates of conscious visual perception.Journal: Neuroscience of consciousnessIn common: BayesFactor, afex, easystats, 6 other tools, cognitive
- [7] doi:10.1126/sciadv.aec9291 [code]
- Computational mechanisms of perception in autism revealed using games inspired by rodent operant tasks.Journal: Science advancesIn common: afex, Stan, easystats, 6 other tools, cognitive
- [8] doi:10.1073/pnas.2608511123 [code]
- Facial palsy reveals the sensorimotor contribution to facial-emotion recognition.Journal: Proceedings of the National Academy of Sciences of the United States of AmericaIn common: BayesFactor, afex, brms, 5 other tools, EEG
- [9] doi:10.1371/journal.pone.0355165 [code]
- Pupillary dynamics during hands-off L2 driving and transitions of control under high cognitive load.Journal: PloS oneIn common: BayesFactor, Stan, brms, 5 other tools, cognitive
- [10] doi:10.1038/s42003-026-10957-8 [code]
- Brain defence by the extracellular matrix protein Cochlin.Journal: Communications biologyIn common: Stan, brms, broom, 6 other tools
Contribute
The authors of this paper can claim it, correct its record and validate its tracing map, and the maintainers of its code (its owner, or a public member of its organization) correct what it says of their repository; anyone signed in can ask for its removal. Every request goes to OSCR's own machine, which answers it; your account page follows them.
Sign in with ORCID to claim this paper as one of its authors, correct its record or validate its tracing map: when the paper's metadata lists your ORCID iD, you are recognized at once. Maintainers of its code: sign in with GitHub, then claim the repository on your account page.
Claim this paper
Correct its record
Say what each link of this record is, remove the ones that are not the paper's, add the ones that are missing. The correction becomes a new version of the record, in its Versions section.
Validate its tracing map
You validate the map as this page shows it: 1 repository of the authors' code, each at its verified commit and with its license, 13 scripts, and 4 matches between paragraphs and code (see the Code and Map sections). It then receives a DOI on Zenodo, with you (your ORCID iD) and OSCR as its creators; the code itself is not deposited.
The map's fingerprint: sha256:a754c4e6ae84f652…
Add the badge to its README
The badge links the code to this page. Copy one of these into the README of the paper's code: only you decide where it goes, and nothing is changed for you.
Markdown
[.
Discussion, reproductions, activity
Discussion: questions and error reports about this paper and its code, from signed-in readers and its authors. It opens with sign-in.
Reproductions: reports from readers who ran the authors' code: what they reproduced, with which environment, commit and data. It opens with sign-in.
Activity: what happens around this paper: new versions of its record, its map's validation, discussions and reproductions. It opens with sign-in.
