Flexible factorial designを用いたVBMの縦断解析

様々な方々から「2群の縦断解析をしたいんだけれども、どうすればいいの?」と質問されてきて、その都度、きちんとした答えをできずにいました。
ちょうど、今日、ある方から質問をうけたので、これを機にまとめてみることにします。

一言で言うならば「Flexible factorial modelを使うといいよ」となります。しかし、これはそんな簡単ではありません。
以下にその方法をまとめます。

根拠となっている資料として、”Contrast weights in flexible factorial design with multiple groups of subjects“を挙げます。これは、SPMのML上で流れたドキュメントで、Flexible factorial designにおけるコントラストを様々な条件から検討しています。このドキュメントの他にも、SPM-ML上の議論も参考にしています。できるだけ正確を期していますが、間違っている可能性もゼロではありませんので、もし間違いを見つけた方がいらっしゃったらぜひご指摘ください。

例として、以下のような状況を想定します。上述のContrast weights in flexible factorial design with multiple groups of subjectsでとりあげられている状況と同じ状況です。

  • 被験者は11人。6人(Subject1(S1)-S6)がグループ1、5人(S7-S11)がグループ2
  • それぞれ3回MRIを撮像。従って、11×3=33の画像があることになる

以下、SPM12bのスクリーンショットを用いながら説明します。基本的にSPM8でも同じです。
SPMのメニューから”Basic models”をクリックします。

  1. Design matrixの作成
    • Flexible factorialの指定とFactorの設定
      flex_fact_01

      まずは、DesignでFlexible factorialを指定します。その後、Factorを指定します。今、指定すべきFactorは3つです。各々に対してindependenceとvarianceを指定します。

      • subject
      • これは必ず入れないといけないとのことです。independenceはyes, varianceはequalとなります。

      • group
      • 次はgroupです。これはindependenceはyes, varianceはunequalとなります。

      • time
      • 縦断解析ですので、timeが入ります。これはindependenceはno, varianceはequalとなります。

        すぐに見直すことができるように表にしておきます。

        factor independence variance
        subject yes equal
        group yes unequal
        time no equal
    • subjectの指定
    • flex_fact_02

      Specify Subjects or all Scans & Factorsで、”Subjects”を選択します(all Scans & Factorsもいけそうなのですが、Design matrixがやや異なるので、ここは無難にSubjectsとします)。そして、Subjectsに、Subject 1のtime 1, 2, 3の3つのファイルを指定します。

    • Conditionsの指定
    • flex_fact_03

      Conditionは行列で指定します。行は画像の順番です。列は指定したFactorの順番です。Factor1のSubjectは今、ひとつひとつ指定することで考慮されていますので、groupとtimeを指定します。被験者1-6(S1-S6)はグループ1, S7-S11はグループ2ですので、S1-S6のconditionは次のようになります。

      1 1
      1 2
      1 3

      同様に、S7-S11のconditionは次のようになります。

      2 1
      2 2
      2 3

    • Main effectsとInteractionの指定
    • flex_fact_04

      その後、Main effects(主効果)とInteraction(交互作用)の指定をします。

      subject, group, timeの主効果を見るために、Main effectとしてFactor 1, 2, 3をそれぞれ指定します。
      さらに、group x timeの交互作用もみたいので、Interactionとして、2 3とします。(Factor2がgroup, Factor 3がtimeだからです)

      それ以降の設定(mask, global normalization)は通常のVBMと同様です。

      この設定を適当な名前(flex_fact_design_matrix)で保存し、実行して、次のようなDesign matrixが得られたらOKです。

      design_matrix

      ここで気を付けなくてはいけないのは、Subjectは最初に指定しても、Design matrix上では最後に来ることです。
      最初の2列(赤)がgroupの主効果, 次の3列(黄緑)がtimeの主効果, 次の6列(青)がgroup x timeの交互作用, 最後の11列(紫)がsubjectの主効果となっています。

      ここまでできたらEstimateしてください。

  2. Flexible factorial designのコントラスト
  3. Design matrixの設定もややこしいのですが、コントラストはもっとややこしいことになっています。ここは上述の”Contrast weights in flexible factorial design with multiple groups of subjects”に従って説明します。

    今、Design matrixの各列の要素を列挙すると以下のようになっています。

    G1 G2 T1 T2 T3 G1T1 G1T2 G1T3 G2T1 G2T2 G2T3 S1 S2 S6 S7 S8 S11

    ここでGはgroup, Tはtime, Sはsubjectを意味します。
    これを見ると、Interactionの中にgroupとtimeの要素が入っていることがわかります。コントラスト作成の際には、ここのところに気をつける必要があります。nの数によってコントラストに重みづけをしなければならないからです。

    • groupの主効果
    • G1 G2 T1 T2 T3 G1T1 G1T2 G1T3 G2T1 G2T2 G2T3 S1 S2 S6 S7 S8 S11
      1 -1 0 0 0 1/3 1/3 1/3 -1/3 -1/3 -1/3 1/6 1/6 1/6 -1/5 -1/5 -1/5

      ここでG1T1, G1T2, G1T3は皆等分なので、シンプルに3で割っただけです。G2T1なども同様に-1/3となります。S1-S6, S7-S11は人数にあわせて1/6と-1/5となっています。

      ただ、これをひたすらSPMに打つのは非常に苦痛ですね。ここで、Matlabの便利な機能を使います。
      Matlabでは、1がn個続く時は、 ones(1,n) とします。
      これは応用が効いて、もし、1/3がn個続く時は、 ones(1,n)/3 とします。
      -1/4がn個続く時は、-ones(1,n)/4 となります。
      そして、ゼロがn個続くときは zeros(1,n) となります。

      従って、今の場合は、以下のように書くことができます。私はこれをSPMのcontrast managerに入力しています。

      1 -1 zeros(1,3) ones(1,3)/3 -ones(1,3)/3 ones(1,6)/6 -ones(1,5)/5

      すると、下図に示すようなコントラストになるはずです。

      main_fx_group_contrast

    • timeの主効果
    • G1 G2 T1 T2 T3 G1T1 G1T2 G1T3 G2T1 G2T2 G2T3 S1 S2 S6 S7 S8 S11
      0 0 1 0 -1 6/11 0 -6/11 5/11 0 -5/11 0 0 0 0 0 0

      timeの主効果は、経時的にvolumeが小さくなると仮定して、[1 0 -1]と考えています。G1T1, G1T2, G1T3に関しては、今はT1がG1とG2で不均等になっていますので、その比率を考慮して、G1T1, G1T2, G1T3に関しては、6/11×[1 0 -1], G2T1, G2T2, G2T3に関しては、5/11×[1 0 -1]となっています。そして、subjectのfactorに関してはこの中に3つの時系列をすべて包含していますので、コントラストに影響しませんので、すべて0となります。

      これも先ほどと同様にonesとzerosを上手に使って書いてみましょう。以下をcontrast managerに入力します。

      zeros(1,2) [1 0 -1] 6/11*[1 0 -1] 5/11*[1 0 -1] zeors(1,11)

      すると、コントラストは下図のようになるはずです。

      main_fx_time_contrast

    • group x timeの交互作用
    • G1 G2 T1 T2 T3 G1T1 G1T2 G1T3 G2T1 G2T2 G2T3 S1 S2 S6 S7 S8 S11
      0 0 0 0 0 1 0 -1 -1 0 1 0 0 0 0 0 0

      交互作用で用いられる項目は、GxTxのみです。これも次のように書きなおすことができます。

      zeros(1,2) zeros(1,3) [1 0 -1] [-1 0 1] zeros(1,11)

      コントラストは下図のようになります。

      interaction_contrast

    これでひと通り検定することができるはずです。
    いざまとめてみると、結構すっきりした感じになりました。
    縦断データをお持ちの方は、是非トライしてみてください。VBMだけでなく、脳血流SPECTなどにも応用可能です。

コメントを残す