Cortical labels power spectrum different approaches

Hey all,

I'm calculating MEG cortical labels power spectrum (for resting state data) in two different ways. Can you help me understand the differences? The power spectrums are quite different (see attached).

1) Go through the source space time-series:

stcs = mne.minimum_norm.apply_inverse_epochs(epochs, ...)
labels_ts = mne.extract_label_time_course(stcs, labels, ...)
for label_ts:
  psds, freqs = mne.time_frequency.psd_array_welch(label_ts, ...)
  psds = 10 * np.log10(psds)

2) Compute the PSD from the epochs:

for label_ind, label in enumerate(labels):
  stcs = mne.minimum_norm.compute_source_psd_epochs(epochs, ...)
  for stc in stcs:
    psds = np.mean(stc.data, axis=0)

Thanks!

Noam

-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://mail.nmr.mgh.harvard.edu/pipermail/mne_analysis/attachments/20180829/f20f7f3d/attachment-0001.html
-------------- next part --------------
A non-text attachment was scrubbed...
Name: via_epochs.png
Type: image/png
Size: 108924 bytes
Desc: via_epochs.png
Url : http://mail.nmr.mgh.harvard.edu/pipermail/mne_analysis/attachments/20180829/f20f7f3d/attachment-0002.png
-------------- next part --------------
A non-text attachment was scrubbed...
Name: via_ts.png
Type: image/png
Size: 74593 bytes
Desc: via_ts.png
Url : http://mail.nmr.mgh.harvard.edu/pipermail/mne_analysis/attachments/20180829/f20f7f3d/attachment-0003.png

Let me be more specific/clear:

I'm analyzing data from a patient with an ECOG. I want to compare the power-spectrum of the electrodes and the MEG cortical labels I've created around each electrode.

It seems that calculating the time series in the source space of long enough MEG epochs (~10s), split the electrodes file to same length epochs, and use

mne.time_frequency.psd_array_multitaper on both of them is the way to go, and also I know that both are in the same units (10*log10 for [dB]).
But I'm still a little bit confused by the different results I'm getting when using mne.minimum_norm.compute_source_psd_epochs instead.

Thanks,
Noam

External Email - Use Caution

hi,

It should be more in agreement.
Can you share a script on one of the MNE datasets to figure out the
cause of the difference?
Also note that both units in your plots are very different (dB vs I am not sure)

Alex

Hey Alex,

Yes, you can find the script here<https://github.com/pelednoam/mmvt/blob/master/src/misc/power_spectral_density.py>.

It's based on this mne example<https://martinos.org/mne/stable/auto_examples/time_frequency/plot_compute_source_psd_epochs.html>.

One thing the pops immediately, is that only on the second approach (psd_array_multitaper on the label_ts) you need to set the mode (I set it to mean_flip)

Also, for both of them, I use 10 * np.log10(x) to get dB. Not sure this correct in the first approach, mostly because it's not part of the mne example.

Thanks,

Noam

We can debug it together today and update the mailing list.

Sheraz

Hey all, thanks to Denis, it seems that setting the pick_ori to 'normal' in apply_inverse_epochs did the trick.

Also, in both cases I added:

psd_avg = 10 * np.log10(psd_avg)

To convert the results to [dB].

Now, the two power spectrums are much more similar, but the values in compute_source_psd_epochs are bigger (see attached).

Thanks Denis!

Noam