<html>
<head>
<meta content="text/html; charset=ISO-8859-1"
http-equiv="Content-Type">
</head>
<body text="#000000" bgcolor="#FFFFFF">
Hi Becky,<br>
<br>
My previous answers were sent directly to you, not to the list.
Since the list is moderated and there are large time differences
among you, me, and the moderators it would be a while before you saw
my answer, if at all. It was a simple answer so I thought you'd
appreciate getting it sooner. The other readers are probably
confused about what code your reply is referring to. Sorry about
that.<br>
<br>
Thank you for noticing those fields I forgot to change.<br>
<br>
As for component rejection, you can indicate which components to
reject using MERGED_SET without actually rejecting them. This will
create a field in MERGED_SET.reject called gcompreject. Then copy
that field over to your EEG1, EEG2, and EEG3 reject structs.<br>
<br>
if ~isfield(EEG1,'reject') || ~isstruct(EEG1.reject)<br>
EEG1.reject =
struct('gcompreject',MERGED_SET.reject.gcompreject);<br>
else<br>
EEG1.reject.gcompreject = MERGED_SET.reject.gcompreject;<br>
end<br>
%Repeat for EEG2 and EEG3<br>
%I also like to run a eeg_checkset anytime I change the EEG
structure directly though I can no longer remember exactly why or
what it does.<br>
EEG1= eeg_checkset(EEG1);<br>
<br>
You should now be able to use the GUI or EEG = pop_subcomp(EEG, [],
0); to subtract those marked components from your channel data.<br>
<br>
Finally, while my original reply used EEG1, EEG2, EEG3 for
simplicity, it now seems like it would be better to put your EEG
structs into a cell array and loop over the array.<br>
i.e.<br>
EEGS{1} = EEG1;<br>
EEGS{2} = EEG2;<br>
EEGS{3} = EEG3;<br>
for set_ix = 1:length(EEGS)<br>
%Do you work on EEGS{set_ix}<br>
end<br>
<br>
Cheers,<br>
Chad<br>
<br>
<div class="moz-cite-prefix">On 5/9/2013 12:23 AM, Becky Prince
wrote:<br>
</div>
<blockquote
cite="mid:CANd5Z7cE0uULR5bNcD01rKwKxc42vbhQ9WS3HfCd4bZcRw24bQ@mail.gmail.com"
type="cite">
<div>Hi all,</div>
<div><br>
</div>
Thanks to everyone for the responses!
<div><br>
</div>
<div>I tried Chad's solution first, which involved manually
concatenating the the 3 epoched data sets into the data field of
an EEG structure, then running ICA on the concatenated set and
copying the ICA results into the ICA fields in the epoched sets.
This solution works but I ran into a minor problem that's worth
mentioning for anyone else who wants to do this following the
solution previously posted by Chad. When one of the data sets
is copied into TEMP and all of the epoched data is added to
TEMP.data, a few other fields in TEMP need to be changed
(otherwise they retain the data from the copied epoched set, and
the ICA command produces an error). </div>
<div><br>
</div>
<div>TEMP.trials = 1;</div>
<div>TEMP.pnts = size(TEMP.data,2);</div>
<div>TEMP.xmin = 0;</div>
<div>TEMP.xmax = (TEMP.pnts/TEMP.srate);</div>
<div>TEMP.times = [];</div>
<div><br>
</div>
<div>Mikolaj and Arno, thank you for the advice on converting the
epochs of different lengths to continuous data. Mikolaj you
said you thought there was an EEGLAB function to 'de-epoch' the
data, so I'm guessing you were thinking of
'eeg_epoch2continuous' which Arno has also mentioned. In case
anyone else is interested, I found that you can solve this
problem with the eeg_epoch2continuous function in the following
way:</div>
<div><br>
</div>
<div>% epoched data set 1 = EEG1, epoched data set 2 = EEG2,
epoched data set 3 = EEG3</div>
<div>% convert epoched data to continuous in order to merge for
ICA</div>
<div>CEEG1 = eeg_epoch2continuous(EEG1); </div>
<div>CEEG2 = eeg_epoch2continuous(EEG2);</div>
<div>CEEG3 = eeg_epoch2continuous(EEG3);</div>
<div>MERGED_SET = pop_mergeset(CEEG1, CEEG2);</div>
<div>MERGED_SET = pop_mergeset(MERGED_SET, CEEG3); % pop_mergeset
only works with 2 INEEG arguments</div>
<div>% run ICA on the merged data</div>
<div>MERGED_SET = pop_runica(MERGED_SET,'extended',1);</div>
<div>% copy ICA results into EEG1, EEG2 and EEG3 (see earlier post
by Chadwick Boulay)</div>
<div><br>
</div>
<div>Mikolaj thank you for the link to the 'epoch_linearize'
function as well. I haven't tried it yet but plan to as it
looks very useful!</div>
<div><br>
</div>
<div>My last question about this is how to do component rejection
on these data. When I first tried this I first did component
rejection on the MERGED_SET, then copied the ICA fields from the
merged data set into the ICA fields for each epoched data set
(EEG1, EEG2, EEG3). However I'm not sure if that actually
worked, so I think what I might have to do is: 1) copy the ICA
fields form the MERGED_SET into the epoched sets, 2) do
component rejection on one of the sets, 3) run the component
rejection command on all epoched data sets using the component
numbers identified for rejection. Is that right?</div>
<div><br>
</div>
<div>Best wishes and thanks again for the help!</div>
<div>Becky</div>
<div><br>
</div>
<div><br>
</div>
<div><br>
</div>
<div class="gmail_quote">On 7 May 2013 04:18, Arnaud Delorme <span
dir="ltr"><<a moz-do-not-send="true"
href="mailto:arno@ucsd.edu" target="_blank">arno@ucsd.edu</a>></span>
wrote:<br>
<blockquote class="gmail_quote" style="margin:0 0 0
.8ex;border-left:1px #ccc solid;padding-left:1ex">
<div style="word-wrap:break-word">The command line
function eeg_epoch2continuous also allows to transform EEG
epochs into a continuous dataset.
<div>
Best,</div>
<div><br>
</div>
<div>Arno</div>
<div>
<div>
<div><br>
<div>
<div>On 5 May 2013, at 16:06, Mikołaj Magnuski
wrote:</div>
<br>
<blockquote type="cite">
<div dir="ltr">
<div class="gmail_extra">It seems I didn't send
my last message to eeglablist, it can be found
at the end of this one.</div>
<div class="gmail_extra"><br>
Anyway, Becky, I have found and uploaded the
beforementioned function<br>
to <a moz-do-not-send="true"
href="https://sites.google.com/site/analizasygnalow/zasoby/nasze-narzedzia"
target="_blank">https://sites.google.com/site/analizasygnalow/zasoby/nasze-narzedzia</a><br>
the function name is epoch_linearize.m and it
is called this way:<br>
newEEG = epoch_linearize(EEG);<br>
<br>
it does not retain events, but you don't need
these for ICA.<br>
For linearizing multiple files you can use
linearize_all_eeg<br>
(also on the page) like this:</div>
<div class="gmail_extra">
ALLEEG = linearize_all_eeg(files, folder);</div>
<div class="gmail_extra">'files' is assumed to
be a cell matrix of file names<br>
(for example: {'subj01.set', 'subj02.set'}),
while 'folder'<br>
a string defining filepath (like:
'C:\DATA\Exp1_2012\').<br>
<br>
You would still have to save these files and
later<br>
join relevant ones. I had a script for this
too<br>
where you could specify with regular
expressions<br>
what files should be linearized and then
concatenated, </div>
<div class="gmail_extra">but I didn't transform
it into a more universal function, </div>
<div class="gmail_extra">I'll try to do this
soon if you would find it useful.<br>
<br>
If you have any troubles using these functions
-<br>
let me know!<br>
<br>
<br>
<div class="gmail_quote">
<blockquote class="gmail_quote"
style="margin:0px 0px 0px
0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex">
<p>You can also transform all your subject
subfiles (epochs of different length)
into continuous signals (instead of
epochs you can place 'boundary' events,
although it is not necessary for ICA) -
such that you have one file per subject.
Then you would perform ICA and copy ica
weights to your original epoched files.
I think there is a function in EEGlab to
'de-epoch' the data (Arno, Makoto, am I
correct?). Anyway - I wrote such
function some time ago, so I'll see if I
can still find it. The function did not
retain events from the original dataset,
but you do not need this for ICA. <br>
(there is yet another option - you could
epoch the data into small chunks of 1-s
long or so, reject epochs containing
artifacts or signal of no interest, then
perform ICA and copy ica weights to your
normally epoched data. I too have a
function for this, which allows for
several useful options like automatic
rejection of windows (these small
epochs) that are too far from cerain
events or event sequences - so that you
wouldn't have to manually click and
reject windows ocurring in breaks or
during a task you are not interested in.
Unfortunatelly the function help is
still in polish - but the basic options
are easy to explain in one short mail -
that is if you think you will find such
function useful)<br>
</p>
<div class="gmail_quote">30 kwi 2013
19:24, "Becky Prince" <<a
moz-do-not-send="true"
href="mailto:becky.prince@york.ac.uk"
target="_blank">becky.prince@york.ac.uk</a>>
napisał(a):<br type="attribution">
<blockquote class="gmail_quote"
style="margin:0px 0px 0px
0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex">
<div>
<div>
Dear EEGLAB users,
<div><br>
</div>
<div>I have a question about the
best artifact detection and ICA
procedures for data sets with
multiple epoch types of
different lengths. </div>
<div><br>
</div>
<div>Each trial in my EEG task is
made up of 3 non-overlapping
epochs of interest: 1) 4
seconds, 2) either 1.5 or 2.5
seconds, 3) 2.5 seconds. For my
previous ERP experiments I've
used the following data
processing procedure: epoch the
data, reject bad epochs, run ICA
on remaining epochs, reject ICA
components, analyze data in
channel space. For my current
experiment (with 3 epochs per
trial), I haven't been able to
run ICA on all of the epoched
data at once because, as soon as
I epoch the data, it is split
into a separate data set. I'm
fairly sure that these 3
separate epoched data sets
cannot be merged/appended for a
single ICA run because the
epochs are of differing lengths.</div>
<div><br>
</div>
<div>I've come up with 2 different
protocols for processing the
individual data sets. I'm not
sure which is better or if I'm
overlooking other options.</div>
<div><br>
</div>
<div>Solution 1: artifact
rejection and ICA on continuous
data</div>
<div>1) reject artifacts in
continuous data</div>
<div>2) run ICA on continuous data</div>
<div>3) reject ICA components</div>
<div>4) epoch the data (creates 3
separate data sets)</div>
<div>5) analyze data in channel
space</div>
<div><br>
</div>
<div>Solution 2: artifact
rejection and ICA on epoched
data</div>
<div>1) epoch the data (creates 3
separate data sets)</div>
<div>Then for each of the 3
epoched data sets: </div>
<div>2) reject epochs</div>
<div>
3) run ICA on remaining epochs</div>
<div>4) reject ICA components</div>
<div>5) analyze data in channel
space </div>
<div><br>
</div>
<div>My problem with solution 1 is
that it is much more time
consuming to detect the
artifactual sections of
continuous data than it is to
detect and reject bad epochs.
Also, ICA seems to run more
slowly in this case (even after
taking into account the
differences in the size of the
continuous and epoched data
sets). My problem with solution
2 is that it doesn't seem right
to run ICA separately for each
epoched data set for the same
subject/session. Because I am
doing within-subject comparisons
among the 3 trial segments, I'm
concerned about producing
artificial differences among
these epochs as a result of
differences in the ICA
decomposition and component
rejection.</div>
<div><br>
</div>
<div>Sorry for the long question.
Can anyone tell me what they
would recommend? Any
suggestions and/or criticisms of
my current processing steps
would be very helpful!</div>
<div><br>
</div>
<div>Many thanks,</div>
<div>Becky</div>
<div>PhD Candidate</div>
<div>Department of Psychology</div>
<div>University of York</div>
<div><br>
</div>
<br>
</div>
</div>
_______________________________________________<br>
Eeglablist page: <a
moz-do-not-send="true"
href="http://sccn.ucsd.edu/eeglab/eeglabmail.html"
target="_blank">http://sccn.ucsd.edu/eeglab/eeglabmail.html</a><br>
To unsubscribe, send an empty email to
<a moz-do-not-send="true"
href="mailto:eeglablist-unsubscribe@sccn.ucsd.edu"
target="_blank">eeglablist-unsubscribe@sccn.ucsd.edu</a><br>
For digest mode, send an email with
the subject "set digest mime" to <a
moz-do-not-send="true"
href="mailto:eeglablist-request@sccn.ucsd.edu"
target="_blank">eeglablist-request@sccn.ucsd.edu</a><br>
</blockquote>
</div>
</blockquote>
</div>
<br>
</div>
</div>
_______________________________________________<br>
Eeglablist page: <a moz-do-not-send="true"
href="http://sccn.ucsd.edu/eeglab/eeglabmail.html"
target="_blank">http://sccn.ucsd.edu/eeglab/eeglabmail.html</a><br>
To unsubscribe, send an empty email to <a
moz-do-not-send="true"
href="mailto:eeglablist-unsubscribe@sccn.ucsd.edu"
target="_blank">eeglablist-unsubscribe@sccn.ucsd.edu</a><br>
For digest mode, send an email with the subject
"set digest mime" to <a moz-do-not-send="true"
href="mailto:eeglablist-request@sccn.ucsd.edu"
target="_blank">eeglablist-request@sccn.ucsd.edu</a></blockquote>
</div>
<br>
</div>
</div>
</div>
</div>
<br>
_______________________________________________<br>
Eeglablist page: <a moz-do-not-send="true"
href="http://sccn.ucsd.edu/eeglab/eeglabmail.html"
target="_blank">http://sccn.ucsd.edu/eeglab/eeglabmail.html</a><br>
To unsubscribe, send an empty email to <a
moz-do-not-send="true"
href="mailto:eeglablist-unsubscribe@sccn.ucsd.edu"
target="_blank">eeglablist-unsubscribe@sccn.ucsd.edu</a><br>
For digest mode, send an email with the subject "set digest
mime" to <a moz-do-not-send="true"
href="mailto:eeglablist-request@sccn.ucsd.edu"
target="_blank">eeglablist-request@sccn.ucsd.edu</a><br>
</blockquote>
</div>
<br>
<br>
<fieldset class="mimeAttachmentHeader"></fieldset>
<br>
<pre wrap="">_______________________________________________
Eeglablist page: <a class="moz-txt-link-freetext" href="http://sccn.ucsd.edu/eeglab/eeglabmail.html">http://sccn.ucsd.edu/eeglab/eeglabmail.html</a>
To unsubscribe, send an empty email to <a class="moz-txt-link-abbreviated" href="mailto:eeglablist-unsubscribe@sccn.ucsd.edu">eeglablist-unsubscribe@sccn.ucsd.edu</a>
For digest mode, send an email with the subject "set digest mime" to <a class="moz-txt-link-abbreviated" href="mailto:eeglablist-request@sccn.ucsd.edu">eeglablist-request@sccn.ucsd.edu</a></pre>
</blockquote>
<br>
</body>
</html>