目次
Math
Analysis
Experiment
Simulations

03基本的な下処理

目次

▶︎
all
running...

下処理の必要性

リファレンスの再設定

リファレンスとは

全平均

リファレンスの再設定をする場合

全電極の平均をReferenceとして使用する場合

特定電極

特定電極の信号をreferenceとして使用する場合

フィルタリング

フィルタとは

eegfilt

ラインノイズのフィルタ

Notch filter

ノッチフィルタでもいいけど

Cleanline

なんかcleanlineの方が優秀らしい?

色々設定

計算ちう

フィルタしてるだけだし名前はそのままにしよう

データセットの確認

これはフィルタとは関係ないけどこのタイミングで

クリックで他のデータセットに戻れる

dataset sizeみてみるとめっちゃ減ってる

電極位置の読み込み

電極位置の必要性

電極位置の読み込み

計測した脳波データに対応する電極情報を読み込んでいきます.

Edit -> Channel locations

をクリックします.

Look up channel locations?のウィンドウが開いたら,使用する電極配置のモデルを選択します.デフォルトではMNIなんとかが選ばれていると思いますが,基本はこれで大丈夫です.そのままOkを押します.

するとEdit channel infoのウィンドウが表示されます.これは各チャンネルについて,読み込んだ頭部モデル上でのx,y,z座標や角度などなどの情報の一覧です.いじる必要は基本的にはないはずですが,一応,何も枠が埋まってないチャンネルがないかなどは確認すると良いかもしれません.

referenceのチャンネルやAUXポートの信号は当然座標がありませんが,それ以外の普通のEEG channelなら埋められているはずです.

確認が済んだらOkを押してウィンドウを閉じます.また,ここでSave(other type)Sav(as .ced)を選択することで,使用した脳波計用のlocationファイルを出力することもできます.

電極位置の読み込みが無事に終了していれば,メイン画面に戻ったときにChannel locationsの内容がNo(labels only)からYesに変わっていると思います.変わっていなければ,何か操作をミスって読み込めてないのでもう一度確認してください.

電極の除外

電極を除外する理由

電極の除外

目視で削除することもできますが,その基準が恣意的になってしまうことは避けられません.そこで自動で異常な電極を検知してREJECT判定を出してくれる関数の紹介です.

Tools -> Automatic channel rejection

を選択します.

Reject channelのウィンドウが表示されたら,対象とする電極と除外する基準を選択します.眼電や筋電は脳波に比べたら異質な信号であることは間違いないので対象から外した上で関数にかけます.そのため,たとえば今回筆者が用いたデータだと66ch中最後の2chは眼電だったりと脳波ではないので削って,1:63,つまり1から63の電極のみを対象にしました.

次の除外基準ですが,これは説明にやや統計?の知識が必要になるので省きます.とりあえずKurtosisで良いと思います.その下の数字もいじらなくていい.結果,電極の数字だけ調整すれば大丈夫です.Okを押して関数を走らせます.

すると数秒計算が走って,そのあとScroll componet activitiesのウィンドウが開き,ノイズっぽいやばいチャンネルを赤く表示してくれた脳波データの一覧が...

表示されます.赤くなってるのがたしかにやばそうな電極かどうか確認してみてください.納得したら右下のREJECTを押して,選択された電極を排除します.

chを削ったので少し名前を変えてデータセットを保存してみました.ここで確認してみると,Channels per frameが今まで66だったのに65になりましたね.やばい電極を取り除いたからです.ちなみに,どの電極がどんな判定をされていたのかはコマンドウィンドウに表示されているはずです.

今回使ったデータはP6が怒られたようですね.

エポッキング

以上で,まず最初にやっておくべき下処理は終了です.ここから,少しずつデータに合わせた処理をしていきます.

エポッキングとは

安静時脳波の計測実験でもない限り,基本的には脳波研究で行う実験はなんらかのタスクを数十から数百試行被験者に行ってもらうものになっていると思います.これら全体に共通する脳活動をなんらかの方法で抽出して議論するのが脳波解析の主な目的です.

脳波データは実験中常に計測しているため,休憩時間やタスク間の時間といった,解析には利用しないデータも多く含まれています.なので課題に関係のある部分だけを切り出す必要があり,この切り出したセグメントをエポックと言います.

エポックの切り出し

では実際にエポックの切り出しをしてみます.

Tools -> Extract epochs

をクリックします.

Extract data epochsのウィンドウが表示されたら,エポックの切り出しに使うevent=トリガーの選択と,eventのタイミング前後それぞれ何秒の範囲で各エポックを切り出すのかを指定します.

トリガーの選択は右上の...から行います.S2やS4というのは実験時に出力していたトリガーによるので,これは実験次第で個数も表記も異なります.複数選択も可能です.選択したらOkを押しましょう.

次に時間の指定ですが,トリガー前はある程度の時間を確保しておいたほうが良いです.理由はあとで説明しますが,だいたい短くて0.5,長くて2秒もあれば良いかと思います.刺激後にどれだけの時間を切り出すかは実験次第です.解析したい対象の脳活動がどの時間幅で発生しているのかを考えましょう.

ただし,解析の都合上実際の試行時間よりも少し多めに時間窓を区切ることを推奨します.たとえば刺激の呈示が1.5秒で,解析に使いたいメインも1.5秒だったとしても,あえて2秒まで切り取るというようなことです.理由は解析の時に.

エポックを切り出す時に選択するトリガーですが,最初は解析したい対象の全てを選んでおきましょう.この先も下処理を行うので,この段階で条件毎に分けて取り出していると,それぞれ同じ処理を繰り返す必要があり面倒です.自分は4条件の実験だったので4条件全てを取り出しました.

ベースライン補正

さて,切り出すエポックを選んでOKを押すと,Baseline removalというウィンドウが表示されると思います.これはエポックごとにベースラインを設定し,脳波データを補正するための機能です.

脳波は計測中,常に頭皮との接触部位で若干ずつ抵抗が変化したりすることで,何もしていなくても値がゆるやかに変化します.その変化とタスク由来の変化を区別するため,それぞれのエポックではタスク前数100ms~数1000msの時間で平均を取り,これをベースラインとしてエポック全体から引きます.こうすることで,タスク前の脳波からの変化分だけが残るため,エポック間での脳波を比較することが出来るようになるわけです.

ということで,そのためにエポックの切り出しはトリガーよりちょっと前の時間までで行いました.自分はトリガーが出される直前の1.5~2秒の間は注視点を見ているだけの時間なので,この1.5秒を使ってベースラインを計算させました.

実験デザインの時から,ここを上手く組み込んでおきましょう.このベースライン時間は脳活動に変化があってはいけないので,たとえば注視点の画面に切り替わるのが-1500msのタイミングだったとしたら,ベースラインに-1500から0を使ってしまうと注視点呈示によるERPが乗ってしまいよろしくありません.この場合は-1000からとかにしましょう.

さて,ベースライン補正も終わったのでOkを押します.

メニューに戻ると,先程までと色々変わっています.epochの数,スタートと終わりの時間などの情報が追加されました.ここで,意図したエポックの数や長さがちゃんと切り出せているのか確認をしておきましょう.

エポックの除外

ベースラインで補正していようと,ノイズまみれで使えない試行はやはり存在します.脳波に比べて筋電は圧倒的に大きな振幅をもった信号であることや,電極が動くことで生じた抵抗の変化による電圧(計測脳波)への影響などによって,タスク中に被験者がまばたきをしたり体を動かしたりしてしまった試行は汚くなってしまいがちです.

こうした試行は,解析しようにも脳波がノイズに埋もれてしまっているので意味をなさなく,むしろ試行で平均化してしまう脳波解析においては害悪でしかありません.よってそうした汚いエポックを解析対象から外しておく必要があります.

自動で除外

Tools -> Automatic epoch rejection

を選択します.

除外するエポックの基準を設定します.脳波のスケールからして,1000μVを超える信号が取れるのはおかしいのでこれを基準(デフォルト設定)として,それよりもでかい信号が計測されているエポックは除外することにしてみます.

Okを押して計算させると,少したってからこのようなplotが表示されるはずです.試行区切りになった脳波データに対して,EEGLABがreject判定をしたエポックを確認できます.黄色になっているのが除外判定です.

除外判定だけど残しておいて良いと思ったり,逆に残されているけど明らかに変なのなんかはエポックをクリックすると黄色がついたり外れたり,つまり除外マークのオンオフを切り替えられます.

全体を確認してOKそうだったら,右下のREJECTを押して黄色でマークされたエポックを除外しましょう.

はい.

結果です.先程までは80trialだったデータが66になりました.テスト用に自分が被験者になって取ったデータなんですけど,途中から気持ち悪くなってしまって動きまくっていたんですよね...多動気味な人には脳計測実験は辛いですよねえ.

統計的な方法

他にも,半自動でやってくれるものとして

Tools -> Reject data epochs -> Reject data (all methods)

があります.これは様々な指標(先程のように振幅の範囲や全試行の平均からの離れ具合など)を用いて,逸脱したエポックを除去するものです.が,自由度が高い分,よく分からないうちは変数の指定が大変でしょうし今は細かく解説しないことにします.

ICA

ICAはIndependent Component Analysis, 独立成分分析とよばれる手法で,簡単に言うと計測された信号をいくつかの成分,Componentに分解するものです.脳波の場合,脳波,筋電,眼電,計測機械由来のノイズ...などに分けられます.

与えられた脳波信号を数学的にあれこれしていろんな成分に分解してみて,その結果を眺めて「脳波っぽい」成分以外を削っていきます.早速やってましょう.

ICAの計算

Tools -> Decompose data by ICA

ICAの計算アルゴリズムはいくつかの種類があるので選択します.基本はrunicaで良いと思います.そのままOkを押します.

ICAの計算が始まりました.めっちゃ長いです.結構重めな計算なので,ノートPCなんかを使っている人は割と時間かかります.コーヒーでも入れてゆっくり待ちましょう.

途中でやめたい場合はInteruptを押しますが,まぁ辛抱強く待ってください.

完了すると,Interuptのウィンドウが閉じてコマンドウィンドウにDoneと表示されます.
この時,メニューを見てみるとICA weightsがYesになっていれば無事にICAの計算が終わったことになります.

結果を見てみましょう.

Componentの手動選択

ICAで分解した成分の中から,本来解析したい「脳波っぽい」成分だけを残し,他のいらない成分を消していきます.まずはICAの結果確認がてら,手動でやっていきましょう.

Tools -> Reject data using ICA -> Reject components by map

を開きます.

EEGLABのICAは電極数と同じだけの成分に分解します.今回は65chのデータだったので,1-65のコンポーネントが選択されています.このままOkを押します.

時間をかけてゆっくりと,65個のコンポーネント,成分のトポマップが表示されます.トポマップとは頭上での電位分布です.上の出っ張ってるのが鼻で,頭を上から見ているイメージです.赤や青が±で強い電位が乗っている場所です.

さて,この65個の中から,「脳波っぽいデータ」「脳波っぽくないデータ」を判断し取り除いていく必要があります.どんな基準で見ていくのかと言うと,大きく

になると思います.とりあえず,気になる成分の上の緑の□を押して詳細を見てみましょう.たとえば24個目だと

このような詳細が確認できます.左上が電位分布,右上が試行特異性およびERP,下が周波数特性です.

まずこのコンポーネントは分布的に明らかに右目に偏っているので,眼電と判定できそうです.

試行で見るとだいたい20~40トライアルのあたりでめちゃくちゃ出てます.きっとその時疲れて集中力が切れ,目を動かしまくっていたのでしょう.

さらに周波数で見ても怪しいです.脳波はBergerの報告以降一貫して,α波(10~15Hzあたり)あたりに強いピークを持つことが知られています.また解析の特性上,低周波ほどパワーが強く高周波になるにつれ弱くなる,右肩下がりの分布になるはずです.しかしこの成分は20Hz以上の高周波が強く,これは筋電が由来であると推定できます.

以上の理由からRejectです.真ん中下のACCEPTをクリックすると,REJECTに変わります.Epoch rejectionの時同様,こうしてrejectする成分にマーカーをつけていき,あとでまとめて削除します.色を変えたらOkを押してウィンドウを閉じ,この調子で他の成分も見ていきましょう.

てな具合でこいつらも怪しいので消していきます.

選び終わったら,右下のOkを押して選択を終了します.

さて,明らかにノイジーなやつは良いですが,微妙なところにいるやつだと疑わしきは罰せよ派と,疑わしきは罰せず派がいるので難しいところです.更に「ここら辺の電極のデータを解析したいからなぁ...」なんて研究者の心の声までも聴こえてきたりしてしまうと,恣意的な下処理にならざるを得ません.そこで,やはりおすすめは自動化することです.

Componentの自動選択(ICLabel)

自動で除去するコンポーネントを選択してくれる関数その1,ICLabelを利用する方法です.

Tools -> Classify components using ICLabel -> Label components

出てきたポップアップでは

デフォルトを選択.

表示するのは全電極,周波数は見たい範囲でてきとうに.Ok

表示される結果は,先程みたICAのトポマップに加え,それぞれのコンポーネントの下に「なにっぽい成文か」の判定結果も表示されています.便利ですね.詳細を見てみましょう.

Eye:97%と,EEGLAB的にはどう見ても眼電だという結果になりました.このように,この関数は得られたコンポーネントが脳波,筋電,眼電,心拍,計測器由来のノイズ,その他のどれに見えるかの判定をしてくれます.あとはこれに従い,怪しいのを消していく作業をすればOKです.

Componentの自動選択(ADJUST)

次も同じように,やはり自動でコンポーネントの中身を見て怪しい奴をマークしてくれるADJUST関数です.

Tools -> ADJUST

ADJUSTは判断結果をテキストファイルとして別途出力します.( 別にいらないんだけど )名前をてきとうに決めてOk

やはりトポマップで,削除すべきコンポーネントを選択してくれます.これは...結構ひどいデータですね.我ながら被験者がひどい.向いてないですね自分.

ともかく,赤くなっているのが削除すべきコンポーネントです.詳細をクリックして開いて,削除すべきと思ったらACCEPTのボタンを押してREJECTに変えておきましょう.すると赤だったボタンがピンクになります.ピンクはREJECTマーカーです.どんどんやっていきましょう.

終わりました.18?ものコンポーネントを削ることになりましたが,まあやってみましょう.Okを押して終了します.

Componentの除去

いよいよ,手動なりICLabelなりADJUSTなりで選択した,削除すべきコンポーネント達を消す手順になります.

Tools -> Remove components from data

すると,

選択されているコンポーネントの一覧の確認が出ます.

問題なければYes

さらに念押しされます.大丈夫ならAcceptします.
ここでかなり脅されていますが,やらかしたならデータセットから前のバージョンに戻れば良いだけです.気軽にアクセプトしましょう.(ちゃんと作業途中でデータセットを保存している人は,です.)

削除は一瞬で終わります.メニューを見てみると,分かりにくいですがデータ量がちょっと減っているはずです.

データセットの保存

ここまでで,基礎的な下処理はひとまず終わりです.作業もひと段落なので,ここでデータセットを保存しておきましょう.

保存しておかないと,一度EEGLABを閉じてしまったらせっかく行っていた計算結果が消えてしまいます.忘れずに保存しましょう.

さて.データセットの保存は

File -> Save current dataset

です.どちらでも良いです.

分かりやすく名前をつけておきましょう.

豆知識ですけど,EEGLABのUIを使って解析とかをやる場合,_(アンダーバー)は下付き文字の記号として使われてしまうので名前に使うのは避けた方が良いです.癖で何回も同じミスして汚い図が出てます.(この記事も多分そう)

次へ