1. 目的
2. TBSSとは
2.1. 拡散MRIからFA画像を計算
2.2. tbss_1_preproc
:TBSSの準備
2.3. tbss_2_reg
:FAを標準空間に非線形位置合わせ
2.4. tbss_3_postreg
:平均FA画像を生成し、FAスケルトンを生成
2.5. tbss_4_prestats
:被験者ごとのFA画像を平均スケルトンに投影
2.6. tbss_non_FA
:FA画像以外の定量値をスケルトンに投影
2.7. randomise
:スケルトンに投影された定量値画像を入力したGLMと並べ替え検定(permutation test)
3. おまけ
1. 目的
- Tract-Based Spatial Statistics: TBSS
2. TBSSとは
Tract-Based Spatial Statistics (TBSS) は、白質路の統計解析をするための手法。
神経線維束の中心線(skeleton)に定量値を投影する。通常の脳画像の統計解析では、脳構造の個人差を除外するために空間的「平滑化」を用いる。しかし、平滑化の程度に原則がなく、平滑化をかけては情報があいまいになり、MRIの高空間分解能を生かせないという問題がある。一方、TBSSでは、神経線維束の中心線と思われるところにskeletonを生成し、そこに個人ごとの定量値を投影するという手法をとる。これにより、平滑化せずに群間比較をすることができるため、平滑化による問題を回避できるという利点がある。
TBSS解析では、次のような処理をする。
- 拡散MRIからFA画像を計算
tbss_1_preproc
:TBSSの準備tbss_2_reg
:FAを標準空間に非線形位置合わせtbss_3_postreg
:平均FA画像を生成し、FAスケルトンを生成tbss_4_prestats
:被験者ごとのFA画像を平均スケルトンに投影tbss_non_FA
:FA画像以外の定量値をスケルトンに投影randomise
:スケルトンに投影された定量値画像を入力したGLMと並べ替え検定(permutation test)
2.1. 拡散MRIからFA画像を計算
拡散MRIからFA画像を計算し、被験者ごとのFA画像を準備する。
ここでは、健常者10名(ID: Con0001~Con0010)と患者10名(ID: Pat0001~Pat0010)いることを想定する。
. ├── Con0001_FA.nii.gz ├── Con0002_FA.nii.gz ├── Con0003_FA.nii.gz ... └── Pat0010_FA.nii.gz
その他の定量値画像も解析に含めたい場合は、FA画像と合わせて次のように用意する。
ここでは、MDとFWという定量値画像を用意した。この時、定量値画像ごとのフォルダを作成し、各被験者の定量値画像を格納するが、ファイル名はFA画像と全く同じにすること(例. FA画像: Con0001_FA.nii.gz, MD画像: MD/Con0001_FA.nii.gz)。
. ├── Con0001_FA.nii.gz ├── Con0002_FA.nii.gz ├── Con0003_FA.nii.gz ... └── Pat0010_FA.nii.gz ├── FW │ ├── Con0001_FA.nii.gz │ ├── Con0002_FA.nii.gz │ ├── Con0003_FA.nii.gz │ ... │ └── Pat0010_FA.nii.gz └── MD ├── Con0001_FA.nii.gz ├── Con0002_FA.nii.gz ├── Con0003_FA.nii.gz ... └── Pat0010_FA.nii.gz
2.2. tbss_1_preproc
:TBSSの準備
ファイルの準備ができたら、tbss_1_preproc
コマンドでTBSSの準備をする。
tbss_1_preproc *_FA.nii.gz
処理が終わると、「FAフォルダ」と「origdataフォルダ」を生成し、それぞれにFA画像が格納される。FAフォルダには、さらにFAのマスク画像が生成される。
. ├── FA │ ├── Con0001_FA.nii.gz │ ├── Con0001_FA_FA_mask.nii.gz │ ├── Con0002_FA.nii.gz │ ├── Con0002_FA_FA_mask.nii.gz │ ├── Con0003_FA.nii.gz │ ├── Con0003_FA_FA_mask.nii.gz │ ... │ └── Pat0010_FA.nii.gz │ ├── Pat0010_FA._FA_mask.nii.gz ├── FW │ ├── Con0001_FA.nii.gz │ ├── Con0002_FA.nii.gz │ ├── Con0003_FA.nii.gz │ ... │ └── Pat0010_FA.nii.gz ├── MD │ ├── Con0001_FA.nii.gz │ ├── Con0002_FA.nii.gz │ ├── Con0003_FA.nii.gz │ ... │ └── Pat0010_FA.nii.gz └── origdata ├── Con0001_FA.nii.gz ├── Con0002_FA.nii.gz ├── Con0003_FA.nii.gz ... └── Pat0010_FA.nii.gz
「FA/slicesdir/index.html」をブラウザ(e.g., Chrome)で開くことで、各被験者のFA画像一覧をみることができる。
2.3. tbss_2_reg
:FAを標準空間に非線形位置合わせ
tbss_1_preproc
コマンドで、全ての被験者のFA画像を1x1x1mmの標準空間に非線形的な位置合わせする。通常は、-T
オプションで標準空間にある標準FA画像(FMRIB58_FA)に位置合わせをするが、-t
オプションを用いて任意の画像に位置合わせすることもできる(推奨)。また、-n
オプションでは、被験者の中で最も位置合わせ先としてふさわしいFA画像を見つけ出し、そのFA画像にすべての被験者のFA画像を位置合わせすることができる。
ここでは、TBSSで推奨されている-T
オプションを指定しすべての被験者FA画像を標準FA画像(FMRIB58_FA)に位置合わせをする。
tbss_2_reg -T
処理が完了すると、FAフォルダに結果が保存される。
「FA/*_to_target_warp.nii.gz」が、標準FA画像に位置合わせするためのwarp fieldである。
2.4. tbss_3_postreg
:平均FA画像を生成し、FAスケルトンを生成
先程生成した標準FA画像に位置合わせするためのwarp fieldを用いて、各被験者のFA画像を標準空間(MNI152)に移動させる。その後、平均FA画像を生成し、その平均FA画像からFAスケルトンを生成する。tbss_3_postreg
では、これらの処理を-S
オプションで実行することができが、代わりに標準FA画像(FMRIB58_FA mean)とそのスケルトンを用いたい場合は-T
を指定する。
ここでは、TBSSで推奨されている-S
オプションを指定する。
tbss_3_postreg -S
処理後の画像は、「statsフォルダ」に格納される。
stats/ ├── all_FA.nii.gz # 標準空間上における各被験者のFA画像 ├── mean_FA.nii.gz # 平均FA画像 ├── mean_FA_mask.nii.gz # 平均FA画像のマスク └── mean_FA_skeleton.nii.gz # 平均FA画像から生成したスケルトン画像
2.5. tbss_4_prestats
:被験者ごとのFA画像を平均スケルトンに投影
tbss_4_prestats
コマンドでは、まず平均FA画像から生成したスケルトン画像(mean_FA_skeleton.nii.gz)をしきい値処理(通常 0.2)をし、スケルトンのバイナリーマスク画像を生成する。次に、このスケルトンマスクからの距離マップ(distance map)が計算され、この距離マップを参考に、被験者ごとのFA画像をスケルトン画像に格納(投影)する。
tbss_4_prestats 0.2
statsフォルダに、新たに次のファイルが生成される。
stats/ ├── all_FA_skeletonised.nii.gz # スケルトンに投影されたすべての被験者のFA画像 ├── mean_FA_skeleton_mask.nii.gz # スケルトンマスク ├── mean_FA_skeleton_mask_dst.nii.gz # スケルトンマスクからの距離マップ(distance map) └── thresh.txt # バイナリースケルトンマスク画像を作る際のしきい値
2.6. tbss_non_FA
:FA画像以外の定量値をスケルトンに投影
tbss_non_FA
コマンドで、FA画像以外の定量値をスケルトンに投影する。このとき、標準空間への移動やスケルトンを生成するためのパラメータは、FA画像で使ったものが適用される。
NONFA_LIST=$(ls -F | grep / | cut -d / -f 1 | grep -v stats| grep -v origdata) for MAP in ${NONFA_LIST}; do tbss_non_FA ${MAP} done
2.7. randomise
:スケルトンに投影された定量値画像を入力したGLMと並べ替え検定(permutation test)
まず、GLMのデザインマトリックス(計画行列)とコントラストを設定する。
今回は、健常者10名(ID: Con0001~Con0010)と患者10名(ID: Pat0001~Pat0010)のデータがある。「origdataフォルダ」をみると、先に健常者10名のFA画像、次に患者10名のFA画像が並んでいることが分かる。
ls -1 origdata
Con0001_FA.nii.gz
Con0002_FA.nii.gz
Con0003_FA.nii.gz
...
Pat0010_FA.nii.gz
次に、GLMのデザインマトリックス(計画行列)とコントラストを決める設定ファイルを生成する。design_ttest2 <出力ファイル> <健常者数> <患者数>
でコマンドを実行。
design_ttest2 stats/design 10 10
statsフォルダに、デザインマトリックス(design.mat)とコントラスト(design.con)が生成される。
デザインマトリックス(design.mat)の中身を確認。
/Matrixの一列目は健常者データであるかどうか、二列目は患者データであるかを0, 1で表している。行の順番は、origdataフォルダにあるファイルの順番(昇順)に対応する。したがって、これらは対応があるようにしておかなければならない。
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一列目は健常者の偏回帰係数、二列目は患者の偏回帰係数に対するもので、行は別々のコントラストである。この場合、一行目は健常者>患者の検定、二行目は健常者<患者の検定に相当する。
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:統計値マップ
for MAP in FA ${NONFA_LIST}; do randomise -i stats/all_${MAP}_skeletonised \ -o stats/tbss_${MAP} \ -m stats/mean_FA_skeleton_mask \ -d stats/design.mat \ -t stats/design.con \ -n 10000 --T2 -V -x --uncorrp -R done
次のようなファイルが、生成される。
TFCEを用いた”健常群>患者群”の検定で、FWE補正をされたP値マップ(tbss_FA_tfce_corrp_tstat1.nii.gz)を確認する。ここで、得られたP値マップは1-P値のマップであることに注意する。つまり、P<.05を有意とするのであれば、P値マップで0.95-1.00の値を見ればよい。
fsleyes ${FSLDIR}/data/standard/FMRIB58_FA_1mm.nii.gz \ ${FSLDIR}/data/standard/FMRIB58_FA-skeleton_1mm.nii.gz -cm Green \ stats/tbss_FA_tfce_p_tstat1.nii.gz -cm Red-Yellow -dr 0.95 1
スケルトンは細いため有意差が見づらい場合がある。そのような時、tbss_fill
コマンドが役に立つ。
tbss_fill
コマンドの基本的な使い方は、以下の通り。
tbss_fill <P値マップ> <しきい値> <平均FA画像> <出力画像>
TFCEを用いた”健常群>患者群”の検定で、FWE補正をされたP値マップ(tbss_FA_tfce_corrp_tstat1.nii.gz)の有意差があった領域のみを0.95でしきい値処理をして抽出し、その領域を膨張させる。
tbss_fill stats/tbss_FA_tfce_p_tstat1.nii.gz 0.95 stats/mean_FA stats/tbss_FA_tfce_p_tstat1_fill.nii.gz
赤く表示されている領域は、健常群が患者群よりも有意(FWE-corrected)にFA値が大きいことを示している。
3.おまけ
大量に定量値があり、それらをすべて検定する場合、有意差があったかどうかをすべて確認するのは大変である。そこで、各定量値画像のP値マップが0.95以上の値を持つかどうかを判定し、有意差があった場合のみ、tbss_fill
コマンドを実行する。
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 if [ $(echo "${PMAX} > 0.95" | bc) == 1 ]; then tbss_fill stats/${PMAP} 0.95 stats/mean_FA stats/${PMAP}_fill fi 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値でソートしたもの(下段)に分けて保存している。
cat stats/corrected_P_report.txt
tbss_FA_tfce_corrp_tstat1.nii.gz 0.992000
tbss_FA_tfce_corrp_tstat2.nii.gz 0.416000
tbss_FW_tfce_corrp_tstat1.nii.gz 0.361839
tbss_FW_tfce_corrp_tstat2.nii.gz 0.997261
tbss_MD_tfce_corrp_tstat1.nii.gz 0.389816
tbss_MD_tfce_corrp_tstat2.nii.gz 0.985748
tbss_FW_tfce_corrp_tstat2.nii.gz 0.997261
tbss_FA_tfce_corrp_tstat1.nii.gz 0.992000
tbss_MD_tfce_corrp_tstat2.nii.gz 0.985748
tbss_FA_tfce_corrp_tstat2.nii.gz 0.416000
tbss_MD_tfce_corrp_tstat1.nii.gz 0.389816
tbss_FW_tfce_corrp_tstat1.nii.gz 0.361839
早速のご回答、ありがとうございます。
やはりそうなのですね。rangeをいじってしまわないよう気をつけます(うっかり変更して、間違った解釈をしてしまったことがありましたので)。
お世話になってます。前回のabisではありがとうございました。
TBSSに関してひとつ確認させてください。
最後にFSLeyesで表示する時、記事のように入力すると、data display rangeが0.95 1となります。
こちらの数値は「有意水準5%以下」に対応しているという認識でよろしいでしょうか。
つまり、FSLeyesでbrightnessやcontrastをいじって、数値を変更してしまうと、正確な検定にならないという理解でお間違えないでしょうか。
お手すきの際にご教示いただけましたら幸いです。
はい、そのとおりです。FSLeyesのrangeは、1-p とお考えください。
なので、p<0.05 は、0.95-1.00 となります。