見出し画像

第4回:有意差の有無を判定する

前回は、NIfTI形式やFSLツール(fslhd、fslstats)を使って脳画像ファイルから基本的な情報を取得する方法を学びました。
今回は、実際の脳画像解析後に得られる結果ファイルであるtfce_corrpファイルについて触れ、fslstatsを用いてtfce_corrpファイルの最大値を抽出し、その値がある閾値(ここでは0.95)を超えるかどうかで「有意差あり/なし」を判定する簡易スクリプトを作成します。
こうした自動判定は、解析パイプラインの一部をbashスクリプトで自動化する大きな一歩となります。


TBSSとTFCEの簡単な背景説明

TBSS(Tract-Based Spatial Statistics)は拡散テンソル画像(DTI)の有名な解析手法で、FA(Fractional Anisotropy)などの指標を群間比較する際によく用いられます。標準空間に正規化した被験者間のFAスケルトン上で、統計的な群間比較を行い、有意な差がある部分を特定します。
TFCE(Threshold-Free Cluster Enhancement)は、統計マップに対してクラスタリングを使わず、スムーズに閾値を変化させて有意性を評価する手法です。これにより、任意の閾値に依存しない、有意クラスターの強調が可能となります。

tfce_corrpファイルが示す意味

tfce_corrp_tstat1.nii.gzやtfce_corrp_tstat2.nii.gzなど、tfce_corrpが名前に含まれたファイルは、統計解析の結果、各ボクセルがどれだけ有意な差を示すかを、補正p値の形で格納します。

  • 値は0~1の範囲で、1に近いほど有意性が高い(p値が低い=統計的に有意)ことを意味します。

  • 通常、0.95(p=0.05相当)以上の値を持つボクセルが存在すれば、「有意な差を示す領域がある」と判断することができます。

fslstatsでtfce_corrpファイルから最大値を取り出す

前回紹介したfslstatsは-Rオプションで最小値と最大値を取得できます。tfce_corrpファイルにはボクセル値が0~1の範囲で割り当てられているので、その最大値が0.95以上であれば、少なくとも一部の領域で有意な差が存在するということになります。

fslstats tfce_corrp_tstat1.nii.gz -R

-Rオプションを付けたfslstatsコマンドは最小値と最大値を返します。
最大値が0.95を超えていれば有意差あり(p < 0.05)と判断できます。

条件分岐を用いて有意差判定を行うスクリプト

以下は、tfce_corrpファイル(tfce_corrp_tstat1.nii.gzと仮定)をチェックし、最大値が0.95以上であれば「有意差あり」と判定する簡易スクリプトの例です。
前回までと同様に、neuro_script_tutorialディレクトリ内で作業します。

cd ~/neuro_script_tutorial

check_significance.shというスクリプトを作成しましょう。

#!/bin/bash

# チェック対象のファイル名を変数に設定
input_file="tfce_corrp_tstat1.nii.gz"

# ファイルが存在するか確認
if [[ ! -f $input_file ]]; then
    echo "$input_file が存在しません。解析結果ファイルを準備してください。"
    exit 1
fi

# fslstatsで最大値を取得 (最小値は使わないので無視)
stats=$(fslstats $input_file -R)
max_val=$(echo $stats | cut -d " " -f 2)

# 閾値を0.95に設定
threshold=0.95

# bcコマンドで小数点以下の数値を比較できます
is_significant=$(echo "$max_val >= $threshold" | bc)
if [[ $is_significant -eq 1 ]]; then
    echo "有意差あり:$input_file の最大値は $max_val で、$threshold 以上です。"
else
    echo "有意差なし:$input_file の最大値は $max_val で、$threshold 未満です。"
fi

ここではbcコマンドを用いて浮動小数点比較を行っています。
echo "$max_val >= $threshold" | bcは、
max_val(最大値)がthreshold(閾値)以上なら1(真:true)を、未満なら0(偽:false)を返します。
続くif then else で真偽を判定しています。

スクリプトに実行権限を付けます。

chmod +x check_significance.sh

スクリプトを実行します。

./check_significance.sh

tfce_corrp_tstat1.nii.gzファイルがあり、かつ最大値が0.95以上の場合は「有意差あり」、それ以下なら「有意差なし」と表示されます。

まとめ

今回学んだこと:

  • tfce_corrpファイルはTBSSやTFCEを用いた統計解析の結果、補正p値マップを示す。

  • fslstatsを使って最大値を取得し、簡易的な有意差判定が可能(例:最大値が0.95以上なら有意差ありと判断)。

  • bashスクリプトで条件分岐(if文)や浮動小数点比較(bcコマンド)を使い、有意差判定を自動化できる。

このステップは、最終的な自動処理スクリプトの一部になります。解析終了後にスクリプトを走らせれば、自動的に有意差存在の有無を判定し、必要な後処理へ繋げることができます。

次回予告

次回は、この有意差判定を踏まえて、tbss_fillコマンドを使って有意領域を強調表示する画像を自動生成するプロセスを学びます。これにより、単なる数値判定から一歩進んで、解析結果をわかりやすい形で出力するスクリプトに発展させることができます。


いいなと思ったら応援しよう!