様々な方々から「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”をクリックします。
- Design matrixの作成
- Flexible factorialの指定とFactorの設定
まずは、DesignでFlexible factorialを指定します。その後、Factorを指定します。今、指定すべきFactorは3つです。各々に対してindependenceとvarianceを指定します。
- subject
- group
- time
これは必ず入れないといけないとのことです。independenceはyes, varianceはequalとなります。
次はgroupです。これはindependenceはyes, varianceはunequalとなります。
縦断解析ですので、timeが入ります。これはindependenceはno, varianceはequalとなります。
すぐに見直すことができるように表にしておきます。
factor independence variance subject yes equal group yes unequal time no equal - subjectの指定
- Conditionsの指定
- Main effectsとInteractionの指定
- Flexible factorial designのコントラスト
- groupの主効果
- timeの主効果
- group x timeの交互作用
Specify Subjects or all Scans & Factorsで、”Subjects”を選択します(all Scans & Factorsもいけそうなのですが、Design matrixがやや異なるので、ここは無難にSubjectsとします)。そして、Subjectsに、Subject 1のtime 1, 2, 3の3つのファイルを指定します。
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(交互作用)の指定をします。
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です。
ここで気を付けなくてはいけないのは、Subjectは最初に指定しても、Design matrix上では最後に来ることです。
最初の2列(赤)がgroupの主効果, 次の3列(黄緑)がtimeの主効果, 次の6列(青)がgroup x timeの交互作用, 最後の11列(紫)がsubjectの主効果となっています。
ここまでできたらEstimateしてください。
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の数によってコントラストに重みづけをしなければならないからです。
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
すると、下図に示すようなコントラストになるはずです。
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)
すると、コントラストは下図のようになるはずです。
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)
コントラストは下図のようになります。
これでひと通り検定することができるはずです。
いざまとめてみると、結構すっきりした感じになりました。
縦断データをお持ちの方は、是非トライしてみてください。VBMだけでなく、脳血流SPECTなどにも応用可能です。
根本先生
いつも大変参考にさせていただいております。
2023年10月にも質問させていただいたものです。
記載の通り操作しdesign matrixは作成できたのですが、
covariatesを含めて再度作成しようとしたところ、
「インデックスが配列要素数を超えています」とエラーがででしまいました。
2群間縦断比較ではcovariatesの設定はできないのでしょうか。
ご教示いただけますと幸いです。
できません。intra-subjectにおいて、共変量は相殺されると考えられるからです。
ご教示いただきありがとうございます。
今後ともよろしくお願い申し上げます。
根本先生
いつも勉強させていただきありがとうございます。
2023/12/12にこちらで質問させていただいた者です。
解析を進めておりますが、少し気になっていることがあり質問させていただきます。
「groupの主効果:responder群とnonresponder群の違いをtimeを考慮せずに見るもの。1回目と2回目の違いを考えず、(responder1回目+responder2回目) と (nonresponder1回目+nonresponder2回目) の違いをみている。」と教えていただき、nonresponderとresponderで差がある部位が確認できました。ただ、responder1回目とnonresponder1回目をVBMで比較、responder2回目とnonresponder2回目をVBMで比較、またresponder1回目+responder2回目とnonresponder1回目+nonresponder2回目をVBMで比較しましたがgroupの主効果でみられたような差が認めませんでした。group間の主効果はresponder1回目+responder2回目とnonresponder1回目+nonresponder2回目をVBMで比較することとは意味合いが変わってくるものなのでしょうか。疑問をうまくお伝えできているか自信がありませんが、ご助言いただけますと幸いでございます。何卒よろしくお願いいたします。
すみません、返信が遅くなりました。
Flexible factorial に関しては、Design matrixが通常と若干異なります。列が多いとかどのようなcovariateを使うとかですね。なので、結果が完全に一致することは難しいかもしれませんが、似た結果にはなるはずです。
だいたいの場合、全脳のvariablesの値が違ったりしています。そこら辺が一致していますか?
根本先生いつもありがとうございます。
悩んでいる検討についてご相談をお願いいたします。
患者に対して薬剤を投与しresponder群とnonresponder群に分かれました。両群で薬剤の投与前と投与後の合計2回のMRIの磁化率の変化について差があるのかを縦断的に検討したいと思っております。Flexible factorial designでsubject,group,timeを同様に設定し、その後も同様に行いましたところDesign matrixは得られました。
お伺いしたいことはコントラストについてです。responder群とnonresponder群をgroupに設定しておりますが、group間で薬剤投与前後での変化について検討する際はgroupの主効果をみるという方法でよろしいでしょうか。timeの主効果とgroup×timeの交互作用との違いについてうまく理解できずにおります。
基本的な内容で大変恐縮でございますが、ご教示いただけましたら幸甚です。
おおまかなイメージとしては
groupの主効果:responder群とnonresponder群の違いをtimeを考慮せずに見るものです。1回目と2回目の違いを考えず、(responder1回目+responder2回目) と (nonresponder1回目+nonresponder2回目) の違いをみています。
timeの主効果:(renponderの1回目+nonresponderの1回目) と (responderの2回目+nonresponderの2回目)の違いをみています。
group x time の交互作用:求めたいもの、すなわちgroup間で薬剤投与前後での変化
です。
根本先生
大変分かりやすく解説していただきありがとうございました。しっかりと理解できました。もう一つ確認させていただけましたら幸いです。
例えばgroupの主効果で1 -1というコントラストの場合、timeを考慮せずにresponder群とnonresponder群の違いをみて、responder群の方が磁化率の高いところを確認するもので、-1 1というコントラストの場合はその逆でnonresponder群の方が磁化率が高いところを確認するものという理解でよろしいでしょうか。
また、group×timeの交互作用で[1 -1]というコントラストにした場合は、経時的に磁化率が低下すると仮定した場合にgroup間で薬剤投与前後で変化が出たところをみているとなるか、薬剤投与前後でresponder群の方が磁化率の変化が出ているところをみているとなるかはいかがでしょうか。
初学者で理解が追いつかずに大変恐縮でございますが、ご教示いただけましたら幸いでございます。よろしくお願いいたします。
→はい、基本的にそのとおりです。ただ、「磁化率が高い」は「信号値が高い」とさせてください。必ずしも磁化率を見ているとは言えないと思いますので。
→ (res_time1 – res_time2) – (nonres_time1 – nonres_time2)
を見ています。responderの2時点変化 と nonresponderの2時点変化の 差分をみています。
根本先生
大変分かりやすく解説していただきありがとうございました。
とてもよく分かりました。
今後も先生の御書籍とHPで勉強継続させていただきます。
引き続き何卒よろしくお願いいたします。
コメントありがとうございました。
疑問が解消しました。
今後とも何卒よろしくお願いいたします。
根本先生
とてもわかりやすい解説をありがとうございます。
こちらの解析時のGlobal calculationについて質問です。
1つのケースに対して、経時的に複数の脳容積が存在することになりますが、
どのように扱えばよいのでしょうか。
Global caliculationはデフォルトのOmitのまま、Global normalizationをANCOVAを選び
解析結果自体はでたのですが、より正確な解析に近づく方法があれば
ご教示いただけますと幸いです。
flexible factorial の場合、縦断変化なので、「Intracranial volumeは変化しない」という大前提があります。
なので、Global calculationは不要となります。デフォルトのomitのままで大丈夫です。
そして、Global calculationがomitの場合、Global normalizationは省略されます。ANCOVAを選んでも何も反映されません。
実際、design matrixをご覧いただくと、Globalのカラムがないと思います。
ということで、Design matrixとしては、今の設定のままで大丈夫です。
で、より正確な解析のために重要なのは、縦断解析のための前処理を行うことになります。
縦断解析のための前処理を行うことで、ICVは単一の値になりますので、解析結果はより正確になります。