1. 目的
2. VBAとは
2.1. ファイルの準備
2.2. 脳解剖学的標準化
2.3. 平滑化
2.4. GLMと並べ替え検定(permutation test)
3. おまけ
1. 目的
- Voxel-BasedAnalysis: VBA
2. VBAとは
Voxel-Based Analysis(VBA)は、脳構造解析手法の一つであり、現在では脳科学の分野において幅広く用いられている。VBAは、観測者が関心領域を設定して解析する古典的なマニュアル計測とは異なり、自動処理によって全脳をボクセルごとに解析するため、評価の客観性が高い。
VBAの解析手順は、次の通り。
- ファイルの準備
- 脳解剖学的標準化
- 平滑化
- GLMと並べ替え検定(permutation test)
2.1. ファイルの準備
VBA解析をしたファイルを準備する。
ここでは、拡散MRIから計算したFA画像を準備する。健常者10名(ID: Con0001~Con0010)と患者10名(ID: Pat0001~Pat0010)いることを想定する。
1 2 3 4 5 6 | . ├── Con0001_FA.nii.gz ├── Con0002_FA.nii.gz ├── Con0003_FA.nii.gz ... └── Pat0010_FA.nii.gz |
2.2. 脳解剖学的標準化
非線形変換を用いて、全ての被験者のFA画像を標準FA画像(FMRIB58_FA)に位置合わせする。
以下のコマンドを実行する。
01 02 03 04 05 06 07 08 09 10 | mkdir preprocessing for SUBJ in $( ls | grep _FA.nii.gz | cut -d . -f1); do # 位置合わせ ## Affine transform flirt - in ${SUBJ}.nii.gz -ref ${FSLDIR} /data/standard/FMRIB58_FA_1mm .nii.gz \ -dof 12 -omat preprocessing/${SUBJ}_indiv2std.mat ## non-linear transform fnirt -- in =${SUBJ}.nii.gz --aff=preprocessing/${SUBJ}_indiv2std.mat --config=FA_2_FMRIB58_1mm.cnf \ --cout=preprocessing/${SUBJ}_warp_indiv2std.nii.gz --iout=preprocessing/${SUBJ}_instd.nii.gz done |
位置合わせ方法の詳細は、こちらの記事を参考に。
https://www.nemotos.net/?p=4513
2.3. 平滑化
非線形変換を用いた位置合わせで、脳解剖学的標準化をしたとしても、ボクセル単位でみると完全に標準化できているわけではない。そこで、そのようなエラーを抑えるために平滑化処理をする。
まず、標準FA画像に位置合わせをした、被験者ごとのFA画像をまとめて4D-FA画像(all_FA.nii.gz)とし、4D-FA画像の平均画像からマスク画像を生成する。
1 2 3 | mkdir stats fslmerge -t stats /all_FA .nii.gz preprocessing/*_instd.nii.gz fslmaths stats /all_FA .nii.gz -Tmean -bin mask stats /all_FA_mask .nii.gz |
次に、ガウシアンフィルタを用いた平滑化処理をする。
ここでは、よく用いられるσ=3 voxel(FWHM=約7mm)のガウシアンフィルタで平滑化する。
1 | fslmaths stats /all_FA .nii.gz -fmean -s 3 stats /all_FA_smoothed_s3 .nii.gz |
2.4. GLMと並べ替え検定(permutation test)
ガウシアンフィルタで平滑化した灰白質画像を用いて、健常群と患者群の群間比較をする。
まず、GLMのデザインマトリックス(計画行列)とコントラストを設定する。
今回は、健常者10名(ID: Con0001~Con0010)と患者10名(ID: Pat0001~Pat0010)のデータがある。すべての被験者のFAをls
コマンドでみると、先に健常者10名のFA、次に患者10名のFAが並んでいることが分かる。
1 | ls | grep nii |
Con0001_FA.nii.gz
Con0002_FA.nii.gz
Con0003_FA.nii.gz
...
Pat0010_FA.nii.gz
次に、GLMのデザインマトリックス(計画行列)とコントラストを決める設定ファイルを生成する。design_ttest2 <出力ファイル> <健常者数> <患者数>
でコマンドを実行。
1 | design_ttest2 stats /design 10 10 |
statsフォルダに、デザインマトリックス(design.mat)とコントラスト(design.con)が生成される。
デザインマトリックス(design.mat)の中身を確認。
/Matrixの一列目は健常者データであるかどうか、二列目は患者データであるかを0, 1で表している。行の順番は、被験者フォルダにあるファイルの順番(昇順)に対応する。したがって、これらは対応があるようにしておかなければならない。
1 | cat stats /design .mat |
/NumWaves 2
/NumPoints 20
/PPheights 1 1
/Matrix
1 0
1 0
1 0
1 0
1 0
1 0
1 0
1 0
1 0
1 0
0 1
0 1
0 1
0 1
0 1
0 1
0 1
0 1
0 1
0 1
コントラスト(design.con)の中身を確認してみる。
/Matrix一列目は健常者の偏回帰係数、二列目は患者の偏回帰係数に対するもので、行は別々のコントラストである。この場合、一行目は健常者>患者の検定、二行目は健常者<患者の検定に相当する。
1 | cat stats /design .con |
/NumWaves 2
/NumContrasts 2
/PPheights 1 1
/Matrix
1 -1
-1 1
デザインマトリックス(計画行列)とコントラストの確認ができたら、randomise
コマンド使ってGLMと並べ替え検定(permutation test)を実行する。
randomise
コマンドの各オプションは、次の通り。
- -i:入力画像
- -m:マスク画像
- -o :出力画像
- -o :デザインマトリックス
- -o :デザインコントラスト
- -n:並べ替え検定の数
- –T2:2D最適化を用いたTFCE
- -x:voxel-wiseのcorrected P値マップ
- –uncorrp:un-corrected P値マップ
- -R:統計値マップ
1 2 3 4 5 6 7 8 | design_ttest2 stats /design 10 10 randomise -i stats /all_FA_smoothed_s3 .nii.gz \ -m stats /all_FA_mask .nii.gz \ -o stats /fslvba \ -d stats /design .mat \ -t stats /design .con \ -n 10000 --T2 -V -x --uncorrp -R |
次のようなファイルが、生成される。
TFCEを用いた”健常群>患者群”の検定で、FWE補正をされたP値マップ(fslvba_tfce_corrp_tstat1.nii.gz)を確認する。ここで、得られたP値マップは1-P値のマップであることに注意する。つまり、P<.05を有意とするのであれば、P値マップで0.95-1.00の値を見ればよい。
1 2 3 | fsleyes $FSLDIR /data/standard/MNI152_T1_2mm \ stats /fslvba_tfce_corrp_tstat1 \ -cm Red-Yellow -dr 0.95 1 |
3. おまけ
検定数が多い場合、有意差があったかどうかをすべて確認するのは大変である。そこで、一目で有意差があるかどうかを判断できるように、各検定ごとのP値マップの最大値を自動計測し、テキスト(corrected_P_report.txt)としてまとめる。
1 2 3 4 5 6 7 8 9 | for PMAP in $( ls stats/ | grep tfce_corrp); do PMAX=$(fslstats stats/${PMAP} -R | cut -d " " -f2) echo ${PMAP} >>stats /tmp1 .txt echo ${PMAX} >>stats /tmp2 .txt done paste stats /tmp * >stats /tmp_corrected_P_report .txt echo -e "$(cat stats/tmp_corrected_P_report.txt)\n\n\n$(cat stats/tmp_corrected_P_report.txt | sort -r -n -k 2)" \ >stats /corrected_P_report .txt rm stats /tmp * |
上のコマンドを実行すると、statsフォルダに各検定とそのP値マップの最大値が記された「corrected_P_report.txt」が出力される。
検定結果を、ファイル名でソート(上段)したものと、P値でソートしたもの(下段)に分けて保存している。
1 | cat stats /corrected_P_report .txt |
fslvba_tfce_corrp_tstat1.nii.gz 0.982391
fslvba_tfce_corrp_tstat2.nii.gz 0.993181
fslvba_tfce_corrp_tstat2.nii.gz 0.993181
fslvba_tfce_corrp_tstat1.nii.gz 0.982391