Hi Scott et al.,<br><br>Sorry for the delay in responding - I've been swamped. My comments follow below. I cc'ed some of the other authors, if they want to chime in or correct me.<br><br><div class="gmail_quote">On Tue, Oct 11, 2011 at 11:40 AM, Scott Makeig <span dir="ltr"><<a href="mailto:smakeig@gmail.com">smakeig@gmail.com</a>></span> wrote:<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex;">Alex,<div><br></div><div>Thanks much for providing those references on EEG/EMG source separation. I would welcome to this list messages (from anyone) about any papers bearing on the use of EEGLAB and/or its tools. </div>
<div>
<br></div><div>I would like to comment on one sentence in the 2011 paper in which you justify your procedure of reducing your 128-channel data to a 64-dimension principal subspace by saying, "<i>Preliminary visual inspection of the 128 components extracted from the native electrode array indicated overfitting, evidenced by the fission of artifactual signals across components (e.g., ocular and cardiac artifacts loaded onto an excessive number of components; see also Viola et al., 2009)</i>."</div>
<div><br></div></blockquote><div><br>Historical summary - Yes, at the outset of the project (<a href="http://psyphz.psych.wisc.edu/~shackman/mcmenamin_shackman_davidson_ni2010.pdf">http://psyphz.psych.wisc.edu/~shackman/mcmenamin_shackman_davidson_ni2010.pdf</a>), we realized that people in the Davidson lab were tackling ICA somewhat differently. Some were extracting ICs for the full matrix (128 channels), others were using PCA to reduce the number of dimensions -- the latter was often in the context of removing small amounts of artifact from resting/tonic/baseline EEG. At the time, I believe 24 or 48 components were being extracted based on an earlier round of visualization. So, we sat down at a VERY large conference table and, using hardcopies, visually compared the maps and timeseries for all of the Ss as a function of the number of PCs. To our eyes, it looked like we were getting the cleanest source separations for 64 components...with what looked like fusion for more extreme dimension reduction, and fission for full rank extractions. <br>
<br>Somewhat later, as we were getting close to submitting the paper, I became aware of Andre Mouraux's eeg/matlab adaptation of the procedure used in FSL (originally developed at MIT Media Lab, I believe) for determining the number of components to extract. Using his code, we were mostly relieved to see that, <br>
<br>"the median number of dimensions was 39.5 (SD: 6.8) with a range of 23-53, which is broadly consistent with prior reports...suggests that the 64-component extraction used in the present report was sufficient to avoid underfitting, but moderately overfitted most participants...would be helpful for future investigations to examine the utility of other model order estimation algorithms..." <br>
</div><blockquote class="gmail_quote" style="margin: 0pt 0pt 0pt 0.8ex; border-left: 1px solid rgb(204, 204, 204); padding-left: 1ex;"><div></div><div>The concept of overfitting is drawn from neural networks in which overfitting produces (e.g. classification) models whose performance do not generalize to new data, and more generally from models of the variance of a data set, for which it is hoped that the non-interesting ('noise') portion of the data may be orthogonal to the data phenomena of interest.</div>
<div><br></div><div>In information-based signal processing using ICA, the concept is rather different. Here, there need be no fixed concept of the data as consisting of signal plus noise, and no assumption that the 'noise' (component) subspace (however that may be defined) is orthogonal to the rest of the data. Clearly, measured data always does have some level of additive and multiplicative variability from non-intrinsic causes (sensor noise, temperature fluctuations, etc.). However, for (enough) well-recorded EEG from a subject in a stable state (more on this below), this noise-variability in the data is relatively small, certainly <i>far</i> smaller than considered by e.g. the implicit ERP model (data = ERP + 'noise') that has colored thinking about EEG in the minds of most researchers for decades.</div>
<div><br></div><div>Recent thoughts in the signal processing community about ICA and its generalizations consider the case of independent subspaces. Imagine a (sleepy?) subject is blinking slowly during the experiment. Infomax ICA uses a static spatially static source assumption; but assume that in this case the artifact produced by the slow blinks moves through its time course. Then ICA must find a subspace of components with nearly the same (eyeblink-like) scalp maps and overlapping time courses -- something like overlapping movie 'frames,' each explaining a portion of the blink time course. (In my talks, I use a slide, also linked to the EEGLAB main page, showing an example of this). This is not an example of overfitting, but rather of fitting a complex phenomenon into an independent subspace.</div>
<div><br></div></blockquote><div><br>Agreed. <br><br></div><blockquote class="gmail_quote" style="margin: 0pt 0pt 0pt 0.8ex; border-left: 1px solid rgb(204, 204, 204); padding-left: 1ex;"><div></div><div>A recent exciting result from Jason Palmer is that under some (reasonably assured) assumptions, ICA will separate such a subspace into a component subspace independent of the other component activities. Jason finds slightly (or more) dependent subspaces in ICA decompositions by attempting to block diagonalize the pairwise mutual information matrix (I hope he can publish an EEGLAB tool for this soon). </div>
<div><br></div><div>Rather than attempting to eliminate such subspaces by PCA dimension reduction, it is important to study their details, since they may shed light on the microstructure of cortical (or muscle) activity. To find and separate such subspace details, however, requires more dimensions -- e.g., at least as many (suitably positioned) channels as one is able to record.</div>
<div><br></div></blockquote><div><br>Yes, though the burden of reliably classifying components can become nontrivial. In this context, Larry Greischar in Davidson's lab, has spent some time developing tools to automagically generate png-type image files showing a collage of key descriptive images for each component. This allows the human rater to use generic image viewing software (eg windows picture/file viewer) to rapidly "click-through" components. For indeterminate cases, the actual EEGLAB data structure can be loaded. Not sure if he is in a position to share that........ <br>
</div><blockquote class="gmail_quote" style="margin: 0pt 0pt 0pt 0.8ex; border-left: 1px solid rgb(204, 204, 204); padding-left: 1ex;"><div></div><div>Since in general EEG 'noise' subspaces cannot be assumed to be spatially orthogonal to the brain and non-brain sources of (varying degrees of present) interest, reducing the data to a principal subspace using PCA guarantees that some portion of the noise subspace will be spread (i.e. projected) into the remaining dimensions. Therefore, to me PCA dimension reduction should only be a procedure of last resort when the number of time points available is too small for complete ICA decomposition -- and even then, I believe better procedures than PCA are likely possible.</div>
<div><br></div></blockquote><div><br>Right, this was the other motive behind our madness. As it turned out, in our EMG validation dataset we had a relatively small number of samples for each condition (relative to the number of sensors)....PCA also helped to better satisfy the 'Orton rule of thumb' (footnote 5 in <a href="http://psyphz.psych.wisc.edu/~shackman/mcmenamin_shackman_davidson_ni2010.pdf">http://psyphz.psych.wisc.edu/~shackman/mcmenamin_shackman_davidson_ni2010.pdf</a>) <br>
</div><blockquote class="gmail_quote" style="margin: 0pt 0pt 0pt 0.8ex; border-left: 1px solid rgb(204, 204, 204); padding-left: 1ex;"><div></div><div>My comments above do not address the question of whether infomax ICA as usually applied to EEG data equally well separates component process with different frequency characteristics, etc. There is much more to be learned about EEG/EMG decomposition, and I am pleased to hear of your and others' careful explorations. </div>
<div><br></div><div>One point not much addressed in your 2011 paper is the scalp projection pattern of muscle EMG, which has been known on basic principles, and is also routinely observed by us (using 256 channels with coverage below the inion) to be that of an equivalent dipole at the end of the muscle (e.g., the muscle/tendon junction, which for head/neck muscles is near the tendon attachment to the skull) -- and pointed in the direction of the muscle. </div>
</blockquote><div><br>Yes, at this point, I suspect that your group has a much better handle on this than we do. As we note in the 2011 empirical report and the subsequent commentary piece, it should prove fruitful to routinely screen ICs based on their dipoles eg rejecting those that are well fitted by dipoles outside of or at the edge of the cerebral source space. I believe that Julie Orton has successfully employed a variant of this approach....And, again, I think Larry's worked to incorporate this into his image file code. <br>
</div><blockquote class="gmail_quote" style="margin: 0pt 0pt 0pt 0.8ex; border-left: 1px solid rgb(204, 204, 204); padding-left: 1ex;">
<div><br></div><div>Collecting more channels allows ICA to separate more (scalp/neck muscle) sources, but this may be equally an effect of having a wider montage including the muscle (and its equiv. dipole) polarity reversals. It should be interesting to compare ICA decompositions of two 128-channel subsets of our 256 electrodes, one with all electrodes located above or at the level of the nasion/inion, and another containing still lower electrodes --- which will separate more muscle components? If you or anyone is interested in this, please contact me.</div>
<div><br></div><div>It also should be of interest for you to compare your results to date using (extended) infomax ICA with resulting on the same data obtained using AMICA, which our comparisons (so far for EEG sources, mainly) show to be still more successful at separating physiologically distinct sources.</div>
<div><br></div></blockquote><div><br>Yes, we've been excited about the possibility of using AMICA...though at this point have not spent too much time exploring it.<br><br>Best wishes,<br>Alex <br><br><br><br> </div><blockquote class="gmail_quote" style="margin: 0pt 0pt 0pt 0.8ex; border-left: 1px solid rgb(204, 204, 204); padding-left: 1ex;">
<div></div><font color="#888888"><div>Scott Makeig</div></font><div><div></div><div class="h5"><div><br><div class="gmail_quote">On Mon, Oct 10, 2011 at 12:56 PM, Alexander J. Shackman <span dir="ltr"><<a href="mailto:shackman@wisc.edu" target="_blank">shackman@wisc.edu</a>></span> wrote:<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">I'm looking forward to reading Arno's paper!<br><br>In the meantime, some may find our group's experiences using ICA to remove EMG from the EEG useful:<br>
<br><a href="http://psyphz.psych.wisc.edu/%7Eshackman/mcmenamin_shackman_ni2011.pdf" target="_blank">http://psyphz.psych.wisc.edu/~shackman/mcmenamin_shackman_ni2011.pdf</a><br>
and<br><a href="http://psyphz.psych.wisc.edu/%7Eshackman/mcmenamin_shackman_davidson_ni2010.pdf" target="_blank">http://psyphz.psych.wisc.edu/~shackman/mcmenamin_shackman_davidson_ni2010.pdf</a><br><br>Cheers,<br>Alex<div>
<div></div><div><br><br><div class="gmail_quote">
On Fri, Oct 7, 2011 at 9:43 PM, Scott Makeig <span dir="ltr"><<a href="mailto:smakeig@gmail.com" target="_blank">smakeig@gmail.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
Does EMG in EEG data have to do with movements? <div><br></div><div>Muscle tension is what generates EMG, not muscle movements per se. Two opposing muscles, when tensed together, may not produce movement, but do increase stiffness of the affected joint. Moving the body is only one of the two main things muscles do -- the other is to stiffen the body, e.g., to hold the head upright, but also for defensive and/or offensive purposes (actual or imagined). Thus I believe there is useful cognitive and emotional information in the configuration and strengths of neck muscle activations in situations when the head is not moving.<div>
<br></div><div>Scott Makeig</div><div><br></div><div>p.s. Arno is first author of a paper, long in preparation and now in final revision, on differences between ICA algorithms applied to EEG data. We will share it with the list when finished-- I believe it has useful objective info on this subject.</div>
<div><br><div class="gmail_quote">On Fri, Oct 7, 2011 at 5:58 AM, Sara Graziadio <span dir="ltr"><<a href="mailto:sara.graziadio@newcastle.ac.uk" target="_blank">sara.graziadio@newcastle.ac.uk</a>></span> wrote:<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
Hello Alonso,<br>
I agree that the subjects are not always moving and so the ICA does not work perfectly, but this is still an issue as the cortical activity is intermixed with the emg and if you remove that IC you are cleaning the data on one side but you are removing some cortical activity on the other side. And you don't know anything about where that cortical activity is coming from, what it is and so on. If you study the cortico-muscular coherence for example, removing channels with emgs will reduce your coherence. Almost in all the ICs I obtain with fastica (that should be the best algorithm or at least one of the best) I have also some cortical activity, you can see it if you look at the full signals in time, sometimes it is also obvious from the PSD of the IC. I think this is a very important limit of ICA that make me dubious when I read in the articles that ICA was used for artefact rejection. To which extend it is usually not clear. Probably more information should be provided in th!<br>
e methods about this but nobody does it as far as I know. Perhaps somebody with more experience than me could comment on this.<br>
<br>
The 0.5Hz limit is something my colleagues and I found and I think it is the common experience for everybody, probably it was also previously discussed in this forum. I am not sure if there are any references for this.<br>
I don't think that the computer crashes because of your filter though, but I am not the best person to reply to you on this.<br>
<br>
I am not sure this could help you though!<br>
<br>
Best<br>
<font color="#888888"><br>
Sara<br>
</font><div><br>
<br>
>-----Original Message-----<br>
>From: Alonso Valerdi, Luz M [mailto:<a href="mailto:lmalon@essex.ac.uk" target="_blank">lmalon@essex.ac.uk</a>]<br>
>Sent: 07 October 2011 12:44<br>
>To: Sara Graziadio; 'David Groppe'; '<a href="mailto:japalmer29@gmail.com" target="_blank">japalmer29@gmail.com</a>'<br>
>Cc: <a href="mailto:eeglablist@sccn.ucsd.edu" target="_blank">eeglablist@sccn.ucsd.edu</a><br>
</div><div><div></div><div>>Subject: RE: [Eeglablist] filters, ICA and erp<br>
><br>
>Hello Sara,<br>
><br>
>I've been following your questions and replies and I have undergone the<br>
>same experience that you are describing. The EMG seems to be mixed with<br>
>another component, but over the time I started to believe that maybe the<br>
>EMG doesn't come up over all the trial because the subject didn't move all the<br>
>time. Are you with me?<br>
><br>
>On the other hand, I'd like to ask you why you posted previously that the<br>
>high-pass filter below 0.5Hz is not suitable for ICA processing? Do you have<br>
>any reference to recommend me about this issue? The point is that I'm<br>
>filtering my data between 0.1 - 40Hz, but the problem is that certain datasets<br>
>are stuck during the ICA processing and my computer crashes after several<br>
>hours. I wonder if it is because of the filtering. Do you have any comment?<br>
><br>
>I'll really appreciate it!<br>
>Cheers<br>
>Luz<br>
><br>
>-----Original Message-----<br>
>From: <a href="mailto:eeglablist-bounces@sccn.ucsd.edu" target="_blank">eeglablist-bounces@sccn.ucsd.edu</a> [mailto:<a href="mailto:eeglablist-" target="_blank">eeglablist-</a><br>
><a href="mailto:bounces@sccn.ucsd.edu" target="_blank">bounces@sccn.ucsd.edu</a>] On Behalf Of Sara Graziadio<br>
>Sent: 06 October 2011 10:51<br>
>To: 'David Groppe'; '<a href="mailto:japalmer29@gmail.com" target="_blank">japalmer29@gmail.com</a>'<br>
>Cc: <a href="mailto:eeglablist@sccn.ucsd.edu" target="_blank">eeglablist@sccn.ucsd.edu</a><br>
>Subject: Re: [Eeglablist] filters, ICA and erp<br>
><br>
>Hello,<br>
>Thanks for your suggestion.<br>
><br>
>As I was planning to do also a PSD analysis on the data I guess that to remove<br>
>the mean is not the best method if it works as a non-selective high pass filter,<br>
>am I right?<br>
><br>
>I am applying the PCA before applying the ICA to reduce the number of<br>
>components. How the data rank would be modified in this case?<br>
>I have to admit that it never happened to me that the muscle artefact is put in<br>
>a single source with the ICA. Usually it spreads on half of the components, is<br>
>this only my experience?<br>
><br>
>Thanks again<br>
><br>
>Best wishes<br>
><br>
>Sara<br>
><br>
><br>
>>-----Original Message-----<br>
>>From: David Groppe [mailto:<a href="mailto:david.m.groppe@gmail.com" target="_blank">david.m.groppe@gmail.com</a>]<br>
>>Sent: 05 October 2011 23:10<br>
>>To: Sara Graziadio<br>
>>Cc: <a href="mailto:eeglablist@sccn.ucsd.edu" target="_blank">eeglablist@sccn.ucsd.edu</a><br>
>>Subject: Re: [Eeglablist] filters, ICA and erp<br>
>><br>
>>Hi Sara,<br>
>> I found that a good way to improve the performance of ICA for ERP<br>
>>analysis is to<br>
>>1) Epoch your data into one or two second chunks time locked to the<br>
>>event of interest<br>
>>2) Remove the mean of each epoch at each channel<br>
>>3) Run ICA to remove artifacts<br>
>>4) Use a standard pre-event time window to baseline your data<br>
>>5) Compute your ERPs<br>
>><br>
>>Removing the mean of each epoch acts as a crude high-pass filter.<br>
>>It's not nearly as selective as a "true" high pass filter but it<br>
>>doesn't distort the ERP waveforms as much either. Moreover we've<br>
>>found that the procedure described above massively improves the<br>
>>reliability of ICA when compared to standard ERP prestimulus<br>
>>baselines:<br>
>><br>
>>Groppe, D.M., Makeig, S., & Kutas, M. (2009) Identifying reliable<br>
>>independent components via split-half comparisons. NeuroImage, 45<br>
>>pp.1199-1211.<br>
>><br>
>>Hope this helps,<br>
>> -David<br>
>><br>
>><br>
>><br>
>>On Wed, Oct 5, 2011 at 10:46 AM, Sara Graziadio<br>
>><<a href="mailto:sara.graziadio@newcastle.ac.uk" target="_blank">sara.graziadio@newcastle.ac.uk</a>> wrote:<br>
>>> Hello,<br>
>>> I would like just a suggestion about some data cleaning/analysis I am doing.<br>
>I<br>
>>am doing an ERP analysis and I want to clean my data first with the ICA. In<br>
>>theory, though, I should not use an high-pass cutoff higher than 0.1 Hz to not<br>
>>reduce the erp amplitude. On the other side the ICA does not work well if<br>
>the<br>
>>high-pass cutoff is lower than 0.5 Hz...what is then the best method to<br>
>apply?<br>
>>Has anybody tested how robust the ica is with a 0.1Hz filter?<br>
>>> I have also another question: I am doing the analysis on 94 electrodes<br>
>>referenced to Fz. I planned to average reference the data but actually there<br>
>is<br>
>>quite a large spread of noise on all the electrodes with this method<br>
>(muscular<br>
>>artefacts for example from the temporal electrodes). But actually almost all<br>
>>the papers are using the average reference so I was surprised, am I the only<br>
>>one having this problem of noise? Would not be better just to keep the Fz<br>
>>reference and then perhaps to average the erps for every different cortical<br>
>>area and do the analysis on these averaged erps?<br>
>>><br>
>>> Thank you very much<br>
>>><br>
>>> Best wishes<br>
>>><br>
>>> Sara Graziadio<br>
>>> Research Associate<br>
>>> Newcastle University<br>
>>><br>
>>><br>
>>><br>
>>> _______________________________________________<br>
>>> Eeglablist page: <a 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 eeglablist-<br>
>><a href="mailto:unsubscribe@sccn.ucsd.edu" target="_blank">unsubscribe@sccn.ucsd.edu</a><br>
>>> For digest mode, send an email with the subject "set digest mime" to<br>
>><a href="mailto:eeglablist-request@sccn.ucsd.edu" target="_blank">eeglablist-request@sccn.ucsd.edu</a><br>
>>><br>
>><br>
>><br>
>><br>
>>--<br>
>>David Groppe, Ph.D.<br>
>>Postdoctoral Researcher<br>
>>North Shore LIJ Health System<br>
>>New Hyde Park, New York<br>
>><a href="http://www.cogsci.ucsd.edu/%7Edgroppe/" target="_blank">http://www.cogsci.ucsd.edu/~dgroppe/</a><br>
><br>
>_______________________________________________<br>
>Eeglablist page: <a 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 eeglablist-<br>
><a href="mailto:unsubscribe@sccn.ucsd.edu" target="_blank">unsubscribe@sccn.ucsd.edu</a><br>
>For digest mode, send an email with the subject "set digest mime" to<br>
><a href="mailto:eeglablist-request@sccn.ucsd.edu" target="_blank">eeglablist-request@sccn.ucsd.edu</a><br>
<br>
_______________________________________________<br>
Eeglablist page: <a 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 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 href="mailto:eeglablist-request@sccn.ucsd.edu" target="_blank">eeglablist-request@sccn.ucsd.edu</a><br>
</div></div></blockquote></div><font color="#888888"><br><br clear="all"><div><br></div>-- <br>Scott Makeig, Research Scientist and Director, Swartz Center for Computational Neuroscience, Institute for Neural Computation; Prof. of Neurosciences (Adj.), University of California San Diego, La Jolla CA 92093-0559, <a href="http://sccn.ucsd.edu/%7Escott" target="_blank">http://sccn.ucsd.edu/~scott</a><br>
</font></div></div>
<br>_______________________________________________<br>
Eeglablist page: <a 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 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 href="mailto:eeglablist-request@sccn.ucsd.edu" target="_blank">eeglablist-request@sccn.ucsd.edu</a><br>
<br></blockquote></div><br><br clear="all"><br>-- <br></div></div>Alexander J. Shackman, Ph.D.<br>HealthEmotions Research Institute | Lane Neuroimaging Laboratory<br>Wisconsin Psychiatric Institute & Clinics<br>University of Wisconsin-Madison<br>
6001 Research Park Boulevard<br>Madison, Wisconsin 53719<br><br>Telephone: <a href="tel:%2B1%20%28608%29%20358-5025" value="+16083585025" target="_blank">+1 (608) 358-5025</a><br>Fax: <a href="tel:%2B1%20%28608%29%20265-2875" value="+16082652875" target="_blank">+1 (608) 265-2875</a><br>
Email: <a href="mailto:shackman@wisc.edu" target="_blank">shackman@wisc.edu</a><br><a href="http://psyphz.psych.wisc.edu/%7Eshackman" target="_blank">http://psyphz.psych.wisc.edu/~shackman</a><br>
</blockquote></div><br><br clear="all"><div><br></div>-- <br>Scott Makeig, Research Scientist and Director, Swartz Center for Computational Neuroscience, Institute for Neural Computation; Prof. of Neurosciences (Adj.), University of California San Diego, La Jolla CA 92093-0559, <a href="http://sccn.ucsd.edu/%7Escott" target="_blank">http://sccn.ucsd.edu/~scott</a><br>
</div>
</div></div></blockquote></div><br><br clear="all"><br>-- <br>Alexander J. Shackman, Ph.D.<br>HealthEmotions Research Institute | Lane Neuroimaging Laboratory<br>Wisconsin Psychiatric Institute & Clinics<br>University of Wisconsin-Madison<br>
6001 Research Park Boulevard<br>Madison, Wisconsin 53719<br><br>Telephone: +1 (608) 358-5025<br>Fax: +1 (608) 265-2875<br>Email: <a href="mailto:shackman@wisc.edu" target="_blank">shackman@wisc.edu</a><br><a href="http://psyphz.psych.wisc.edu/%7Eshackman" target="_blank">http://psyphz.psych.wisc.edu/~shackman</a><br>