VB_EEGLAB
Contents
初めに _
VBMEGのプログラムを使えば、EEG/MEGから脳内の電流源が推定できるが、その前にデータ自体をしっかりみることは重要でしょう。残念ながらVBMEGでは、そのようなソフトウェアまではサポートしていません。現在VBMEG(ver0.30以降)では、job_plot_meg.mというGUIを用いて時間窓を変更しながらインタラクティブに表示するソフトウェアが提供されています。しかしながら、複数の磁場データをまとめて表示する時、GUIよりはスクリプトを使って一度に表示したいということもあるでしょう。そこでEEGLABのビジュアライゼーション機能を使って、VBMEGの".meg.mat"形式のデータを表示する方法を紹介します。
全チャンネルの時系列をスクロールバーで見たり
時系列をセンサ位置上に表示したり (plottopo.m)
時系列とスカルプマップを同時表示したり (timtopo.m)
スカルプマップの時系列を表示したり (topoplot.m)
したい人は、ちょっと面倒でもこのドキュメントを読みましょう。比較的簡単に使えるようになるはずです。
構成 _
"準備"の節は、みなさんとりあえず読みましょう。
EEGLABを使って表示する方法は、2通りあります。 1つはEEGLABのGUIを使ってメニューから選んでいく方法。もう1つはEEGLABの関数をMATLABのスクリプト等から直接呼び出す方法です。
このドキュメントでは、EEGLABに馴染みはないけど、MATLABはお手のものという人のために スクリプトで使う方法を
- EEGLABの関数を使ったMEGデータ表示(完結編)
で説明します。この部分はEEGLABの知識なくても、簡単に使えることを目指して書いてみました。ある程度MATLABに慣れていて、EEGLABを学ぶのが面倒という人はこの部分だけを読みましょう。
おまけとして、
- GUIを使った図表示方法
を後半で説明します。EEGLABのGUIは、VBMEGのjob_plot_meg.mでサポートしていない機能もたくさんありますので、試してみるのも良いと思います。
準備 _
インストール _
まずは、http://www.sccn.ucsd.edu/eeglab/から、EEGLABの本体、マニュアル、あとついでに例題用のデータセット類をダウンロードしておきましょう。このドキュメントで使うのは、本体とマニュアルだけですが、EEGLABの他の機能を使いたい人は、データセットとマニュアルは必須です。ダウンロードが面倒な人は、CBI山下まで連絡くれれば、最新バージョンではないですが一式お渡しします。インストール自体はごく簡単です。 ダウンロードしてきたアーカイブ ("eeglab4.511.tar.gz"等) を適当な ディレクトリ ("EEGLab"とする) を作ってそこで解凍しましょう。 "EEGLab/eeglab4.511/", "EEGLab/biosig/"のように2つのディレクトリが作成されます。例題データセットもダウンロードした人は、"EEGLab/eeglab4.511/sample_data/" 以下に置きましょう。
2006/07/11現在、EEGLABは、ver5.0*系になっています。互換性はあると思いますが、この記事はあくまでver4.511を対象にしていることを留意してください。
EEGLAB関数を使ったMEGデータ表示(完結編) _
ここでは、EEGLABのプロット関数群をスクリプトから直接呼び出す方法を説明します。この記事を読めば、EEG/MEGのデータを頭皮上への射影したイメージ図として表示することが、簡単にできるようになります。特に
- センサ位置に各チャンネルの時系列を表示する(plottopo()関数)
- 任意の時刻のスカルプマップを表示する(topoplot()関数)
は使い勝手の良い関数ですから、是非使えるようになりましょう。
ここで学ぶ重要なポイントはただ一点です。VBMEGではセンサの位置情報をpickという変数に納めています。それをEEGLABのセンサ位置情報を納める変数フォーマットにどのように変換するかを理解すれば終了です。あとは、EEGLABの各関数を呼び出すだけです。
以下では、EEGLABがインストールされていることを仮定します。
サンプルプログラム sample_script.m _
以下はサンプルスクリプトの中身です。
-------------------------------------------- % Example how to use EEGLAB plot function clear Time = [1:10:60]; % load (load_channel is preferable) load('sample.meg.mat', 'pick','bexp'); % conversion chan = eeglab_gen_chanloc(pick, 'SBI'); % topoplot for tt = 1 : length(Time) subplot(3,2,tt) topoplot(bexp(:, Time(tt)), chan, 'electrodes', 'off'); title(['Time ', num2str(Time(tt))]); end ------------------------------------------------
ここでは、
- sample.meg.matに納められているMEGデータbexpとpickをロード
- SBIフォーマットのpick変数をEEGLABのフォーマットに変換
- topoplotを使って、Timeで指定した時間のスカルプマップの時系列を表示
します。基本的には、ロードするデータを自分の解析している.meg.matにして、 表示するタイムポイント指定すれば自分用で使えるはずです。
ここで何個か注意点を書いておきます。
- ステップ1のロードは、VBMEGのロード関数 load_channelを使うことをお薦めします。これは、VBMEGでは、YokogawaとSBIとデバイスによってpickの変数の形式が違うためです。
- ステップ2では、VBMEGのversionによって、第2変数coord_systemを指定する必要があります。ver0.1*を使ってる人は、'SBI'を指定しましょう。ver0.2*以降のユーザーはデフォルトを使えば良いので特に指定する必要はありません。
- 最後にEEGLABの関数topoplotですが、第1引数はチャンネル数*1のベクターですから、bexpのどの時間、どのトライアル(もしくは加算平均)を表示するか指定しましょう。細かいオプションについては、topoplotのヘルプを見てください。カラーバーの調整などプロットに必要なことは大抵はカスタマイズできます。
以上でだいたい説明は終了です。topoplotの代わりにplottopoやtimtopoなど 他の関数を使うこともできます。冒頭で紹介したような図が得られるはずですので自分で試してみてください。
センサ位置情報の変換関数 eeglab_gen_chanloc()関数 _
eeglab_gen_chanlocは、EEGLAB用のセンサ位置変数(構造体)をVBMEGのセンサ位置変数'pick'から作成します。引数は4つありますが、第1引数以外はオプショナルです。最新のVBMEGを使っている人などは基本的に第1引数だけ入力すれば良いので簡単に使えるでしょう。
- Function
- chan = eeglab_gen_chanloc(pick, coord_system, Vcenter, savefile)
入力引数 | 説明 | 変数型 ([]内はデフォルト値) | |
---|---|---|---|
pick | センサ位置座標 | Nch*3 matrix | |
coord_system | VBMEGの座標系 | 'anaR' or 'SBI' ['anaR'] | |
Vcenter | 球モデルの中心座標 | 3*1 vector [] | |
savefile | セーブファイル名 | string [] |
使用例
chan = eeglab_gen_chanloc(pick);
補足事項
ここで出力される変数'chan'は、EEGLABのxyz形式であり座標系は、x : 後->前, y : 右->左, z : 下->上のように定義されています。詳しくはeeglab_gen_chanloc関数のヘッダコメント部分の記述を参考にしてください。
スカルプマップのムービーを作る eegmovie()関数 _
この小節はおまけです。EEGLABではスカルマップの動画を作る関数もサポートしています。ここでは、その使い方を簡単にですが説明します。
サンプルプログラムと同じように、EEGLABのセンサ位置変数を作成し、それを動画を作る関数に 渡します。 コマンドラインにおいて
chanloc = eeglab_gen_chanloc(pick); MV=eegmovie(meg,1024,chanloc)
と入力してみましょう。この例では、"meg"は[チャンネル数xタイムポイント]の2次元配列で、サンプリングレートは1024Hzとしています。出力"MV"は、seemovie()関数を用いて、
seemovie(MV)
と入力してみましょう。ムービーが再生できると思います。詳しくは関数のヘルプなどを参照してください。
GUIを使った図表示方法 _
以下の記述はおまけです。ここでは、簡単にプロットするための方法を説明します。ポイントは やはり、EEGLABで使えるセンサ位置座標の形式のファイルを作る点です。
GUIの起動 _
"EEGLab/eeglab4.511"に移動して、Matlabコマンドライン上で'eeglab'と入力します。 EEGLABのメインGUIが立ち上がります。以下では「VBMEGで保存しているMEGデータをEEGLABのビジュアライゼーション機能を使って表示する」ための手順を説明します。基本的にはGUI上のメニュー 'File','Edit','Tools','Plot','Datasets','Help'を使って、少しの試行錯誤は必要ですが、直観的に作業できます。わからない時はマニュアルをよみましょう。
手順 _
手順は大きく分けて、
- データのimport
- センサ情報の登録
- データの表示
ステップになります。EEGLABではプロット以外に、データのrejection、averaging、re-referenceing、spectral analysis、ICAによる信号分離などの処理も行えます。rejectionやICAなどは、VBMEGでサポートされていない部分もありますので非常に有用でしょう。しかし、ここでは目的が違うので説明しません。詳しくはマニュアルを参照してください。
以下の作業では、VBMEG側のデータフォーマットとして、
.meg.mat
の拡張子のついたファイルを用意してください。
1. MATファイルからEEGLABのデータセット形式へのImport
1-1. MEGデータの用意 ImportするMEGデータとして、 megdata(Nch,Nt) または megdata(Nch,Nt,Ntrial) を2次元または3次元行列形式で用意します。ここでは、例として変数名を"megdata" としています。またNch:センサチャンネル数、Nt:タイムポイント、Ntrial:試行数を表します。 VBMEGの'.meg.mat'ファイルをロードすれば、'bexp'という変数にこの形式で入っているので、代入処理
"megdata=bexp;"
以外特に処理は必要ありません。
1-2. データのimport (Manual[II.1]を参照) メインGUIのメニュー
File>Import data>From ASCII/float file or Matlab array
を選択すると、新たにimport設定用のGUIが立ち上がります。
- EEGLAB dataset name : import後EEGLAB上でのデータセット名(例えば"test"とする)
- Data file/array : 変数名 (megdata)
- Data sampling rate : 1000
などを設定しますと、メインGUIに、登録した"test"というデータセットの情報が表示されます。ここでは、まだセンサのチャンネル情報を登録していないので、'Channel locations'は'No'と表示されるの確認しましょう。
2.センサ情報の登録
EEGLABのGUIでは、センサ位置を納めたテキストファイルを一旦作成して、そのあとそれをGUIで 読み込む必要があります。センサ位置情報ファイルは、各センサの座標、名前、また番号などで構成されていて、EEGLABでは座標系の種類(xyz座標、極座標)等によって、数種類のセンサ情報ファイルのフォーマットをサポートしています。ここでは一番簡単な.xyzファイルの作成・登録する方法を紹介します。
2-1. xyzファイルの作成
VBMEGの.meg.matをロードして変数'pick'変数を用意します。その後、コマンドライン上で
eeglab_gen_chanloc(pick,[],[],'meg-chan')
のように入力しましょう。'meg-chan.xyz'というファイルがカレントディレクトリにできるはずです。ちなみにファイル名は好きな名前で指定し構いません。 ファイルを開いてみると、5列のテキストとなっています。最初の列は、センサ番号、2-4列はセンサ座標(xyzフォーマット)、最後の列にはセンサ名を記述されます。
2-2. センサ情報の登録(Manual[I.2]を参照)
メインGUIのメニュー
Edit>Channel Location
を選択します。新たにチャンネル情報登録用のGUIが立ち上がります。 左下の方にある'Read locations'を選択し、ファイルダイアログで2-2で作成した"meg-chan.xyz"を読み込みます。チャンネルの座標や名前に、自動的に情報が書き込まれたの確認します。'Plot 2-D''Plot 3-D (XYZ)'ボタンを押すと、センサ情報が正しく登録されているかを、視覚的に確認することができます。'Plot 2-D'では、センサが頭からはみ出ていることがありますが、おおまかなScalp Map表示のチェックのためならば、細かいことに気にする必要はありません。確認を終えたら、'OK'ボタンを押し、ダイアログを閉じ、メインGUIの'Channel locations'は'Yes'と表示されば作業は無事完了です。
3.データのプロット
3-1. 時系列の表示(Manual[I.1.6]を参照)
メインGUIメニューの
Plot>Channel data (scroll)
を選択します。各チャンネルごとに時系列が新しく立ち上がるGUIに表示されます。このGUIの操作は直感的にできますので詳細は省きます。データのimportが済んでいれば、センサ情報の登録がなくても、表示させることができます。
3-2. 平均ERPの時系列+特定の時間のScalp空間マップの表示(Manual[I.6.1]を参照)
メインGUIメニューの
Plot>Channel ERPs>With scalp maps
を選択します。プロットの時間窓、空間マップの表示時点、キャプションなどの設定用のGUIが立ち上がりますので、適切に入力しましょう。
3-3. 平均ERP時系列をScalp空間マップ上に表示 (Manual[I.6.2]を参照)
メインGUIメニューの
Plot>Channel ERPs>In scalp array
を選択します。プロットするチャンネル、キャプションなどの入力を求めるGUIが立ち上がるので、適切に入力しましょう。オプションの設定によって、各トライアルごとのERPの表示も可能ですが、全てのトライアルに対して空間マップが表示されますので、トライアル数が多いときは、表示に必要なメモリが膨大になりますので気をつけましょう。
3-4. 各チャンネルの平均ERPを2列でsubplot表示 (Manual[I.6.3]を参照)
メインGUIメニューの
Plot>Channel ERPs>In a two column array
を選択します。設定用のGUIが立ち上がりますので、値を適切に入力しましょう。 時系列の表示なので基本的には3.1の時系列表示で十分ですが、ERPを細かく見たいというときに良いと思います。オプションの設定によって、各トライアルごとのERPの表示も可能ですが、全てのトライアルに対して空間マップが表示されますので、トライアル数が多いときは、表示に必要なメモリが膨大になりますので気をつけましょう。
3-5. 平均ERPの2-D scalp空間マップの時系列として表示 (Manual[I.6.4]を参照)
指定した複数の時刻における平均ERPのScalpマップを表示します。 メインGUIメニューの
Plot>Channel ERPs>In a two column array
を選択します。設定用のGUIが立ち上がりますので、値を適切に入力しましょう。
その他注意事項 _
[注意]
- EEGLABではファイルの取得に、Matlab標準のuigetfile関数を呼び出しているが、ある環境でこの関数のGUIがうまく作動しないことがある。動作確認済のクラスタ内のコンピュータでMatlabを立ち上げるのが望ましい。
- EEGLABにおけるスペクトル解析(マニュアルI.3, I.8の解析)では、Matlabの"Signal Processing Toolbox"が必要なのである。
[Term]
- epoch : 試行、trial
- event : 刺激のオンセットなどの情報?、結構重要らしい。
- continuous EEG : 一つの連続したEEG時系列(各epochデータを一つの連続した時系列に並べたものであったり、クリニカルデータであったりする)
- ERP : Event Related Potential
- スカルプマップ : 頭皮上の電位または磁場の等高線図付カラーイメージ。
2005 2/18 by Okito Yamashita
2006 11/08 by Okito Yamashita