[Eeglablist] ICA after PREP pipeline incl channel interpolation
Dheeraj Rathee
Rathee-D at email.ulster.ac.uk
Wed Aug 17 14:11:49 PDT 2016
Hi Alexandra,
Let’s take your issues one by one:
1. I strongly suggest not to use any EEGLAB plugin (eg. PREP pipeline) without verifying the results as from my personal experience I found no significant improvement using PREP pipeline.
2. There is no point in interpolating the bad channels without cleaning the data first.
3. The rank reduction is generally happen when you reject certain ICA components.
If you want to follow my pipeline to clean the high density EEG data, here it is:
1. Remove bad chuncks(epoches)using visual inspection.
3. BandPass and notch/cleanline.
4. Select bad channels by kurtosis(5%) and/or proablity(5%).
5. ICA using binica with good channels only.
6. Remove the bad components by spectral plots and component activation plots (automatically or manually).
7. Interpolate the Bad channels sherical spline method.
Best,
Dheeraj
I realise this is a popular question but I am really uncertain what happens to my data in my preprocessing pipeline. I am quite new to ICA/PCA decomposition.
First, the raw data are run through the PREP pipeline (in EEGLAB 13.5.4b), including the (spherical) interpolation of noisy channels.
Then after rejection of very noisy epochs I run ICA (for identification of artefact components) with EEG = pop_runica(EEG,'extended',1) %this is somebody else's code that I am re-using.
(Minor question: At this point I do not baseline correct each epoch, is this recommended?)
I get the info: "Data rank (115) is smaller than the number of channels (128). Input data size [115,525723] = 115 channels, 525723 frames/nAfter PCA dimension reduction,
finding 115 ICA components using extended ICA."
Here is where I am losing track. For this example, there are 116 non-interpolated channels and the data set was re-referenced to common reference before ICA.
So I guess this might be behind the rank reduction, although I am not sure how runica knows about this (where is such information retrieved?)
What precisely is used as the input data now? Any first 115 channels or only the non-interpolated channels?
What happens when the resulting (clean) components are projected back onto channel space if some of the channels are not actually included in the data set used to calculate the components?
Many thanks in advance,
From: James Jones-Rounds [mailto:jj324 at cornell.edu]
Sent: 17 August 2016 17:44
To: EEGLAB List <eeglablist at sccn.ucsd.edu>
Cc: a.vossen.1 at research.gla.ac.uk
Subject: Re: [Eeglablist] ICA after PREP pipeline incl channel interpolation
Hi Alexandra,
My understanding (I'm not an expert in ICA, specifically, but I've been using it for years), is that all your channels will be fed into ICA, and backprojecting components into channel space will do that projection onto all the 128 channels. So even though you interpolated some bad channels pre-ICA, all the channels get used. The rank reduction, in my crude understanding, means that the ICA will take the 128 channels but will only look for 115 unique components, because it's assuming that the interpolated channels are not unique sources of data (since they're now based on neighboring channels). So I wouldn't worry too much, but that's just my two cents.
James
On Wed, Aug 17, 2016 at 12:34 PM, <eeglablist-request at sccn.ucsd.edu<mailto:eeglablist-request at sccn.ucsd.edu>> wrote:
Send eeglablist mailing list submissions to
eeglablist at sccn.ucsd.edu<mailto:eeglablist at sccn.ucsd.edu>
To subscribe or unsubscribe via the World Wide Web, visit
https://sccn.ucsd.edu/mailman/listinfo/eeglablist
or, via email, send a message with subject or body 'help' to
eeglablist-request at sccn.ucsd.edu<mailto:eeglablist-request at sccn.ucsd.edu>
You can reach the person managing the list at
eeglablist-owner at sccn.ucsd.edu<mailto:eeglablist-owner at sccn.ucsd.edu>
When replying, please edit your Subject line so it is more specific
than "Re: Contents of eeglablist digest..."
Today's Topics:
1. ICA after PREP pipeline incl channel interpolation
(Alexandra Yvonne Vossen)
2. EEG neurofeedback for emotion (Amin Dehghani)
3. Fwd: Units in output of timefreq - wavelet normalization
(Norman Forschack)
4. Automation (Mike Urich)
5. Re: problem in BCILAB-1.1 version (brian baloch) (Alex Abe)
---------- Forwarded message ----------
From: Alexandra Yvonne Vossen
To: "eeglablist at sccn.ucsd.edu<mailto:eeglablist at sccn.ucsd.edu>" <eeglablist at sccn.ucsd.edu<mailto:eeglablist at sccn.ucsd.edu>>
Cc:
Date: Tue, 16 Aug 2016 17:18:01 +0100
Subject: [Eeglablist] ICA after PREP pipeline incl channel interpolation
Dear all,
I realise this is a popular question but I am really uncertain what happens to my data in my preprocessing pipeline. I am quite new to ICA/PCA decomposition.
First, the raw data are run through the PREP pipeline (in EEGLAB 13.5.4b), including the (spherical) interpolation of noisy channels.
Then after rejection of very noisy epochs I run ICA (for identification of artefact components) with EEG = pop_runica(EEG,'extended',1) %this is somebody else's code that I am re-using.
(Minor question: At this point I do not baseline correct each epoch, is this recommended?)
I get the info: "Data rank (115) is smaller than the number of channels (128). Input data size [115,525723] = 115 channels, 525723 frames/nAfter PCA dimension reduction,
finding 115 ICA components using extended ICA."
Here is where I am losing track. For this example, there are 116 non-interpolated channels and the data set was re-referenced to common reference before ICA.
So I guess this might be behind the rank reduction, although I am not sure how runica knows about this (where is such information retrieved?)
What precisely is used as the input data now? Any first 115 channels or only the non-interpolated channels?
What happens when the resulting (clean) components are projected back onto channel space if some of the channels are not actually included in the data set used to calculate the components?
Many thanks in advance,
Alexandra Vossen
PhD student
School of Psychology
College of Science & Engineering
University of Glasgow
---------- Forwarded message ----------
From: Amin Dehghani <dehghani at ut.ac.ir<mailto:dehghani at ut.ac.ir>>
To: <eeglablist at sccn.ucsd.edu<mailto:eeglablist at sccn.ucsd.edu>>
Cc:
Date: Tue, 16 Aug 2016 10:17:30 +0430
Subject: [Eeglablist] EEG neurofeedback for emotion
Dear all
I want to do some process of EEG neurofeedback for emotion regulation, if you can help me and give me data, I will appreciate you.
--
Best Regard
Amin Dehghani
EE Dept./ University of Tehran
---------- Forwarded message ----------
From: Norman Forschack <forschack at cbs.mpg.de<mailto:forschack at cbs.mpg.de>>
To: eeglablist <eeglablist at sccn.ucsd.edu<mailto:eeglablist at sccn.ucsd.edu>>
Cc:
Date: Tue, 16 Aug 2016 15:14:32 +0200
Subject: [Eeglablist] Fwd: Units in output of timefreq - wavelet normalization
Dear all,
below I forward a comment of Mike Cohen discussing wavelet normalization. He said, he will also upload a new lecturelet about the very topic on to his server probably by the end of the weekend.
Best
Norman
----- Forwarded Message -----
From: "Mike X Cohen" <mikexcohen at gmail.com<mailto:mikexcohen at gmail.com>>
To: forschack at cbs.mpg.de<mailto:forschack at cbs.mpg.de>
Sent: Montag, 15. August 2016 19:43:01
Subject: Fwd: [Eeglablist] Units in output of timefreq - wavelet normalization
Dear Norman,
I'm not on the eeglab list, but someone just forwarded this message to me, so I thought I'd add a few more cents to the pot. Feel free to forward this message to the eeglab list.
In general, wavelet normalization in the time domain is an extremely difficult problem. It depends on many factors, including the frequency, the width of the Gaussian, the number of time points, and even the sampling rate. It is quite remarkable that everyone has gotten it wrong (mea culpa -- I didn't work through this issue in my book, so it's wrong in there as well). That factor of "A" that people often use comes from a normalization of the integral and simply doesn't translate to our sampled digital analysis environment. I think it hasn't been a huge problem because most people apply a baseline normalization (dB or percent change), so then the original scale doesn't matter.
Anyway, the solution is surprisingly simple: Normalize the wavelet energy in the frequency domain, not in the time domain. For wavelet convolution, it would work something like this:
cmwX = fft(cmw,nConv); % nConvolution-point FFT, assume 'cmw' is a complex Morlet wavelet
cmwX = cmwX./max(cmwX); % normalize to max-1 spectral energy
dataX = fft(data,nConv); % nConvolution-point FFT
convolution_result = ifft( dataX.*cmwX ); % convolution result
The power and real part of the convolution result now has the same units as the original signal (e.g., microvolts). If you want to have the time-domain Morlet wavelet, you could take the ifft of cmwX (using nfft according to the wavelet, not according to N+M-1 for convolution).
Hope that helps,
Mike
---------- Forwarded message ----------
From: Norman Forschack < forschack at cbs.mpg.de<mailto:forschack at cbs.mpg.de> >
Date: Mon, Aug 15, 2016 at 6:19 PM
Subject: Re: [Eeglablist] Units in output of timefreq - wavelet normalization
To: Andreas Widmann < widmann at uni-leipzig.de<mailto:widmann at uni-leipzig.de> >
Cc: eeglablist < eeglablist at sccn.ucsd.edu<mailto:eeglablist at sccn.ucsd.edu> >
Dear all,
I'd like to contribute from the perspective of a discussion on Mike Cohen's Blog.
The initial question was, how to obtain an amplitude envelope of a given signal which has in fact the same amplitude as the given signal, right?
So coming from Nicos signal:
clear all
D = 4; % total signal duration in seconds.
sigD = 1; % duration of the test oscillation within the signal.
F = 10; % frequency of the test oscillationin Hz.
P = .25; % Phase of the test oscillation. 2 pi radians = 360 degrees
srate = 256; % sampling rate, i.e. N points per sec used to represent sine wave.
T = 1/srate; % sampling period, i.e. for this e.g. points at 1 ms intervals
time = T:T:D; % time vector.
sigpoints = length(time)/2 - (sigD*srate)/2:(length(time)/2 + (sigD*srate)/2)-1;
mysig = zeros(1,D*srate);
mysig(sigpoints) = sin(2*F*time(sigpoints)*pi+ 2*pi*P);
one way to obtain equal amplitudes is to normalize the wavelet by its maximal value within the frequency domain:
% some preparations
mysig = mysig';
ss = size(mysig);
cycles = 4;
dt = 1/srate;
sf = F/cycles;
s = 1./(2*pi*sf);
t = (-4*s:dt:4*s)';
nM = length(t);
halfMsiz = (nM-1)/2;
hz = linspace(0,srate/2,floor(nM/2)+1);
Ly = ss(1)*ss(2)+nM-1;
Ly2=pow2(nextpow2(ss(1)*ss(2)+nM-1));
% fft of signal
X=fft(reshape(mysig,ss(1)*ss(2),1), Ly2);
% building morlet wavelet (without a normalization factor)
m = exp(-t.^2/(2*s^2)).*exp(1i*2*pi*F.*t);
H = fft(m,Ly2); % fft of wavelet
% normalize wavelet spectrum
H = H./max(H);
y = ifft(X.*H,Ly2);
y = y(floor(halfMsiz+1):Ly-ceil(halfMsiz));
y_amp = 2* abs(y);
figure; plot(time,mysig,'b',time,y_amp,'r')
This seems to work for any combination of srate and cycles (except when number of cycles become large) because the signal spectrum is convolved by spectral wavelet values being maximally one.
I have not fully worked my way through Andreas' example. It normalizes the wavelet in time, not in frequency domain as here. So it is probably not comparable.
But doing time domain normalization within the lines above by just replacing the kernel formula:
m = exp(-t.^2/(2*s^2)).*exp(1i*2*pi*F.*t) ./ sqrt(srate); % unit energy
and commenting out the max(H) normalization, however, yields an amplitude envelope which is 2.5 times larger than the original signal amplitude and increases when the number of wavelet cycles is increased. But as Andreas suggestion referred to the dftfilt3 output, the matter becomes more complicated as this function uses it's own normalization factor:
A = 1./sqrt(s*sqrt(pi));
and there are problably some more relevant differences (not even going into the timefreq function).
In sum, this post may have fostered the general confusion (or at least mine) but for a more puristic approach to the matter of wavelet normalization, the lines above might be of some value (kudos to mike x cohen, of course).
All the best
Norman
----- On Aug 12, 2016, at 6:06 PM, Andreas Widmann widmann at uni-leipzig.de<mailto:widmann at uni-leipzig.de> wrote:
> Dear Niko,
>
> I’m puzzled by this difference since a long time too (and as you have written a
> book chapter on WT actually I would have hoped you could help resolving this
> issue ;).
>
> (Morlet) wavelet normalization always appeared somewhat arbitrary to me (as
> signal amplitude will never be directly reflected across the whole TF plane for
> peaky spectra/time courses). To my understanding the most common normalization
> for wavelets is unit energy (and Gabor). The help text for timefreq states that
> dftfilt3 is "exact Tallon Baudry“. TB (1998, JNeurosci) states that "Wavelets
> were normalized so that their total energy was 1,…“.
>
> The wavelets produced by dftfilt3 appear to always have an energy of srate (thus
> they are *not* unit energy normalized?!):
> [wavelet,cycles,freqresol,timeresol] = dftfilt3(F, ncycles, srate);
> E = sum( abs( wavelet{ 1 } ) .^ 2 )
> Consequently, to my understanding the correct „normfactor“ should be sqrt( E )
> or better sqrt( srate ).
>
> You might want to confirm by looking at the TF transform of the (real part of
> the) wavelet itself
> wavelet{ 1 } = wavelet{ 1 } / sqrt( srate ); % Unit energy normalize
> mysig = zeros(1,D*srate);
> delay = ceil( ( length( mysig ) - length( wavelet{ 1 } ) ) / 2 );
> mysig( delay:delay + length( wavelet{ 1 } ) - 1 ) = real( wavelet{ 1 } ) * 2;
> % Discard imag part
> normfactor = sqrt( srate );
> which should now have a peak amplitude of 1 (independent of sampling rate and
> signal duration).
>
> As the issue appears to be not only in EEGLAB but also other implementations, I
> always assumed my reasoning to be incorrect. Is it? What am I missing?
>
> Best,
> Andreas
>
>> Am 10.08.2016 um 11:58 schrieb Niko Busch < niko.busch at gmail.com<mailto:niko.busch at gmail.com> >:
>>
>> Dear Makoto (and everyone who replied to me personally regarding this post),
>>
>> thank you for your reply! I see that the result of the wavelet transform inside
>> the timefreq function is dependent on the length of the signal, which in turn
>> is dependent on the number of cycles and sampling rate. However, simply
>> dividing by the length of the wavelet does not seem to be the solution either.
>> I modified the code below by including a "normalization factor", which
>> currently is simply the length of the wavelet. Dividing the wavelet transformed
>> amplitudes by this factor gives the right order of magnitude, but the results
>> are still quite off. By increasing the sampling rate or number of cycles, the
>> results are even more off. I believe we are on the right track, but something
>> is still missing. Do you have any ideas?
>>
>> Cheers,
>> Niko
>>
>> %% Create sine wave
>> clear all
>> D = 4; % total signal duration in seconds.
>> sigD = 1; % duration of the test oscillation within the signal.
>> F = 10; % frequency of the test oscillationin Hz.
>> P = .25; % Phase of the test oscillation. 2 pi radians = 360 degrees
>> srate = 256; % sampling rate, i.e. N points per sec used to represent sine wave.
>> T = 1/srate; % sampling period, i.e. for this e.g. points at 1 ms intervals
>> t = [T:T:D]; % time vector.
>>
>> sigpoints = length(t)/2 - (sigD*srate)/2:(length(t)/2 + (sigD*srate)/2)-1;
>> mysig = zeros(1,D*srate);
>> mysig(sigpoints) = sin(2*F*t(sigpoints)*pi+ 2*pi*P);
>>
>> %% TF computation
>> ncycles = 4;
>>
>> [wavelet,cycles,freqresol,timeresol] = dftfilt3(F, ncycles, srate);
>> normfactor = length(wavelet{1});
>>
>> [tf, outfreqs, outtimes] = timefreq(mysig', srate, ...
>> 'cycles', ncycles, 'wletmethod', 'dftfilt3', 'freqscale', 'linear', ...
>> 'freqs', F);
>>
>> %% Plot
>> figure; hold all
>> plot(t,mysig);
>> plot(outtimes./1000,abs(tf)./normfactor)
>> xlabel('Time (seconds)');
>> ylabel('Amplitude');
>> legend('input signal', 'wavelet result')
>>
>> _______________________________________________
>> Eeglablist page: http://sccn.ucsd.edu/eeglab/eeglabmail.html
>> To unsubscribe, send an empty email to eeglablist-unsubscribe at sccn.ucsd.edu<mailto: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<mailto: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<mailto: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<mailto: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<mailto: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<mailto:eeglablist-request at sccn.ucsd.edu>
--
-----------------------------------------------------------------
Rasa Gulbinaite, PhD
Centre de Recherche Cerveau & Cognition (CerCo)
Toulouse (France)
e: rasa.gulbinaite at gmail.com<mailto:rasa.gulbinaite at gmail.com>
w: rasagulbinaite.com<http://rasagulbinaite.com>
--
Mike X Cohen, PhD
mikexcohen.com<http://mikexcohen.com>
---------- Forwarded message ----------
From: Mike Urich <michaelurich210 at gmail.com<mailto:michaelurich210 at gmail.com>>
To: <eeglablist at sccn.ucsd.edu<mailto:eeglablist at sccn.ucsd.edu>>
Cc:
Date: Mon, 15 Aug 2016 17:12:31 -0400
Subject: [Eeglablist] Automation
Hi all,
Is there an easy way to see what functions are being called as you click through eeglab? I have a workflow of importing data from a text file, filtering, removing the mean, and running ICA and then viewing a Component Scroll plot. I need to perform this sequence on many datasets and it’ll be the same process for each one, so it would be fantastic to be able to automate this. Does anyone have any suggestions?
Thanks!
Mike Urich
michaelurich210 at gmail.com<mailto:michaelurich210 at gmail.com>
---------- Forwarded message ----------
From: Alex Abe <nabra005 at odu.edu<mailto:nabra005 at odu.edu>>
To: <eeglablist at sccn.ucsd.edu<mailto:eeglablist at sccn.ucsd.edu>>
Cc:
Date: Tue, 16 Aug 2016 15:36:13 -0400
Subject: Re: [Eeglablist] problem in BCILAB-1.1 version (brian baloch)
Brian,
I had the same problem using BCILab in 2015 Matlab version. The problem went away when I downgraded to Matlab 2014a.
Alex
On Mon, Aug 15, 2016 at 3:00 PM, <eeglablist-request at sccn.ucsd.edu<mailto:eeglablist-request at sccn.ucsd.edu>> wrote:
Send eeglablist mailing list submissions to
eeglablist at sccn.ucsd.edu<mailto:eeglablist at sccn.ucsd.edu>
To subscribe or unsubscribe via the World Wide Web, visit
https://sccn.ucsd.edu/mailman/listinfo/eeglablist
or, via email, send a message with subject or body 'help' to
eeglablist-request at sccn.ucsd.edu<mailto:eeglablist-request at sccn.ucsd.edu>
You can reach the person managing the list at
eeglablist-owner at sccn.ucsd.edu<mailto:eeglablist-owner at sccn.ucsd.edu>
When replying, please edit your Subject line so it is more specific
than "Re: Contents of eeglablist digest..."
Today's Topics:
1. problem in BCILAB-1.1 version (brian baloch)
2. Re: Units in output of timefreq - wavelet normalization
(Norman Forschack)
3. uimenu issue (Quitadamo, Lucia)
4. BCI-Lab question (Alex Abe)
5. Re: headplot.m and 2014b -- can't seem to plot a head (Nick Wan)
6. Re: Trigger manipulation (Stephen Politzer-Ahles)
7. Re: Trigger manipulation (Tarik S Bel-Bahar)
8. Re: headplot.m and 2014b -- can't seem to plot a head
(Tarik S Bel-Bahar)
9. Re: Artifact rejection on continuous data (Tarik S Bel-Bahar)
10. SIFT resampling surrogate distributions with 1 trial
(Winslow Strong)
---------- Forwarded message ----------
From: brian baloch <brian.baloch at gmail.com<mailto:brian.baloch at gmail.com>>
To: <eeglablist at sccn.ucsd.edu<mailto:eeglablist at sccn.ucsd.edu>>
Cc:
Date: Sun, 14 Aug 2016 15:12:12 +0900
Subject: [Eeglablist] problem in BCILAB-1.1 version
Respected Sir,
Hope you would be fine. Dear Sir, I am PhD student in South Korea. I am working on BCILAB. Sir, I am experiencing one problem in BCILAB software during online MATLAB visualization. I am using MATLAB2015b. it gives an error of " referred data is non-existent".
chunk.smax = p.buffer.smax + size(chunk.data,2);
I have been experiencing this error many days. Sir if you tell me solution for this, I will be thankful to you.
Thanks.
Regards
[https://ssl.gstatic.com/ui/v1/icons/mail/images/cleardot.gif]
---------- Forwarded message ----------
From: Norman Forschack <forschack at cbs.mpg.de<mailto:forschack at cbs.mpg.de>>
To: Andreas Widmann <widmann at uni-leipzig.de<mailto:widmann at uni-leipzig.de>>
Cc: eeglablist <eeglablist at sccn.ucsd.edu<mailto:eeglablist at sccn.ucsd.edu>>
Date: Mon, 15 Aug 2016 18:19:58 +0200
Subject: Re: [Eeglablist] Units in output of timefreq - wavelet normalization
Dear all,
I'd like to contribute from the perspective of a discussion on Mike Cohen's Blog.
The initial question was, how to obtain an amplitude envelope of a given signal which has in fact the same amplitude as the given signal, right?
So coming from Nicos signal:
clear all
D = 4; % total signal duration in seconds.
sigD = 1; % duration of the test oscillation within the signal.
F = 10; % frequency of the test oscillationin Hz.
P = .25; % Phase of the test oscillation. 2 pi radians = 360 degrees
srate = 256; % sampling rate, i.e. N points per sec used to represent sine wave.
T = 1/srate; % sampling period, i.e. for this e.g. points at 1 ms intervals
time = T:T:D; % time vector.
sigpoints = length(time)/2 - (sigD*srate)/2:(length(time)/2 + (sigD*srate)/2)-1;
mysig = zeros(1,D*srate);
mysig(sigpoints) = sin(2*F*time(sigpoints)*pi+ 2*pi*P);
one way to obtain equal amplitudes is to normalize the wavelet by its maximal value within the frequency domain:
% some preparations
mysig = mysig';
ss = size(mysig);
cycles = 4;
dt = 1/srate;
sf = F/cycles;
s = 1./(2*pi*sf);
t = (-4*s:dt:4*s)';
nM = length(t);
halfMsiz = (nM-1)/2;
hz = linspace(0,srate/2,floor(nM/2)+1);
Ly = ss(1)*ss(2)+nM-1;
Ly2=pow2(nextpow2(ss(1)*ss(2)+nM-1));
% fft of signal
X=fft(reshape(mysig,ss(1)*ss(2),1), Ly2);
% building morlet wavelet (without a normalization factor)
m = exp(-t.^2/(2*s^2)).*exp(1i*2*pi*F.*t);
H = fft(m,Ly2); % fft of wavelet
% normalize wavelet spectrum
H = H./max(H);
y = ifft(X.*H,Ly2);
y = y(floor(halfMsiz+1):Ly-ceil(halfMsiz));
y_amp = 2* abs(y);
figure; plot(time,mysig,'b',time,y_amp,'r')
This seems to work for any combination of srate and cycles (except when number of cycles become large) because the signal spectrum is convolved by spectral wavelet values being maximally one.
I have not fully worked my way through Andreas' example. It normalizes the wavelet in time, not in frequency domain as here. So it is probably not comparable.
But doing time domain normalization within the lines above by just replacing the kernel formula:
m = exp(-t.^2/(2*s^2)).*exp(1i*2*pi*F.*t) ./ sqrt(srate); % unit energy
and commenting out the max(H) normalization, however, yields an amplitude envelope which is 2.5 times larger than the original signal amplitude and increases when the number of wavelet cycles is increased. But as Andreas suggestion referred to the dftfilt3 output, the matter becomes more complicated as this function uses it's own normalization factor:
A = 1./sqrt(s*sqrt(pi));
and there are problably some more relevant differences (not even going into the timefreq function).
In sum, this post may have fostered the general confusion (or at least mine) but for a more puristic approach to the matter of wavelet normalization, the lines above might be of some value (kudos to mike x cohen, of course).
All the best
Norman
----- On Aug 12, 2016, at 6:06 PM, Andreas Widmann widmann at uni-leipzig.de<mailto:widmann at uni-leipzig.de> wrote:
> Dear Niko,
>
> I’m puzzled by this difference since a long time too (and as you have written a
> book chapter on WT actually I would have hoped you could help resolving this
> issue ;).
>
> (Morlet) wavelet normalization always appeared somewhat arbitrary to me (as
> signal amplitude will never be directly reflected across the whole TF plane for
> peaky spectra/time courses). To my understanding the most common normalization
> for wavelets is unit energy (and Gabor). The help text for timefreq states that
> dftfilt3 is "exact Tallon Baudry“. TB (1998, JNeurosci) states that "Wavelets
> were normalized so that their total energy was 1,…“.
>
> The wavelets produced by dftfilt3 appear to always have an energy of srate (thus
> they are *not* unit energy normalized?!):
> [wavelet,cycles,freqresol,timeresol] = dftfilt3(F, ncycles, srate);
> E = sum( abs( wavelet{ 1 } ) .^ 2 )
> Consequently, to my understanding the correct „normfactor“ should be sqrt( E )
> or better sqrt( srate ).
>
> You might want to confirm by looking at the TF transform of the (real part of
> the) wavelet itself
> wavelet{ 1 } = wavelet{ 1 } / sqrt( srate ); % Unit energy normalize
> mysig = zeros(1,D*srate);
> delay = ceil( ( length( mysig ) - length( wavelet{ 1 } ) ) / 2 );
> mysig( delay:delay + length( wavelet{ 1 } ) - 1 ) = real( wavelet{ 1 } ) * 2;
> % Discard imag part
> normfactor = sqrt( srate );
> which should now have a peak amplitude of 1 (independent of sampling rate and
> signal duration).
>
> As the issue appears to be not only in EEGLAB but also other implementations, I
> always assumed my reasoning to be incorrect. Is it? What am I missing?
>
> Best,
> Andreas
>
>> Am 10.08.2016 um 11:58 schrieb Niko Busch <niko.busch at gmail.com<mailto:niko.busch at gmail.com>>:
>>
>> Dear Makoto (and everyone who replied to me personally regarding this post),
>>
>> thank you for your reply! I see that the result of the wavelet transform inside
>> the timefreq function is dependent on the length of the signal, which in turn
>> is dependent on the number of cycles and sampling rate. However, simply
>> dividing by the length of the wavelet does not seem to be the solution either.
>> I modified the code below by including a "normalization factor", which
>> currently is simply the length of the wavelet. Dividing the wavelet transformed
>> amplitudes by this factor gives the right order of magnitude, but the results
>> are still quite off. By increasing the sampling rate or number of cycles, the
>> results are even more off. I believe we are on the right track, but something
>> is still missing. Do you have any ideas?
>>
>> Cheers,
>> Niko
>>
>> %% Create sine wave
>> clear all
>> D = 4; % total signal duration in seconds.
>> sigD = 1; % duration of the test oscillation within the signal.
>> F = 10; % frequency of the test oscillationin Hz.
>> P = .25; % Phase of the test oscillation. 2 pi radians = 360 degrees
>> srate = 256; % sampling rate, i.e. N points per sec used to represent sine wave.
>> T = 1/srate; % sampling period, i.e. for this e.g. points at 1 ms intervals
>> t = [T:T:D]; % time vector.
>>
>> sigpoints = length(t)/2 - (sigD*srate)/2:(length(t)/2 + (sigD*srate)/2)-1;
>> mysig = zeros(1,D*srate);
>> mysig(sigpoints) = sin(2*F*t(sigpoints)*pi+ 2*pi*P);
>>
>> %% TF computation
>> ncycles = 4;
>>
>> [wavelet,cycles,freqresol,timeresol] = dftfilt3(F, ncycles, srate);
>> normfactor = length(wavelet{1});
>>
>> [tf, outfreqs, outtimes] = timefreq(mysig', srate, ...
>> 'cycles', ncycles, 'wletmethod', 'dftfilt3', 'freqscale', 'linear', ...
>> 'freqs', F);
>>
>> %% Plot
>> figure; hold all
>> plot(t,mysig);
>> plot(outtimes./1000,abs(tf)./normfactor)
>> xlabel('Time (seconds)');
>> ylabel('Amplitude');
>> legend('input signal', 'wavelet result')
>>
>> _______________________________________________
>> Eeglablist page: http://sccn.ucsd.edu/eeglab/eeglabmail.html
>> To unsubscribe, send an empty email to eeglablist-unsubscribe at sccn.ucsd.edu<mailto: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<mailto: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<mailto: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<mailto:eeglablist-request at sccn.ucsd.edu>
---------- Forwarded message ----------
From: "Quitadamo, Lucia" <l.quitadamo at aston.ac.uk<mailto:l.quitadamo at aston.ac.uk>>
To: "eeglablist at sccn.ucsd.edu<mailto:eeglablist at sccn.ucsd.edu>" <eeglablist at sccn.ucsd.edu<mailto:eeglablist at sccn.ucsd.edu>>
Cc:
Date: Sat, 13 Aug 2016 15:20:20 +0000
Subject: [Eeglablist] uimenu issue
Hello everybody,
I am creating an EEGLAB plugin for the analysis and detection of high-frequency oscillations (HFOs). I have created a set of functions which can be called by means of a list of uimenus which I already integrated in the EEGLAB interface. I would like to enable some of the uimenus only if some variables (created by different functions) are present in the workspace. Do you know how to do that? I have tried with “userdata” property, but I have been able just to disable the uimenu at the startup.
Thanks for your support.
Best,
Lucia
---------- Forwarded message ----------
From: Alex Abe <nabra005 at odu.edu<mailto:nabra005 at odu.edu>>
To: <eeglablist at sccn.ucsd.edu<mailto:eeglablist at sccn.ucsd.edu>>
Cc:
Date: Fri, 12 Aug 2016 13:55:17 -0400
Subject: [Eeglablist] BCI-Lab question
Hi,
I am running the search function in BCI_lab, and it is giving me an error which I am not able to solve. Can any BCI_lab expert help me out ? If I do not use search, the program compiles without an error and provides an output.
I am using Matlab 2014a version. I tried running on 2011a and it still gives me the same error. Do let me know if you need any other info.
My command line that calls the search function is as follows:
myapproach = {'CSP' 'SignalProcessing',{'EpochExtraction',[search(0:0.5:1.0),search(2.0:0.5:3.0)],'FIRFilter',[6 8 29 30]}};
The error I receive is below:
Attempt to reference field of non-structure array.
Error in ParadigmBaseSimplified>@(x)length(x.streams)>1 (line 168)
if any(cellfun(@(x)length(x.streams) > 1,collection))
Error in ParadigmBaseSimplified/calibrate (line 168)
if any(cellfun(@(x)length(x.streams) > 1,collection))
Error in bci_train/@(varargin)instance.calibrate(varargin{:})<mailto:bci_train/@(varargin)instance.calibrate(varargin%7b:%7d)>
Error in
bci_train>@(trainset,varargin)utl_complete_model(calibrate_func('collection',{trainset},varargin{:}),predict_func)
(line 704)
'trainer', @(trainset,varargin)
utl_complete_model(calibrate_func('collection',{trainset},varargin{:}),predict_func), ...
Error in utl_evaluate_fold (line 29)
model = opts.trainer(trainset,opts.args{:});
Error in par_beginschedule (line 157)
sched(t) = {{t,tasks{t}{1}(tasks{t}{2:end})}}; end
Error in par_schedule (line 60)
id = par_beginschedule(tasks,opts);
Error in utl_crossval (line 200)
results = par_schedule(tasks, 'engine',opts.engine_cv, 'pool',opts.pool, 'policy',opts.policy);
Error in utl_searchmodel>@(varargin)utl_crossval(data,nestedcv_ctrl,'args',varargin) (line 147)
objective_function = @(varargin) utl_crossval(data,nestedcv_ctrl,'args',varargin);
Error in hlp_wrapresults (line 51)
[a{1:len}] = f(varargin{:});
Error in par_beginschedule (line 157)
sched(t) = {{t,tasks{t}{1}(tasks{t}{2:end})}}; end
Error in par_schedule (line 60)
id = par_beginschedule(tasks,opts);
Error in utl_gridsearch (line 146)
outputs = par_schedule(tasks, 'engine',opts.engine_gs,'pool',opts.pool,'policy',opts.policy);
Error in utl_searchmodel (line 156)
[stats.bestidx,stats.inputs,stats.outputs] = utl_gridsearch(gridsearch_ctrl, opts.args{:});
Error in utl_nested_crossval>@(P,varargin)utl_searchmodel(P,opts,'scheme',opts.opt_scheme) (line 98)
opts.trainer = @(P,varargin) utl_searchmodel(P,opts,'scheme',opts.opt_scheme);
Error in utl_evaluate_fold (line 29)
model = opts.trainer(trainset,opts.args{:});
Error in par_beginschedule (line 157)
sched(t) = {{t,tasks{t}{1}(tasks{t}{2:end})}}; end
Error in par_schedule (line 60)
id = par_beginschedule(tasks,opts);
Error in utl_crossval (line 200)
results = par_schedule(tasks, 'engine',opts.engine_cv, 'pool',opts.pool, 'policy',opts.policy);
Error in utl_nested_crossval (line 102)
[measure,stats] = utl_crossval(data, opts, 'scheme',opts.eval_scheme);
Error in bci_train>run_computation (line 759)
[measure,stats] = utl_nested_crossval(opts.data, crossval_args{:});
Error in hlp_scope>make_func/@(f,a,frame__f1)feval(f,a{:})
Error in hlp_scope (line 51)
[varargout{1:nargout}] = func(f,varargin);
Error in bci_train (line 730)
[measure,model,stats] =
hlp_scope({'fingerprint_check',0,'fingerprint_create',0}, at run_computation,opts,crossval_args);
Alex
---------- Forwarded message ----------
From: Nick Wan <nickwan at aggiemail.usu.edu<mailto:nickwan at aggiemail.usu.edu>>
To: EEGLAB List <eeglablist at sccn.ucsd.edu<mailto:eeglablist at sccn.ucsd.edu>>
Cc:
Date: Fri, 12 Aug 2016 20:48:36 -0600
Subject: Re: [Eeglablist] headplot.m and 2014b -- can't seem to plot a head
Hi all, I figured it out. Wasn't converting my angles file right!
On Fri, Aug 12, 2016 at 3:23 AM, Nick Wan <nickwan at aggiemail.usu.edu<mailto:nickwan at aggiemail.usu.edu>> wrote:
Hi all,
I tried to run
>>headplot example
It ran, but the plot came up blank. I can rotate the plot, but it's just an empty plot, no head model or anything. I'm running 13.4.3b on r2014b. EEGLAB is at the top of my path list, followed by MATLAB toolboxes.
I tried loading in the sample dataset but that also didn't render the 3D plot.
Any help would be much appreciated!
--
Nick Wan
Graduate Student
Utah State University Psychology Department
2810 Old Main Hill
Logan, UT 84322
Office: HSRC 004
Phone: 435-554-8788<tel:435-554-8788>
Blog: truebra.in<http://truebra.in>
--
Nick Wan
Graduate Student
Utah State University Psychology Department
2810 Old Main Hill
Logan, UT 84322
Office: HSRC 004
Phone: 435-554-8788<tel:435-554-8788>
Blog: truebra.in<http://truebra.in>
---------- Forwarded message ----------
From: Stephen Politzer-Ahles <politzerahless at gmail.com<mailto:politzerahless at gmail.com>>
To: "Haggarty, Connor" <C.J.Haggarty at 2014.ljmu.ac.uk<mailto:C.J.Haggarty at 2014.ljmu.ac.uk>>
Cc: "eeglablist at sccn.ucsd.edu<mailto:eeglablist at sccn.ucsd.edu>" <eeglablist at sccn.ucsd.edu<mailto:eeglablist at sccn.ucsd.edu>>
Date: Sat, 13 Aug 2016 06:08:07 +0800
Subject: Re: [Eeglablist] Trigger manipulation
EEGLAB doesn't have built-in function for this, but ERPLAB's binlister can do it. Alternatively, you can just write a MATLAB loop that does it; there should be an example or two in some of my previous messages on this list.
Best,
Steve
---
Stephen Politzer-Ahles
University of Oxford
Language and Brain Lab
Faculty of Linguistics, Phonetics & Philology
http://users.ox.ac.uk/~cpgl0080/<http://users.ox.ac.uk/%7Ecpgl0080/>
On Sat, Aug 13, 2016 at 6:07 AM, Stephen Politzer-Ahles <stephen.politzer-ahles at ling-phil.ox.ac.uk<mailto:stephen.politzer-ahles at ling-phil.ox.ac.uk>> wrote:
EEGLAB doesn't have built-in function for this, but ERPLAB's binlister can do it. Alternatively, you can just write a MATLAB loop that does it; there should be an example or two in some of my previous messages on this list.
Best,
Steve
---
Stephen Politzer-Ahles
University of Oxford
Language and Brain Lab
Faculty of Linguistics, Phonetics & Philology
http://users.ox.ac.uk/~cpgl0080/
On Fri, Aug 12, 2016 at 9:07 PM, Haggarty, Connor <C.J.Haggarty at 2014.ljmu.ac.uk<mailto:C.J.Haggarty at 2014.ljmu.ac.uk>> wrote:
Hi,
I have a question about changing trigger codes for epochs.
I am completing a study with somatosensory stimuli.
One trigger is sent by E-Prime which codes the speed of stroking touch (delivered by the experimenter), sometime after this a trigger is sent from a laser showing the exact point at which the experimenter first touches the participant.
The laser is the precise onset of touch however, this code is the same each time. In order to epoch and bin these data properly I need a way to code the laser trigger so that it is an addition (or some calculation) of the previous (stimulus type) trigger and the precise stimulus laser onset trigger.
Is there some function in EEGLab or some coding that will allow me to do this?
Thank you
Connor
________________________________
Important Notice: the information in this email and any attachments is for the sole use of the intended recipient(s). If you are not an intended recipient, or a person responsible for delivering it to an intended recipient, you should delete it from your system immediately without disclosing its contents elsewhere and advise the sender by returning the email or by telephoning a number contained in the body of the email. No responsibility is accepted for loss or damage arising from viruses or changes made to this message after it was sent. The views contained in this email are those of the author and not necessarily those of Liverpool John Moores University.
_______________________________________________
Eeglablist page: http://sccn.ucsd.edu/eeglab/eeglabmail.html
To unsubscribe, send an empty email to eeglablist-unsubscribe at sccn.ucsd.edu<mailto: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<mailto:eeglablist-request at sccn.ucsd.edu>
---------- Forwarded message ----------
From: Tarik S Bel-Bahar <tarikbelbahar at gmail.com<mailto:tarikbelbahar at gmail.com>>
To: "Haggarty, Connor" <C.J.Haggarty at 2014.ljmu.ac.uk<mailto:C.J.Haggarty at 2014.ljmu.ac.uk>>
Cc: "eeglablist at sccn.ucsd.edu<mailto:eeglablist at sccn.ucsd.edu>" <eeglablist at sccn.ucsd.edu<mailto:eeglablist at sccn.ucsd.edu>>
Date: Sat, 13 Aug 2016 21:35:54 -0400
Subject: Re: [Eeglablist] Trigger manipulation
Hello Connor,some notes below, best wishes.
*****************************************************************************
If you haven't had a chance to, google eeglablist for the past
mentions and suggestions regarding changing events. "eeglablist + edit
events". There should be some code examples there too. Here are some
recent ones. Check out the function eeg_addnewevents too.
https://sccn.ucsd.edu/pipermail/eeglablist/2015/009246.html
https://sccn.ucsd.edu/pipermail/eeglablist/2015/009265.html
There's a range of ways to edit the events, including through the GUI,
by importing events, and via scripts that modify the EEG.event
structure. These should all be documented on the wiki and eeglablist.
You can go to Edit > EEG events, modify or add an event, and after
closing the gui window for event editing, type eegh to see the Event
Editing command script that was run, which you can copy, modify.
You'll also want to check help documentation for the function that
gets run. For example one can create a loop in a small script that go
through each of the events, has a counter for each kind of event
you're looking for, and then modifies the label. You could do it event
by event in loop, or you could have variables to hold the times and
labels, and then use the eeg_addnewevents function to update the whole
event structure.
Google the following eeglab wiki pages.
Chapter_03:_Event_Processing
A02: Importing Event Epoch Info - SCCN
See also the IV.4.3.EEG.event portion of the eeglab tutorial mirror here:
cognitrn.psych.indiana.edu/busey/temp/eeglabtutorial4.301/scripttut/script_tutorial.html#EEG.event<http://cognitrn.psych.indiana.edu/busey/temp/eeglabtutorial4.301/scripttut/script_tutorial.html#EEG.event>:
On Fri, Aug 12, 2016 at 9:07 AM, Haggarty, Connor
<C.J.Haggarty at 2014.ljmu.ac.uk<mailto:C.J.Haggarty at 2014.ljmu.ac.uk>> wrote:
> Hi,
>
>
>
> I have a question about changing trigger codes for epochs.
>
> I am completing a study with somatosensory stimuli.
>
> One trigger is sent by E-Prime which codes the speed of stroking touch (delivered by the experimenter), sometime after this a trigger is sent from a laser showing the exact point at which the experimenter first touches the participant.
>
> The laser is the precise onset of touch however, this code is the same each time. In order to epoch and bin these data properly I need a way to code the laser trigger so that it is an addition (or some calculation) of the previous (stimulus type) trigger and the precise stimulus laser onset trigger.
>
> Is there some function in EEGLab or some coding that will allow me to do this?
>
>
>
> Thank you
>
>
>
> Connor
>
> ________________________________
> Important Notice: the information in this email and any attachments is for the sole use of the intended recipient(s). If you are not an intended recipient, or a person responsible for delivering it to an intended recipient, you should delete it from your system immediately without disclosing its contents elsewhere and advise the sender by returning the email or by telephoning a number contained in the body of the email. No responsibility is accepted for loss or damage arising from viruses or changes made to this message after it was sent. The views contained in this email are those of the author and not necessarily those of Liverpool John Moores University.
> _______________________________________________
> Eeglablist page: http://sccn.ucsd.edu/eeglab/eeglabmail.html
> To unsubscribe, send an empty email to eeglablist-unsubscribe at sccn.ucsd.edu<mailto: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<mailto:eeglablist-request at sccn.ucsd.edu>
---------- Forwarded message ----------
From: Tarik S Bel-Bahar <tarikbelbahar at gmail.com<mailto:tarikbelbahar at gmail.com>>
To: Nick Wan <nickwan at aggiemail.usu.edu<mailto:nickwan at aggiemail.usu.edu>>
Cc: EEGLAB List <eeglablist at sccn.ucsd.edu<mailto:eeglablist at sccn.ucsd.edu>>
Date: Sat, 13 Aug 2016 22:03:56 -0400
Subject: Re: [Eeglablist] headplot.m and 2014b -- can't seem to plot a head
Hello Nick, there may be a problem with that example, feel free to report it on eeglab bugzilla. The steps below take 5 minutes and give you a headplot with sample data you can find in your full eeglab folder. As usual, googling eeglablist and reviewing the eeglab tutorial for your topics can be helpful.
***************************************************************************
The headplot requires co-registration of the correct channels with the head, for the currently loaded file. The loaded data also needs to be epoched data, I believe.
If you haven't had chance to yet, review the following pages and similar pages: https://sccn.ucsd.edu/wiki/Chapter_06:_Data_Averaging
This shows you how to make plots with tutorial data, an important step.
To get 3d headplots now quickly and easily, do the following steps:
Go to the "sample data" folder in your eeglab folder.
Load the file "eeglab_data_epochs_ica.set"
In case you haven't tried the full tutorial yet, this file is used in the online eeglab tutorial pages.
Then try either of the following from the GUI
Plot > Erp Map Series > 3D
Then go to Plot > Components > 3D
You need to specify a specific time or a specific component in the respective gui window. But leave everything else with defaults.
In both cases (ERPS or Components) you should see a Tailarach transformation matrix already in the GUI window that pops up. You can click Manual registration if you want to show yourself that the electrode locations are properly co-registered with the head (they are).
This is the transformation matrix that should be in there:
-0.355789 -6.33688 12.3705 0.0533239 0.0187461 -1.55264 1.06367 0.987721 0.932694
Then click OK, and a "example" figure should pop up! Yes ?
*Remember to check google eeglablist and check the online tutorial for your topics of interest.
---------- Forwarded message ----------
From: Tarik S Bel-Bahar <tarikbelbahar at gmail.com<mailto:tarikbelbahar at gmail.com>>
To: <colivero at sri.utoronto.ca<mailto:colivero at sri.utoronto.ca>>
Cc: eeglablist <eeglablist at sccn.ucsd.edu<mailto:eeglablist at sccn.ucsd.edu>>
Date: Sat, 13 Aug 2016 22:07:00 -0400
Subject: Re: [Eeglablist] Artifact rejection on continuous data
Hello,
If you're using ERPLAB primarily, you'll want to check with the ERPLAB
user list.
See link below for info on basic artifact rejection in eeglab
https://sccn.ucsd.edu/wiki/Chapter_01:_Rejecting_Artifacts
There are also multiple options for data rejection available inside
eeglab, both traditional and ICA based.
Cheers!
On Thu, Aug 11, 2016 at 3:14 PM, <colivero at sri.utoronto.ca<mailto:colivero at sri.utoronto.ca>> wrote:
> Hello,
>
> I am doing artifact rejection on continuous data using ERPLAB. When I run
> it, it shows me the scroll plot for me to go over and double check with
> the marked areas that exceeded the threshold I choose. Is there a way to
> deselect/unreject some of these marked for rejection areas? I know that if
> you click on the area it deselects but when I press reject it still
> rejects the areas I deselected. Sometimes it marks areas around my event
> markers but I do not want these deleted.
>
> Any help is greatly appreciated.
>
> Thank you
>
> _______________________________________________
> Eeglablist page: http://sccn.ucsd.edu/eeglab/eeglabmail.html
> To unsubscribe, send an empty email to eeglablist-unsubscribe at sccn.ucsd.edu<mailto: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<mailto:eeglablist-request at sccn.ucsd.edu>
---------- Forwarded message ----------
From: Winslow Strong <winslow.strong at gmail.com<mailto:winslow.strong at gmail.com>>
To: <eeglablist at sccn.ucsd.edu<mailto:eeglablist at sccn.ucsd.edu>>
Cc:
Date: Sat, 13 Aug 2016 16:57:26 -0700
Subject: [Eeglablist] SIFT resampling surrogate distributions with 1 trial
I'd like to use a resampling technique (e.g. bootstrap) to get p-values and test stats for SIFT connectivity metrics for 1 subject across n conditions.
This is a steady-state condition study, hence there's only 1 trial per condition. I'm trying to analyze whether certain connectivity metrics (i.e. their averages over a condition) are statistically significantly different across the conditions. I was under the impression I could use SIFT's surrogate distribution generator to obtain the surrogate distribution for these calculations, but when I run that from the GUI for bootstrap, I get the error:
"Unable to compute bootstrap distributions for a single trial"
Is this surrogate function only designed to do boostrapping over trials? Or is there a way to do it over windows within a condition?
_______________________________________________
eeglablist mailing list eeglablist at sccn.ucsd.edu<mailto:eeglablist at sccn.ucsd.edu>
Eeglablist page: http://www.sccn.ucsd.edu/eeglab/eeglabmail.html
To unsubscribe, send an empty email to eeglablist-unsub at sccn.ucsd.edu<mailto:eeglablist-unsub at sccn.ucsd.edu>
To switch to non-digest mode, send an empty email to eeglablist-nodigest at sccn.ucsd.edu<mailto:eeglablist-nodigest at sccn.ucsd.edu>
_______________________________________________
eeglablist mailing list eeglablist at sccn.ucsd.edu<mailto:eeglablist at sccn.ucsd.edu>
Eeglablist page: http://www.sccn.ucsd.edu/eeglab/eeglabmail.html
To unsubscribe, send an empty email to eeglablist-unsub at sccn.ucsd.edu<mailto:eeglablist-unsub at sccn.ucsd.edu>
To switch to non-digest mode, send an empty email to eeglablist-nodigest at sccn.ucsd.edu<mailto:eeglablist-nodigest at sccn.ucsd.edu>
--
James Jones-Rounds
Laboratory Manager
Human Development EEG and Psychophysiology (HEP) Laboratory,
Department of Human Development,
--------------------------------------------
Cornell University | Ithaca, NY
607-255-9883
eeg at cornell.edu<mailto:eeg at cornell.edu>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://sccn.ucsd.edu/pipermail/eeglablist/attachments/20160817/0b87c185/attachment.html>
More information about the eeglablist
mailing list