CONNチュートリアル (20.b対応): SETUP – Covariates (2nd-level)

前処理のQAで今回準備したサンプルデータでは、Subject 16は解析に不適ということがわかりました。なので、これを省きたいと思いますが、その前に準備している Covariates を登録しておきます。(そうでないと Covariates を入れてある subjects.txt を編集し直さないといけないからです。)

続きを読む

CONNチュートリアル (20.b対応): ワーキングディレクトリの設定

脳画像解析を行う際には、「ワーキングディレクトリ」を意識することがとても大切になります。なぜならば、ワーキングディレクトリの中に画像データが保存されていくからです。CONNも例外ではありません。

そして、忘れられがちですが、Matlabでまずワーキングディレクトリに移動してからCONNやSPMを起動すると、ファイルの選択などが非常に容易になります。

今は、conn_practice.zip を展開してできた conn_practice をワーキングディレクトリとして設定したいと思います。

続きを読む

CONNチュートリアル (20.b対応): 必要なデータ

CONNのために必要なMRIデータ

CONNを使うために必要なデータは、3次元T1強調画像と安静時脳機能画像です。安静時脳機能画像は、4次元画像の方がとりまわしがしやすいです。3次元fMRIデータを4次元fMRIデータに変換する方法は、こちらの記事にまとめましたので、そちらをご参照ください。

続きを読む

CONNチュートリアル 15: Second-level Analysis 群間比較

多くの方から、”Second-level Analysis”のチュートリアルを執筆するように言われていましたが、なかなか時間がとれなかったのでそのままになっていました。
ようやく、時間がとれたので second-level analysis にいきます。

First-level analysisで Done と押すと、以下のような画面になるはずです。

ここで、大事なのは、画面中央の “Subject effects” と “Between-subjects contrast” です。

CONNがすごいのが、SPMで設定するコントラストを自動で考えてくれるところです。

それでは、2群間の比較から行きましょう。

健常者より統合失調症でfunctional connectivityが落ちているところをまず探したいと思います。
年齢と性別は共変量として扱いましょう。

まずは、”Subjects effect” のところで、シフトキーを押しながら、

control
patients
age
gender

の4つを選択します。

次に、Between-subject contrastsで、”Any effects of interest” のところをクリックして、”control > patients”を選択します。

そうすると、上のコントラストが自動で [1 -1 0 0] となります。

つまり、SPMで自分で設定しなければいけないコントラストを、CONNは自動で設定してくれるのです。

そうすると、画面下に、統計の表があらわれます。

ただ、これは味気ないので、もう少しファンシーな結果を見ましょう。
画面左下にある “Results explorer” をクリックしてください。

これを見ていきます。

  • Define connectivity matrix
  • これは、connectivityの行列のサイズを示します。今は、164のROIを使っているとわかります。

  • Select seed ROI(s)
  • これは、左側にある図の seed がどれかを示します。今は、右前頭極がシードになっています。左側の絵が真っ黒ということは、右前頭極と相関をきたす領域で、統合失調症が健常者より落ちているconnectivityはなかったということになります。ちなみに、seedは、ひとつずつ変更していくと、左の絵が変わりますし、CtrlキーやShiftキーを使って複数選ぶことも可能です。下の”Select all”を選ぶと、ROIをすべて選ぶことになります。あたりをつけるために、やってみるといいと思います。今の場合でやった結果を下に示します。

  • Define thresholds
  • ここで統計の閾値を設定します。今は、FDRで多重比較補正をかけて p<0.05 となります。 閾値を変更したかったらここで変更します。

  • 統計結果
  • その下にあるのは、統計結果です。領域が出ているところを選択すると、左側でどのconnectivityかを示してくれます。

表示も変えてみましょう。

メニューの View -> axial view を選んでください。

そうすると、以下のようになります。

きれいですね。

coronal, sagittalも同様です。

そして、3d viewを選択すると、以下のようになります。

これも素敵ですね。

こんな感じで結果を表示できます。

CONN 17a のバグとその解決方法

CONN17a において、何人かからうまく動作しないというご連絡をいただきました。

以下のようなエラーメッセージが出ます。

Error using conn_process (line 763)
duplicated ROI name atlas.Vermis 10
Error in conn_process (line 15)
case 'setup', disp(['CONN: RUNNING SETUP STEP']); conn_process([0:4,4.5,5]);

調べた所、以下のバグが報告されています。

https://www.nitrc.org/forum/forum.php?thread_id=7356&forum_id=1144

解決策として、以下のリンクからrex.mをダウンロードし、CONN17aにあるrex.mに対して上書き保存してください。

rex.mをダウンロード

CONNチュートリアル 14: QA (Quality Assurance)

これは本来は、First-level Analysisをやる前に確認しておくものですが、忘れたので、今、書きます。

first-level Analysisで結果を確認したとき、サンプルデータのSubject 16において、以下のようにDMNではなく、かなり変な結果になりました。

これはおかしいですね。

改めてSetup -> Covariates 1st levelのところにいってscrubbingの結果を確認すると、
ほとんどすべてが外れ値と判定されていることがわかります。

conn052

ちなみに、次のSubject, Subject 17の結果を見れば本来はこの程度ということがわかります。

conn053

このscrubbingの話は、いつかもう少し詳しくしますが、要するに、頭が大きく動いてしまっているボリュームを検出する機能です。CONNは適切な結果を得るために、scrubbingにひっかかったボリュームは取り除いて解析します。今、Subject 16に関しては、ほとんどすべてが外れ値だったために、時系列の相関を計算するのに十分なボリュームがなくなってしまったわけです。

そこで、改めて、Quality Checkをします。CONNのチュートリアルでは、QCではなく、QAといっていました。Quality Assuranceの略ですね。興味深かったので、そのままにします。

QAのひとつは、Setup – Covariates 1st-levelでscrubiingを見ることでできます。

今、見た所、Subject 16, 19の2つがかなり外れ値が多い状況です。
(以前の投稿では、4被験者でしたが、外れ値の判定をゆるくしたことで、Subject 16, 19以外はOKと判断しました)

なので、このSubject 16, 19は取り除きたいと思います。

普通、このような場合、解析を最初からやらなければいけないのですが、CONNのものすごい親切なところは、Setup – BasicでSubject数を減らすと、取り除くSubjectを聞いてくれるのです。

なので、Setup Basicに戻り、今の20例から2例をひきますので、Number of Subjectsを18に変更します。

そして、Enterを押すと、新しいダイアログが出ます。

ここで、取り除きたいSubject 16と19を選択します。複数選ぶ場合は、Ctrlキーを押しながら選択することで、選択できます。

これでOKを押すと、「本当に消してもいいの?回復できないよ」と確認されます。

これでOKを押すと、しばらく何も起こらないように見えますが、MatlabのWindowを見ると、何やらいろいろコピーしているのが見えます。

conn057

終わりましたら、改めてSetup -> Covariates 1st-levelを見てみましょう。
Subjectが18に減っているのがわかると思います。

こればかりでは、ありません。Setup -> Covariates 2nd-levelを見てみてください。
なんと、先ほど設定したCovariateで削除した2例分がきちんと削除されているのがわかります。
これはとても便利ですね。(また、本論から外れますが、covariate 2nd-levelの項目が増えていますね)

最後に、first-level Analysisに戻りましょう。
もちろん18例のデータだけで構成されていることがわかります。

このQAは本来は、Preprocessingの後にすべきことです。上記のようにCovariatesも処理してくれるので、Covariates 2nd-levelを設定した後で、このQAをするといいのかもしれません。

CONNチュートリアル 13: first-level Analysis: ROI-to-ROI & Seed-to-Voxel

(2017.11.26: 追記しました)

Denoisingが終わった後、first-levelの画面に来ます。
first-levelということは、

個人のfunctional connectivityを見る

ということになります。

最初は、下のようなものしか見えません。

ROI-to-ROIとSeed-to-Voxelがひとつ
Voxel-to-VoxelとICA networksが次にきて、
最後にdynamic ICAがきます。

まずは、ROI-to-ROI, Seed-to-Voxelを見ていきましょう。

ROI-to-ROIをクリックします。

ここでは画面の右側でいろいろなことが確認できますので、右側のスクリーンショットで説明します。

上にある “Preview first-level analysis results”
の下に領域を選ぶことができます。

この領域は “Seed” になる領域です。

まず、わかりやすく、デフォルトモードネットワーク(DMN)を確認してみましょう。

atlas.FP r のところをクリックすると領域が多く出てきますので、スクロールして、”networks.DefaultMode.PCC (1,-61,38)”を選択してください。

画像が見えているところの右側にマウスをもっていくとスクロールバーがあらわれますので、適宜スクロールしていただくと、確かにDMNっぽい感じで見えます。

ただ、これは色がつきすぎの感じがしますね。

画面下を見ると threshold 0.25 と見えます。
これは、今の場合Default Mode NetworkのPCCと相関係数0.25以上の関係にある領域を描出しているということになります。

この値を変えてみることで変わります。

そして、一番右側にあるSubjectsを適宜クリックしていくと、各個人のDMNの様子を観察することができます。

続いて、どんな解析をしていくのかを決定します。

画面中央をご覧ください。

ここに

Analysis type
Analysis options

とあり、それぞれ2項目設定する必要があります。

  • Analysis type
  • ここで、何の解析をするかを決定します。デフォルトは、”functional connectivity (Weighted GLM)” となっています。このままで大丈夫です。もし、Psychophysiological interaction (PPI)などをしたい場合は、変更します。

    その下の段のデフォルトは、”ROI-to-ROI analysis only” となっています。ここをクリックすると、”ROI-to-ROI” と “Seed-to-Voxel”を選ぶことができるのがわかります。いろいろな結果を見てみたいので、”ROI-to-ROI and “Seed-to-Voxel”をここでは選んでいます。

  • Analysis options
  • ここでは解析のオプションを指定します。上段の選択肢は4つ、”correlation (bivariate)”, “correlation (semipartial)”, “regression (bivariate)”, “regression (multivariate)” となります。 2変量の相関係数、半偏相関係数、2変量の回帰分析のβ, 多変量回帰分析のβということですね。どんな解析をするかによって異なります。今回は、シンプルにデフォルトの2変量の相関係数とします。

    その下の段のデフォルトは、デフォルトの no weighting で大丈夫です。タスクfMRIの時にここを変える必要が出てくると私は理解しています。

次に、画面左側の Voxel-to-Voxel をクリックします。

そうすると、画面中央が下のような図になるはずです。

  • Analysis type
  • ここでは、主成分分析、独立成分分析、MVPA、ALFFの計算などができます。
    私は、独立成分分析 (ICA) を行ってみたいので、Analysis typeの下をクリックして、”Group ICA” を選択しました。

  • Number of factors
  • これは、独立成分分析の際のFactor数です。デフォルトの20のままにしました。

  • Dimensionality Reduction
  • これは、独立成分分析を行う際に、connectivity matrixの次元を落とすというものです。デフォルトの64にしました。

その下に dyn-ICA circuits (dynamic ICA circuits) がありますが、ここは正直私の手にはおえないので、何も変更しませんでした。

このうえで、左下のDoneをクリックします。

そうすると、first-level Analysisの解析が行われます。

CONNチュートリアル 12: Denoising

Setupがすべて済んだらDenoisingです。

正直、ここはすべてデフォルトのままで大丈夫です。
ただ、ひとつひとつ確認する価値があります。

確認ポイントはいくつかあります。

  • 左の “Confounds” をご覧ください。ノイズを減らすために、白質、CSF、realignment, scrubbingの情報を使っています。
  • 左下にはバンドパスフィルタの情報がのっています。
  • 一番右のSubjectsを選ぶことで、各個人のデータがどのようにノイズが減るのかがわかります。
  • ヒストグラムで、実際にデータがどのようになるのかが直感的に理解できます。灰色のヒストグラムがDenoising前、黄色のヒストグラムがDenoising後です。
  • ヒストグラムの下はボクセル同士のconnectivityがDenoisingによってどのように変化するかを示しています。これを見ると、ノイズによる見せかけの相関が減っていることがわかります。
  • 相関グラフの下は、BOLD信号のタイムシリーズの信号値がDenoisingによってどのように変化するかを示しています。

これをひと通り確認したら、左下の”Done”をクリックしてください。
先ほどのOptionsの時と同じ画面が出ますので、 “Start” で処理がはじまります。

CONNチュートリアル 11: Setup – Options

Setupの最後のところまで来ました。

最後はOptionsです。

ここは、デフォルトのままで大丈夫です。

ここまでいったら、一度保存しましょう。

左上の Project -> Save で現在のプロジェクトを保存できます。

そこまでいったら、左下の “Done” をクリックしてください。
そうすると、下のような画面が出てきます。

デフォルトのままで結構です。
Startをクリックすると処理がはじまります。
しばらく時間がかかりますので、その間、ちょっと休憩です。

CONNチュートリアル 10: Setup – Covariates 2nd-level

続いてCovariates 2nd-levelの設定です。
このCovariates 2nd-levelは、今設定しなくても大丈夫です。
(逆に言うと、これまで設定してきたものは最初に設定する必要があります。)
2nd levelのCovariatesは解析を進めていくなかで追加したくなるものもありますので、そのような親切な設計になっています。

ただ、今は、設定しましょう。

楽をしたいので、Matlabの方で少し準備を進めます。

まず、Matlabで現在のディレクトリを確認します。

pwd

で確認できます。

conn037

もし、conn_practiceのディレクトリにいないようでしたら、移動します。

そして、さらにその下のsampleディレクトリに移動します。

cd sample

この中にSubjects.txtというファイルがあります。
これはMatlabで読み込むことができるように工夫してあります。

これをMatlabで読み込み、subjという変数に代入しましょう。
変数名は何でもいいのですが、タイプすることを考えると短い方がいいでしょう。

Matlabから

subj=load('subjects.txt');

とすると、右側のワークスペースにsubjという変数ができているのがわかります。

subj

でその内容を見ることができます。

conn038

ここで、第1列は、IDなので実際は使いません。
第2列は、診断(健常者か統合失調症か)
第3列は、年齢
第4列は、性別(男性が1、女性が2)

となっています。

Matlabでは、変数の中で特定の列だけ使いたい場合は、

変数(:,その列)

という表し方をします。

今の場合、診断だけ取り出したいのであれば、

subj(:,2)

で表すことができます。

それで、CONNはMatlabで動くので、今作った変数をそのまま使うことができます。

それでは、CONNに戻ります。

左側のメニューからCovariates 2nd-levelに進みます。
(バージョン17からQAの結果がCovariates 2nd-levelに自動で入るようになりました。)

そして、画面中央の左側にあるCovariatesで”All Subjects”とある下をクリックします(何もないところです)。
そうすると、右側にenter covariates name hereと出てきます。

これから、診断と年齢と性別を順番にいれていきましょう。

まずは診断です。もともとのファイルには、健常者0、統合失調症1となっていますが、今後、群間比較することを考えて、controlという変数とpatientという変数を準備します。

まず、健常者から準備しましょう。

covariates nameを “control” とします。

[0 0 0 … 0 0 0]と0が20個並んでいますが、これを削除し、以下のようにタイプしてEnterキーを押してください。

subj(:,2)==0

subj(:,2)は先ほど出てきたものです。

subj(:,2)==0は、Matlabでの論理値というもので、0であれば真の値として1を、それ以外は偽の値ということで0を返すものです。つまり、今の場合、健常者は0なので、0であれば1にして、それ以外(といっても1しかないのですが)は0にするというものです。

また、画面下の方の”Description”には説明をつけられるようになっています。なので、今は”Control subjects”と入れておきましょう。

そうすると、下のようになるはずです。

次に、patientを準備します。

covariates nameを “patient” とします。

Valuesは

subj(:,2)==1

となります。

Descriptionは必須ではないのでいれなくてもいいでしょう。
ここでわざわざControlとPatientをわけておく理由は、後で群間比較をするためです。いわゆるダミー変数です。

同様に、年齢、性別も入れていきましょう。

年齢は
covariates name: age
values: subj(:,3)

性別は
covariates name: gender
values: subj(:,4)
Description: Male=1; Female=2

とします。

その結果、図のようになります。

Descriptionを書いておくと、項目名のすぐ右側にそのDescriptionが表示されるのですね。便利ですね。

ここまでできれば、共変量の設定はおしまいです。