[Eeglablist] Analysis of Frontal Alpha Asymmetry - am I on the right track?

Cedric Cannard ccannard at protonmail.com
Fri Aug 7 13:33:36 PDT 2020


Dear Katia,

Reading through the code I sent in my last email to the list, I noticed a mistake in the channel index during power calculation... Sincere apologies.
Also, while the literature suggests the use of natural log for EEG asymmetries, I personally prefer to follow the engineering/eeglab standards of bio-signal and use the 10*log10 values in dB, as Makoto suggested. But that is up to you, and it shouldn't change much anyways as it shouldn't influence the ratios between left and right hemispheres.

Here are the corrected lines (I haven't double-checked in Matlab but I believe this should do it on the right channels):

mean_alpha_left(left_ind(i),:) = mean(spectra_left(left_ind(i),alphaIdx)); end
left_alpha = 10*log10(mean(mean_alpha_left)); %average alpha across channels and convert to dB

You can alternatively just keep the default values from spectopo function at the beginning instead of converting them to absolute power and then back to dB.

Best,
Cédric


Cédric Cannard

‐‐‐‐‐‐‐ Original Message ‐‐‐‐‐‐‐
On Thursday, July 30, 2020 3:36 PM, Makoto Miyakoshi <mmiyakoshi at ucsd.edu> wrote:

> Dear Katia,
>
> > % Here I am looking at two options and I have no idea which one to choose:
> > alphaL = mean(spectraLagg(alpha_ind));
> > alphaR = mean(spectraRagg(alpha_ind));
> > alphaLb = mean(10.^(spectraLagg(alpha_ind )/10));
> > alphaRb = mean(10.^(spectraRagg(alpha_ind )/10));
>
> The former is averaging the log-converted power in 10*log10 dB, while the
> latter is averaging the raw power in uV^2
>
> > FCA = log(alphaL) - log(alphaR)
>
> No need to take a log here. Simply, alpha-alphaR is fine.
>
> > FCAb = log(alphaLb) - log(alphaRb)
>
> You can report raw power difference as alpphaLb-alphaRb.
> If you want to convert it to 10log10, FCAb =
> 10log10(alphaLb)-10*log10(alphaRb)
>
> > 1.  Is it acceptable to run spectopo() only on selected channels or should I
>
> run it on the whole dataset and then extract the channels I am interested
> in? Does it make any difference?
>
> Yes you can. It does not make difference whether you include all the
> channels or selected channels. PSD is computed in a repeated univariate way.
>
> > 2.  Is it acceptable to simply average across my channels of interest to
>
> obtain a composite alpha power score, or should I employ some more
> sophisticated calculation?
>
> Yes, I think that is probably more common practice. People casually average
> electrodes because they have a lot of them.
>
> > 3.  The most most-pertinent question: should I go with FCAa or FCAb? For
>
> this dataset one ends up being a positive and the other a negative number,
> so this is a really important choice that I have no idea how to make. From
> what I understand it has to do with the values being expressed in either
> decibels or in uV^2, correct? Raw spectopo() output (is that dB?)? contains
> negative values which obviously mess things up for me when I average, so I
> am leaning towards option b, but the fact that similar transformation was
> not mentioned in any of the papers I looked at makes me doubt myself.
>
> If you want to report raw uV^2 unit value, FCAb without taking log in the
> end. If you want to report dB-converted value, FCAa without taking log in
> the end.
>
> > 4.  I also have a question regarding the spectopo() function. In the
>
> eeglablist post I link above, Arno calls the function with EEG.pnts as the
> second argument (frames per epoch). But in Makoto's example the value used
> is 0. Why would it ever be 0? Should it be 0 or EEG.pnts?
>
> I guess 0 will be replaced internally with EEG.pnts as a default value.
>
> > I will be so incredibly grateful to get your input: for my first foray
>
> into
> the world of EEG analysis I picked a method that nobody I know has ever
> used, so I am completely relying on what I can find out myself and your
> kindness :)
>
> I won't be hosting the mailing list in August but if you want I can keep
> watching your post to provide answers continuously.
>
> Makoto
>
> On Sun, Jul 26, 2020 at 8:58 AM Katarzyna Dudzikowska <
> k.a.dudzikowska at gmail.com> wrote:
>
> > Dear all,
> > First of all, thank you for all the help I have gotten from this mailing
> > list so far, I really appreciate it!
> > For my MSc thesis I am trying to run a Frontal Alpha Asymmetry analysis.
> > The end goal is an individual numeric score capturing interhemispheric
> > difference in alpha activation for each of my subjects. I have extracted
> > 1-sec-long epoch from each trial and I am going to derive the score from a
> > dataset containing just these epochs. A typical dataset, in case it
> > matters, has around 300 epochs, 250 frames per epoch (as sampling rate is
> > 250Hz).
> > Rather than use just one pair of electrodes, I want to use an aggregate of
> > AF8, F6 and F8 for the right and AF7, F5 and F7 for the left hemisphere.
> > Based on the previous literature, I want to run a fast Fourier transform
> > analysis with a 50% Hamming window on the epoched dataset, extract alpha
> > frequency power (8-13Hz), average across the right-side channels to obtain
> > right alpha power and across the left-side channels to obtain left alpha
> > power, log transform these values and subtract the left from the right to
> > get my final score.
> > This sounds simple enough, but I am not sure
> > a) whether the code I have written definitely does the things I described
> > above (I think so, but I would really love to get some feedback)
> > b) whether before I log transform and subtract the values I should "compute
> > absolute power" as described by Makoto here:
> > https://sccn.ucsd.edu/wiki/Makoto's_useful_EEGLAB_code#How_to_extract_EEG_power_of_frequency_bands_.2806.2F06.2F2020_updated.29
> > I have to admit that I do not understand why I would/wouldn't and what it
> > does. I have searched the list and found some discussions you had on this
> > topic, but I didn't understand much of it I'm afraid.
> > Below is the code I compiled from literature + Makoto's advice I link
> > above + this post:
> > https://sccn.ucsd.edu/pipermail/eeglablist/2007/001903.html
> > Does it make sense?
> > %Define channels of interest:
> > left_ind = [4 8 9]; %AF7, F7, F5
> > right_ind = [7 15 16]; %AF8, F6, F8
> > %Obtain power spectra at specified channels on the left and on the right
> > [spectraL, freqs] = spectopo(EEG.data(left_ind,:,:), EEG.pnts, EEG.srate,
> > 'winsize', EEG.srate, ...
> > 'wintype', 'hamming', 'overlap', EEG.srate/2, 'plot', 'off');
> > [spectraR] = spectopo(EEG.data(right_ind,:,:), EEG.pnts, EEG.srate,
> > 'winsize', EEG.srate, ...
> > 'wintype', 'hamming', 'overlap', EEG.srate/2, 'plot', 'off');
> > % Aggregate of the chosen channels
> > spectraLagg = mean(spectraL)
> > spectraRagg = mean(spectraR)
> > %Define alpha power as between 8 and 13Hz.
> > alpha_ind = find(freqs>=8 & freqs<=13);
> > % Here I am looking at two options and I have no idea which one to choose:
> > alphaL = mean(spectraLagg(alpha_ind));
> > alphaR = mean(spectraRagg(alpha_ind));
> > FCA = log(alphaL) - log(alphaR)
> > alphaLb = mean(10.^(spectraLagg(alpha_ind )/10));
> > alphaRb = mean(10.^(spectraRagg(alpha_ind )/10));
> > FCAb = log(alphaLb) - log(alphaRb)
> > My most pertinent questions are:
> >
> > 1.  Is it acceptable to run spectopo() only on selected channels or should I
> >     run it on the whole dataset and then extract the channels I am interested
> >     in? Does it make any difference?
> >
> > 2.  Is it acceptable to simply average across my channels of interest to
> >     obtain a composite alpha power score, or should I employ some more
> >     sophisticated calculation?
> >
> > 3.  The most most-pertinent question: should I go with FCAa or FCAb? For
> >     this dataset one ends up being a positive and the other a negative number,
> >     so this is a really important choice that I have no idea how to make. From
> >     what I understand it has to do with the values being expressed in either
> >     decibels or in uV^2, correct? Raw spectopo() output (is that dB?)? contains
> >     negative values which obviously mess things up for me when I average, so I
> >     am leaning towards option b, but the fact that similar transformation was
> >     not mentioned in any of the papers I looked at makes me doubt myself.
> >
> > 4.  I also have a question regarding the spectopo() function. In the
> >     eeglablist post I link above, Arno calls the function with EEG.pnts as the
> >     second argument (frames per epoch). But in Makoto's example the value used
> >     is 0. Why would it ever be 0? Should it be 0 or EEG.pnts?
> >
> >
> > I will be so incredibly grateful to get your input: for my first foray into
> > the world of EEG analysis I picked a method that nobody I know has ever
> > used, so I am completely relying on what I can find out myself and your
> > kindness :)
> > Best regards,
> > Katia Dudzikowska
> >
> > Eeglablist page: http://sccn.ucsd.edu/eeglab/eeglabmail.html
> > To unsubscribe, send an empty email to
> > eeglablist-unsubscribe at sccn.ucsd.edu
> > For digest mode, send an email with the subject "set digest mime" to
> > eeglablist-request at sccn.ucsd.edu
>
> Eeglablist page: http://sccn.ucsd.edu/eeglab/eeglabmail.html
> To unsubscribe, send an empty email to eeglablist-unsubscribe at sccn.ucsd.edu
> For digest mode, send an email with the subject "set digest mime" to eeglablist-request at sccn.ucsd.edu





More information about the eeglablist mailing list