ある方から、「CONNで前処理したfMRI画像から、デフォルト・モード・ネットワーク(DMN)の時系列データを取り出すにはどうしたらよいですか?」というご質問をいただきました。
鍵となるプログラムは以下の2つです。
- conn_matc2nii
- spm_summarise
以下に、方法を記載します。
ある方から、「CONNで前処理したfMRI画像から、デフォルト・モード・ネットワーク(DMN)の時系列データを取り出すにはどうしたらよいですか?」というご質問をいただきました。
鍵となるプログラムは以下の2つです。
以下に、方法を記載します。
CONNでPreprocessingが終わった後、ノイズ除去を行います。
CONNでは2段階でノイズを除去します。第1段階は linear regression (線形回帰) で、第2段階は temporal band-pass filtering (時間バンドパスフィルタリング) です。
SETUPの最後、Optionsも軽くみておきましょう。
Covariates (1st-level) をみていきます。ここのCovariatesは個人のfMRI画像に関する情報が入っています。
サンプルデータのSubject 1でみていきます。
前処理が終わり、QA plotsで不適なsubjectsを取り除きました。次にROIsとConditionsを確認します。
ここでは、画像が不適であることがわかった場合のSubjectの取り除き方を説明します。
前処理のQAで今回準備したサンプルデータでは、Subject 16は解析に不適ということがわかりました。なので、これを省きたいと思いますが、その前に準備している Covariates を登録しておきます。(そうでないと Covariates を入れてある subjects.txt を編集し直さないといけないからです。)
前処理が終わったら、前処理のQA (Quality Assurance) を行いましょう。よくQC (Quality Check)という言葉が使われますが、QAはQCと同義です。
構造画像と機能画像を指定したら、前処理 Preprocessing を行います。
脳画像解析を行う際には、「ワーキングディレクトリ」を意識することがとても大切になります。なぜならば、ワーキングディレクトリの中に画像データが保存されていくからです。CONNも例外ではありません。
そして、忘れられがちですが、Matlabでまずワーキングディレクトリに移動してからCONNやSPMを起動すると、ファイルの選択などが非常に容易になります。
今は、conn_practice.zip を展開してできた conn_practice をワーキングディレクトリとして設定したいと思います。
CONNの記事を最初に書いてからほぼ5年が経ちました。
多くの方に「CONNを使えるようになりたい」という質問をいただくので、改めて、2021年8月時点の最新バージョン 20.b を用いてCONNの使い方を紹介していきたいと思います。
多くの方から、”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” をクリックしてください。
これを見ていきます。
これは、connectivityの行列のサイズを示します。今は、164のROIを使っているとわかります。
これは、左側にある図の seed がどれかを示します。今は、右前頭極がシードになっています。左側の絵が真っ黒ということは、右前頭極と相関をきたす領域で、統合失調症が健常者より落ちているconnectivityはなかったということになります。ちなみに、seedは、ひとつずつ変更していくと、左の絵が変わりますし、CtrlキーやShiftキーを使って複数選ぶことも可能です。下の”Select all”を選ぶと、ROIをすべて選ぶことになります。あたりをつけるために、やってみるといいと思います。今の場合でやった結果を下に示します。
ここで統計の閾値を設定します。今は、FDRで多重比較補正をかけて p<0.05 となります。 閾値を変更したかったらここで変更します。
その下にあるのは、統計結果です。領域が出ているところを選択すると、左側でどのconnectivityかを示してくれます。
表示も変えてみましょう。
メニューの View -> axial view を選んでください。
そうすると、以下のようになります。
きれいですね。
coronal, sagittalも同様です。
そして、3d viewを選択すると、以下のようになります。
これも素敵ですね。
こんな感じで結果を表示できます。
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に対して上書き保存してください。
これは本来は、First-level Analysisをやる前に確認しておくものですが、忘れたので、今、書きます。
first-level Analysisで結果を確認したとき、サンプルデータのSubject 16において、以下のようにDMNではなく、かなり変な結果になりました。
これはおかしいですね。
改めてSetup -> Covariates 1st levelのところにいってscrubbingの結果を確認すると、
ほとんどすべてが外れ値と判定されていることがわかります。
ちなみに、次のSubject, Subject 17の結果を見れば本来はこの程度ということがわかります。
この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を見ると、何やらいろいろコピーしているのが見えます。
終わりましたら、改めて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をするといいのかもしれません。
(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項目設定する必要があります。
ここで、何の解析をするかを決定します。デフォルトは、”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”をここでは選んでいます。
ここでは解析のオプションを指定します。上段の選択肢は4つ、”correlation (bivariate)”, “correlation (semipartial)”, “regression (bivariate)”, “regression (multivariate)” となります。 2変量の相関係数、半偏相関係数、2変量の回帰分析のβ, 多変量回帰分析のβということですね。どんな解析をするかによって異なります。今回は、シンプルにデフォルトの2変量の相関係数とします。
その下の段のデフォルトは、デフォルトの no weighting で大丈夫です。タスクfMRIの時にここを変える必要が出てくると私は理解しています。
次に、画面左側の Voxel-to-Voxel をクリックします。
そうすると、画面中央が下のような図になるはずです。
ここでは、主成分分析、独立成分分析、MVPA、ALFFの計算などができます。
私は、独立成分分析 (ICA) を行ってみたいので、Analysis typeの下をクリックして、”Group ICA” を選択しました。
これは、独立成分分析の際のFactor数です。デフォルトの20のままにしました。
これは、独立成分分析を行う際に、connectivity matrixの次元を落とすというものです。デフォルトの64にしました。
その下に dyn-ICA circuits (dynamic ICA circuits) がありますが、ここは正直私の手にはおえないので、何も変更しませんでした。
このうえで、左下のDoneをクリックします。
そうすると、first-level Analysisの解析が行われます。
Setupがすべて済んだらDenoisingです。
正直、ここはすべてデフォルトのままで大丈夫です。
ただ、ひとつひとつ確認する価値があります。
確認ポイントはいくつかあります。
これをひと通り確認したら、左下の”Done”をクリックしてください。
先ほどのOptionsの時と同じ画面が出ますので、 “Start” で処理がはじまります。
Setupの最後のところまで来ました。
最後はOptionsです。
ここは、デフォルトのままで大丈夫です。
ここまでいったら、一度保存しましょう。
左上の Project -> Save で現在のプロジェクトを保存できます。
そこまでいったら、左下の “Done” をクリックしてください。
そうすると、下のような画面が出てきます。
デフォルトのままで結構です。
Startをクリックすると処理がはじまります。
しばらく時間がかかりますので、その間、ちょっと休憩です。