Brain4edu - przykład użycia I

Badanie naukowe - P300 wzrokowe

0. Wstęp

Prawidłowo zaplanowane badanie naukowe przewiduje:

  1. postawienie hipotezy badawczej,
  2. zaprojektowanie eksperymentu weryfikującego postawioną hipotezę,
  3. przygotowanie eksperymentu,
  4. przeprowadzenie eksperymentu,
  5. analizę zebranych danych,
  6. weryfikację hipotezy badawczej.

Instrukcja omawia każdy z punktów na przykładzie ekspermentu P300 wzrokowe.

1. Postawienie hipotezy badawczej

Mózg w reakcji na spodziewany bodziec wizualny generuje charakterystyczną odpowiedź po ~300 ms od momentu wystąpienia bodźca, tzw. wzrokowy potencjał P300

2. Zaprojektowanie eksperymentu

Celem eksperymentu jest zweryfikowanie, czy hipoteza badawcza jest prawdziwa, tzn. czy w odpowiedzi na spodziewany bodziec wzrokowy mózg wygeneruje charakterystyczny potencjał (po czasie około 300ms od momentu wystąpienia bodźca).

Założenia:

Ilustracja 1. Po lewej bodziec typu target, po prawej bodziec typu nontarget

Tak opisany eksperyment można stworzyć za pomocą biblioteki Psychopy. Na potrzeby instrukcji w zbiorze eksperymentów demonstracyjnych biblioteki Psychopy umieszczono ekspermyment EEG_P300wz. Eksperyment spełnia powyższe założenia.

3. Przygotowanie eksperymentu

Do przeprowadzenia eksperymentu użyto 32-kanałowego wzmacniacza oraz wodnych elektrod firmy TMSI. Schemat podłączenia elektrod do wzmacniacza przedstawiono w tabeli. Nazwy kanałów oznaczają pozycje elektrod na głowie osoby badanej. Kolory odpowiadają oznaczeniom na ilustracji 7.

Wzmacniacz TMSI
nr kanału nazwa kanału nr kanału nazwa kanału nr kanału nazwa kanału
1 Fz 12 23
2 C4 13 24
3 Cz 14 25
4 C3 15 26
5 P4 16 27
6 Pz 17 28
7 P3 18 29
8 O2 19 30
9 O1 20 31
10 M2 21 32
11 M1 22 GND AFz
Ilustracja 2. Eksperyment EEG_P300wz

W eksperymencie domyślnie ustawiono dwa powtórzenia próby. Zwiększ liczbę powtórzeń do 20 (ilustracja 3)

Ilustracja 3. Zwiększenie liczny powtórzeń do 20
Ilustracja 3a. Zapisanie zmian w eksperymencie demonstracyjnym.
Ilustracja 4. Parametry badania - nazwy kanałów
Ilustracja 5. Parametry badania - montaż uszny
Ilustracja 6. Parametry badania - filtr górnoprzepustowy o częstości odcięcia 1Hz i filtr pasmowozaporowy z pasmem 49.9-50.1Hz

Do zamocowania elektrod użyto czepka wodnego firmy TMSI (ilustracja 7)

Ilustracja 7. Od lewej: wodny czepek firmy TMSI; schemat czepka wodnego z zaznaczonymi pozycjami elektrod użytych w badaniu. Oznaczenia elektrod: czerwony - elektroda GND, zielony - elektrody referencyjne, niebieski - pozostałe elektrody
4. Przeprowadzenie eksperymentu
Ilustracja 7a. Uruchomienie eksperymentu z poziomu Svaroga
Ilustracja 8. Ustawienia eksperymentu (w przykładzie ścieżka do eksperymentu to: ~/.obci/psychopy/EEG_P300wz/EEG_P300wz.psyexp, a sygnał i dane zapisywane będą w plikach o nazwie rec.
Ilustracja 9. Wyświetlenie zapisanego sygnału
5. Analiza zebranego sygnału

Analiza polega na wygenerowaniu z otrzymanego sygnału dwóch uśrednionych przebiegów. Jeden przebieg jest wynikiem uśrednienia tych fragmentów sygnału, które wystąpiły w momencie pojawienia się bodźca typu nontarget. Drugi przebieg jest wynikiem uśrednienia tych fragmentów sygnału, które wystąpiły w momencie pojawienia się bodźca typu target. Porównanie obu przebiegów pozwoli odrzucić lub przyjąć hipotezę badawczą.

Sygnał możesz:

Ilustracja 10. Uśrednione przebiegi
Ilustracja 11. Biblioteka MNE. Podgląd sygnały z tagami.
Ilustracja 12. Biblioteka MNE. Od lewej, od góry: pozycje elektrod; przebiegi uśrednione wzdłuż znacznika target dla każdego z kanałów razem z wykresami topologicznymi w chwilach: 0ms, 150ms, 300 ms, 336 ms po wyświetlenie bodźca. Od lewej: uśrednione przebiegi wzdłuż znaczników target oraz nontarget; uśrednione przebiegi dla poszczególnych kanałów z uwzględnieniem ich pozycji; wykres topologiczny w 325 ms po wystąpieniu bodźca.

Wykresy wygenerowano skryptem:

from obci_readmanager.signal_processing.read_manager import ReadManager
import matplotlib.pyplot as plt
import mne

# Skrypt zadziała po wpisaniu ścieżek do odpowiednich plików
# (objaśnienia poniżej)
signal_filename = "rec.raw" # w przykładzie rec.raw
xml_filename = "rec.xml" # w przykładzie rec.xml
tag_filename = "rec.tag" # w przykładzie 

target_tag_name = "szachownica_target.png"
nontarget_tag_name = "szachownica_nontarget.png"

# Parametry cięcia
Tmin = -0.1 
Tmax = 0.7

# Wczytanie sygnału do Readmanager-a
mgr = ReadManager(xml_filename, signal_filename, tag_filename)

# Konwersja wczytanego sygnału do MNE
raw = mgr.get_mne_raw()

# Montaż uszny
raw_custom, _ = mne.set_eeg_reference(raw, ['M1', 'M2'])

# Filtr pasmowoprzepustowy 1-30Hz
raw_custom.filter(1, 30)

# Wykres sygnału bez kanałów referencyjnych (M1, M2) i kanłów O1, O2
raw_custom.plot(n_channels=7, title="P300")

# Etykiety epok
events_description = mgr.mne_events()[1]
target_id = [events_description[i] for i in mgr.mne_events()[1]
             if target_tag_name in i][0]
nontarget_id = [events_description[i] for i in mgr.mne_events()[1]
                if nontarget_tag_name in i][0]

# Pocięcie sygnału (od Tmin s. przed wystąpieniem znacznika do Tmax s.
# po wystąpieniu znacznika)
title='EEG original reference'

target_epochs = mne.Epochs(raw_custom, events=mgr.mne_events()[0],
                        event_id=target_id, tmin=Tmin,
                        tmax=Tmax).load_data().apply_baseline().average()
nontarget_epochs = mne.Epochs(raw_custom, events=mgr.mne_events()[0],
                        event_id=nontarget_id, tmin=Tmin,
                        tmax=Tmax).load_data().apply_baseline().average() 

# Wykres z pozycjami elektrod
raw.plot_sensors(show_names=True)

# Ze względu na słabą jakość sygnału na elektrodach w pozycjach O1, O2,
# nie umieszczono przebiegów z tych elektrod. Przebiegi na elektrodach
# M1, M2 są pomijalne, ponieważ są to elektrody referencyjne

fig, ax = plt.subplots(2, 1)
plot1 = mne.viz.plot_evoked(target_epochs, exclude=['M1','M2','O1','O2'],
                        show = False, titles = 'P300 target',
                        spatial_colors=True, selectable=True, axes=ax[0])
plot2 = mne.viz.plot_evoked(nontarget_epochs, exclude=['M1','M2','O1','O2'],
                        show = False, titles = 'P300 nontarget',
                        spatial_colors=True, selectable=True, axes=ax[1])

fig2, ax2 = plt.subplots(1,2, figsize=(8,4))
plot3 = mne.viz.plot_evoked(target_epochs, exclude=['M1','M2','O1','O2'],
                        show = False, titles = 'P300 target',
                        spatial_colors=True, selectable=True,
                        axes=ax2[1])
plot4 = target_epochs.plot_topomap(times=[0.325], size=3., show = False,
                        axes=ax2[0])
fig2.show()
fig.show()

target_epochs.plot_joint(times=[0, 0.15, 0.3, 0.325],
                         exclude=['M1', 'M2', 'O1', 'O2'])
mne.viz.plot_evoked_topo(target_epochs.drop_channels(['O1','O2','M1','M2']),
                         legend = True, color = 'red', background_color='w')

Po eksporcie sygnału do formatu eeglab (ilustracja 13).

Ilustracja 13. Eksport sygnału w formacie eeglab (.set)

możesz analizować go wykorzytując bibliotekę eeglab. Część możliwości biblioteki przedstawiono na ilustracjach 14,15.

Ilustracja 14. Bibliotek eeglab. Podgląd sygnału z tagami.
Ilustracja 15. Biblioteka eeglab. Od lewej, od góry: pozycje elektrod, uśrednione przebiegi dla każdegu kanału z wykresem topologicznym w chwili 336ms od momentu wystąpienia bodźca, wykresy topologiczne 2D w chwilach: 0ms, 100ms, 300ms, 330ms, 350ms, 380ms, 400ms, 420ms od momentu wystąpienia bodźca, podgląd fragmentów sygnału wyciętych wzdłuż znacznika szachownica_target.png, uśrednione przebiegi dla poszczególnych kanałów z uwzględnieniem ich pozycji, wykresy topologiczne 2D w chwilach: 0ms, 100ms, 300ms, 330ms, 350ms, 380ms, 400ms, 420ms od momentu wystąpienia bodźca.
6. Weryfikacja hipotezy badawczej

Na podstawie otrzymanych wyników przyjmij lub odrzuć hipotezę badawczą.

Jeżeli w uśrednionych przebiegach kilkaset milisekund od momentu wystąpienia bodźca widoczne będzie pozytywne wychylenie, obrazujące wzrost wartości sygnału jest to potencjał wywołany. W przebiegu uśrednionym po bodźcach typu 'target' wzrost tego napięcia powinien występować po około 300 ms od momentu wystapienia bodźca (w przykładzie 336ms) i być dużo wyraźniejszy od innych wychyleń. Taką zmianę w zapisie aktywności elektrycznej mózgu określa się mianem komponenty lub potencjału P300.

Ocena jakościowa wyników pozwala na przyjęcie hipotezy badawczej.

Prawidłowo zrealizowane badanie należy uzupełnić o analizę ilościową zagadnienia. Analiza ilościowa pozwala na wykazanie statystycznej różnicy pomiędzy uśrednionymi przebiegami. W tym celu można posłużyć się prostymi testami statystycznymi takim jak test różnic.

Wykorzystany w przykładzie schemat eksperymentu jest standardową procedurą do badania potencjałów wywołanych. Funkcjonuje pod nazwą oddball.



POWODZENIA!