Neural Output Visualization and Analysis
A comprehensive R toolkit for analyzing and visualizing Multi-Electrode Array (MEA) neural data β from raw CSV discovery through PCA trajectory analysis, heatmap generation, and per-metric plotting β with publication-ready figures in a few lines of code.
Example/nova_quickstart.R) to change a single path and
generate all figures automatically
Four treatment groups traced through PCA space over 7 timepoints
(MEA Neuronal Agonists dataset).
PBS control remains near the
origin; KA, Gabazine and NMDA each drive distinct network-level
responses.
# Install from GitHub
remotes::install_github("atudoras/nova")
# Or using devtools
# install.packages("devtools")
devtools::install_github("atudoras/nova")
# Install from CRAN (coming soon)
install.packages("NOVA")library(NOVA)
# Step 1: Discover your MEA data directory structure
discovery <- discover_mea_structure("path/to/your/MEA_data")
# Step 2: Process MEA data across timepoints and grouping variables
processed <- process_mea_flexible(
main_dir = "path/to/your/MEA_data",
selected_timepoints = c("baseline", "0min", "15min", "30min", "1h", "2h"),
grouping_variables = c("Experiment", "Treatment", "Genotype", "Well"),
baseline_timepoint = "baseline"
)
# Step 3: Run enhanced PCA
pca_results <- pca_analysis_enhanced(processing_result = processed)
# Step 4: Generate PCA plots (scatter, ellipses, loadings)
pca_plots <- pca_plots_enhanced(
pca_output = pca_results,
color_variable = "Treatment",
shape_variable = "Genotype"
)
# Step 5: Plot PCA trajectories across timepoints
trajectories <- plot_pca_trajectories_general(
pca_results,
timepoint_order = c("baseline", "0min", "15min", "30min", "1h", "2h"),
trajectory_grouping = c("Genotype", "Treatment")
)
# Step 6: Create MEA heatmaps (split by genotype, filter to specific treatments)
heatmaps <- create_mea_heatmaps_enhanced(
processing_result = processed,
grouping_columns = c("Genotype", "Treatment"),
split_by = "Genotype",
filter_treatments = c("Vehicle", "Drug_A")
)
# Step 7: Plot a single metric across groups
plot_mea_metric(
data = processed$processed_data,
metric = "MeanFiringRate",
plot_type = "violin",
facet_by = "Timepoint"
)
| Feature | Description |
|---|---|
| Smart CSV row detection | find_mea_metadata_row() scans for the βTreatmentβ label
instead of assuming a fixed row number β handles Axion software export
variations automatically |
| Raw-data heatmaps | New use_raw = TRUE parameter in
create_mea_heatmaps_enhanced() renders un-normalized
electrode data directly |
| Per-metric plots | New plot_mea_metric() function generates bar, box,
violin, or line plots for any single MEA variable with full faceting and
error bar control |
| Heatmap filter and split | New filter_treatments, filter_genotypes,
and split_by parameters in
create_mea_heatmaps_enhanced() for focused, side-by-side
comparisons |
| Zero-code quickstart script | Example/nova_quickstart.R β set DATA_DIR
once, run the script, and all figures are saved automatically |
| Illustrated user guide | Full step-by-step HTML guide with figures available in
docs/user-guide/ |
| Function | Description | Key Parameters |
|---|---|---|
discover_mea_structure |
Scans a directory and reports all detected MEA experiments and timepoints | main_dir, verbose |
process_mea_flexible |
Reads and merges CSVs across experiments and timepoints; normalizes to baseline | main_dir, selected_timepoints,
grouping_variables, baseline_timepoint |
pca_analysis_enhanced |
Runs PCA on the processed feature matrix; returns scores, loadings, and variance explained | processing_result, scale,
center |
pca_plots_enhanced |
Generates a suite of PCA visualizations (scatter, ellipses, loadings, variance) | pca_output, color_variable,
shape_variable |
plot_pca_trajectories_general |
Draws mean PCA trajectories across timepoints for each experimental group | pca_output, timepoint_order,
trajectory_grouping |
create_mea_heatmaps_enhanced |
Creates heatmaps of MEA metrics by treatment and/or genotype; supports raw or normalized data | processing_result, grouping_columns,
split_by, filter_treatments,
filter_genotypes, use_raw |
plot_mea_metric |
Bar, box, violin, or line plot for a single MEA variable with optional faceting and filtering | data, metric, plot_type,
facet_by, filter_treatments,
filter_genotypes, error_type |
NOVA expects a straightforward directory layout that mirrors how Axion BioSystems software exports data:
MEA followed by digits (e.g., MEA001,
MEA016a)<plate>_<timepoint>.csv (e.g.,
MEA001_baseline.csv, MEA001_1h.csv)find_mea_metadata_row()baseline, 1h, DIV7, or
any custom labelMEA_data/
βββ MEA001/
β βββ MEA001_baseline.csv
β βββ MEA001_1h.csv
β βββ MEA001_24h.csv
βββ MEA002/
β βββ MEA002_baseline.csv
β βββ MEA002_1h.csv
For the fastest path to results, open
Example/nova_quickstart.R. The only change required is
setting DATA_DIR to your data folder path. Running the
script end-to-end will:
No other configuration is needed.
A full illustrated guide covering all functions, parameters, and interpretation of outputs is available at:
The guide includes example figures, annotated code, and recommendations for common experimental designs.
If you use NOVA in published research, please cite:
Escoubas CC, Guney E, Tudoras Miravet Γ, Magee N, Phua R, Ruggero D, Molofsky AV, Weiss WA (2025). NOVA: a novel R-package enabling multi-parameter analysis and visualization of neural activity in MEA recordings. bioRxiv. https://doi.org/10.1101/2025.10.01.679841
Bug reports and feature requests are welcome via GitHub Issues. Pull requests should follow standard R package conventions and include tests where applicable.
For questions, contact Alex Tudoras at alex.tudorasmiravet@ucsf.edu.
NOVA is released under the GPL-3 License.