Skip to content

Channel Summary ​

This demo demonstrates how to generate summary statistics across all channels for data quality assessment.

What is Channel Summary? ​

Channel summary provides aggregate statistics across all EEG channels, offering a quick overview of data characteristics. This complements channel-specific metrics by revealing patterns across the entire montage.

Statistical measures:

  • Mean amplitude per channel

  • Variance/standard deviation

  • Minimum and maximum values

  • Sample counts

Use Cases ​

Data quality overview:

  • Quick assessment of recording quality across all channels

  • Identify systematic patterns or issues across the montage

  • Compare data quality before and after preprocessing

Channel comparison:

  • Identify channels with systematically different properties

  • Detect asymmetries or systematic biases in the recording

  • Verify that preprocessing affected channels as expected

Workflow Summary ​

This demo shows channel summary analysis:

Generate Initial Summary ​

  • Load and preprocess data (average reference, high-pass filter)

  • Calculate summary statistics across all channels

  • Display results using formatted table

Summary with Sample Selection ​

  • Mark extreme values for exclusion

  • Recalculate summary excluding artifacts

  • Compare clean vs. raw summary statistics

Code Examples ​

Show Code
julia
# Demo: Channel Summary
# Shows how to create summary statistics for channels across epochs.

# Note: EegFun.example_path() resolves bundled example data paths.
# When using your own data, simply pass the file path directly, e.g.:
# dat = EegFun.read_raw_data("/path/to/your/data.bdf")

using EegFun
using GLMakie

# read raw data
dat = EegFun.read_raw_data(EegFun.example_path("data/bdf/example1.bdf"));

# read and prepare layout file
layout = EegFun.read_layout(EegFun.example_path("layouts/biosemi/biosemi72.csv"));
EegFun.polar_to_cartesian_xy!(layout)

dat = EegFun.create_eegfun_data(dat, layout)

# minimal preprocessing
EegFun.rereference!(dat, :avg)
EegFun.highpass_filter!(dat, 0.1)

# summary statistics across all channels
summary = EegFun.channel_summary(dat)
EegFun.log_pretty_table(summary; title = "Initial Channel Summary")

# summary statistics across all channels excluding v. extreme values
EegFun.is_extreme_value!(dat, 200);
summary = EegFun.channel_summary(dat, sample_selection = EegFun.samples_not(:is_extreme_value_200))
EegFun.log_pretty_table(summary; title = "Channel Summary (excluding extreme values)")

# summary statistics across all Midline channels via predicate selection
summary = EegFun.channel_summary(dat, channel_selection = EegFun.channels(x -> endswith.(string.(x), "z")))
EegFun.log_pretty_table(summary; title = "Channel Summary (Midline)")

See Also ​