NeuroAnalyzer tutorials: Analyze: Signal statistics

Initialize NeuroAnalyzer
using NeuroAnalyzer
eeg = load("files/eeg.hdf")
e10 = epoch(eeg, ep_len=10)
keep_epoch!(e10, ep=1:10);

Statistical analysis

The moments of the probability distribution of signal amplitudes:

  1. mean
  2. variance
  3. skewness
  4. kurtosis

Calculate epochs statistics (mean, median, standard deviation, variance, kurtosis, skewness, mean diff value, median diff value, max difference, deviation from channel mean):

epoch_stats(e10)
(e_mean = [8.844529516947382, -2.6309605192716647, 0.21343718018591318, 1.345178911840028, -1.056540931179786, 2.133687472854265, -1.88446651022467, -0.1535859482861331, -1.1867695815308474, 1.6372160907705242], e_median = [0.3683387937834566, -2.0568128804845585, -0.5343284999364056, 0.7984602914379972, -0.7343968127823457, -0.1469431881200296, -0.7334660958190309, -0.7911261040287375, 0.26260458064598124, 4.880365184009091], e_std = [68.83949565849242, 25.977123901007374, 20.600596087424737, 20.531207329834544, 19.62391833397126, 54.01853958281767, 259.6037384421729, 23.124284421874922, 28.244966122931913, 29.99848392537521], e_var = [4738.876162515598, 674.8109661682886, 424.38455915721937, 421.5304744206517, 385.09817077837334, 2918.002618660439, 67394.10101315215, 534.7325300237671, 797.7781112855715, 899.9090378209949], e_kurt = [32.36912805876482, 116.19411258166303, 280.0719736626733, 277.6952842658082, 314.9235615195551, 156.35931376699065, 139.54941627924737, 165.7792948397152, 80.25927095360225, 64.47016249302317], e_skew = [3.3667651805509275, 3.1035540006032987, 4.315918465316152, 4.183514529320318, 4.690614698197998, 10.329367956682464, -8.661755351738552, 2.337750409278593, 0.7786569471550772, 1.110290054014834], e_mean_diff = [0.016697614635676112, -0.016092411371867205, -0.0007868481181133981, -0.00647896125617705, 0.005821234638965401, 0.018116101043346034, -0.021981392867558243, 0.002714668358345418, 0.0060128654413626, -0.0038028354942989916], e_median_diff = [-0.039757734411129064, 0.046290114148610506, 0.011449515664934129, 0.0068528691757556714, 0.012273370974165587, 0.011685878427110108, 0.0023981274176478884, -0.00832149262327464, 0.09294304056495384, 0.039831906930455574], e_max_dif = [1444.0874883026254, 995.3577431498188, 1002.6536341628603, 995.5627109788252, 1020.5806330506331, 1456.3438102532375, 5887.908424082647, 1027.8026254133388, 1075.1008590896881, 999.427861689167], e_dev_mean = [0.0, 5.2619210385433295, 0.0, 0.0, 2.113081862359572, 0.0, 3.76893302044934, 0.3071718965722662, 2.373539163061695, 0.0])

Calculate channels statistics (mean, median, standard deviation, variance, kurtosis, skewness, mean diff value, median diff value, max difference, deviation from channel mean) per epoch:

channel_stats(e10)
(c_mean = [12.628000313842048 -2.926299818273704 … -0.9065438655093289 1.5074433791247857; -1.226165027359069 -7.478455433806047 … -1.8812655798457167 1.796209267739119; … ; 11.438191874883843 -2.198792493353539 … -1.9801096108210239 2.618155623291331; 37.280093728518814 -2.5380736567685913 … -2.107301955837043 1.4920825358408014], c_median = [-0.5691432317413921 -0.762111987132367 … -1.967353794911225 4.556267733293119; -11.976126113773903 -0.14338116735430395 … -1.1889434000758567 10.044276532404322; … ; 2.4146791401084515 0.9039946021406968 … -0.25319562792337713 8.801100940686517; -1.8596051084142555 -11.660318591765792 … -5.069434211134878 -5.670301279020319], c_std = [47.08270159390826 11.468791881086773 … 10.240635783880666 17.017442451172442; 212.16690781488 73.04091889829976 … 16.12393546610099 46.10506177372683; … ; 53.11943920748949 14.279292071435108 … 19.659676714969567 35.66927017275856; 143.90341019859162 87.78885849111744 … 95.23006201440955 92.30843621882835], c_var = [2216.780789381012 131.53318721168188 … 104.8706212580972 289.5933475789659; 45014.79677172779 5334.975833508004 … 259.9812949149893 2125.6767211591673; … ; 2821.674821718172 203.89818206134953 … 386.50288853711663 1272.2968346572434; 20708.19146678412 7706.883675173443 … 9068.76471126829 8520.847397165502], c_kurt = [2.1459474365125217 0.1365916230131754 … -0.38172560846233505 2.6995382436862334; 3.761297620559878 5.3312994692686555 … -0.7943102398263768 2.7597267867772697; … ; 2.096806427276614 0.6253744469921556 … 2.096128653030476 0.6005434590348968; 5.6989254677769114 15.112998074263952 … 12.131588089523527 13.933929450230632], c_skew = [1.460816157438165 0.03745427847704223 … 0.20346097298149862 -1.4323155229573714; 1.7326464367865624 1.6023416145719336 … -0.27520014596839387 -1.7251823343485557; … ; 1.2553308528076572 -0.3260263475644055 … -0.08815854538812905 -0.9820473521003538; 1.4311726853412252 1.1009058074229716 … 0.7748428871811602 1.1591928851389106], c_mean_diff = [0.01571479519372127 -0.018842753676691557 … 0.0025338440192865445 0.005404290435206576; 0.13585194159681377 -0.13498701532030685 … 0.0007884717796897383 0.0001557059315721129; … ; 0.01725914939253936 -0.0169991032710645 … -0.006090275068998639 0.008661417321771324; -0.038147515206171156 0.019348273125056735 … 0.002105146794779864 -0.01056061719435777], c_median_diff = [-0.1372651712145423 -0.03409988026101729 … 0.03453605857977138 -0.040246336237052205; -0.3961824507655223 -0.21669535308407362 … 0.18759523830675384 0.13884262344836884; … ; 0.00577277985724578 0.10455114626398898 … 0.050142319739998165 -0.06284981778411947; 1.0892749731619276 1.115858484436922 … 1.2738090348675684 1.0345404904224864], c_max_dif = [277.5316652860279 70.0828553282792 … 53.632751435450686 110.00829267607418; 1101.0694923706733 462.1145005920657 … 75.71430311191291 252.644791198558; … ; 292.5596842087352 88.46176519891911 … 138.0686910220902 166.29240684465987; 1444.0874883026254 995.3577431498188 … 1075.1008590896881 999.427861689167], c_dev_mean = [0.0 5.852599636547408 … 1.8130877310186577 0.0; 2.452330054718138 14.956910867612095 … 3.7625311596914335 0.0; … ; 0.0 4.397584986707078 … 3.9602192216420478 0.0; 0.0 5.076147313537183 … 4.214603911674086 0.0])

Signal-to-noise

SNR (signal-to-noise) may be estimated from epoched EEG signal:

s, hz = snr(e10, ch="all")
Plots.plot(hz, s[1, :], label="$(labels(e10)[1])", xlabel="Frequency [Hz]", ylabel="SNR")
Plots.plot!(hz, s[2, :], label="$(labels(e10)[2])")
Plots.plot!(hz, s[3, :], label="$(labels(e10)[3])")
Plots.plot!(hz, s[4, :], label="$(labels(e10)[4])")

Pattern recognition

Machine learning methods may be used to detect spikes and sharp waves, spike-and-wave bursts, sleep spindles and K-complexes, and seizure discharges.