このページの翻訳:
  • ja

Matlab

Matlab は行列演算ソフト

  • 「連立方程式を解く」のに有用
  • 5元,10元,10000元となっても一括で計算できる
    • 平面の脳画像でも X方向 256,Y方向 256 程度にはなる
  • とにかく変数がいくつになっても X=inv(A)B で全て計算できるのが強み

AX=BX=A1B

2x + 5y = 12
3x + 4y = 11

>> A = [2 5; 3 4]
>> B = [12, 11]
>> X = inv(A)*B

(2534)(xy)=(1211)(xy)=(2534)1(1211)

値の推定

  • 本来,N元一次方程式に一意の解を与えるには N個の式が必要
    • 変数 N に対して 方程式が N に満たない時は解が一意に定まらない(=正方行列でない
    • そういうときに “擬似逆行列” を用いることで値を推定できる.
    • あるいは逆に変数 N に対して方程式が多数ある場合,それらの全ての方程式から回帰係数推定を行う
  • それが pinv コマンド

pinv function でやっていること

  • 例:変数が2つあって方程式が3つ以上(n)あるケースとは
    • 100人の患者の脳画像で,年齢 age と負の相関(回帰係数 β1)を示す領域を考えたい

Y=β1×Age+C

  • ここで,Subject1 のボクセル値 Y1,年齢 Age1 とすると,行列式としては以下のように Y=XB の形で示すことができる(X は計画行列 design matrix と呼ぶ)

[Y1Y2Yn]=[Age11Age21Agen1][βC]

  • 目的の行列 B=[βC] を求めるには以下の処理をする

Y=XBXTY=XTXB(XTX)1XTY=B

  • ここで行なっている,Yの左から (XTX)1XTをかける操作が pinv 1)
    • なお XT とは,行列 X を正方行列化するための操作
    • 要するに正方行列化してそこに逆行列をかけて打ち消しているだけ
  • 100人の患者サンプルで行う場合,上記の n=100 となるが,その100元方程式を一括で pinv function で処理できるのが強み.一発で目的の B=[βC] が求められる.
    • つまり,線形回帰の傾き β と切片 C が一発でわかるということ
>> B = pinv(X) * Y   % Xは患者個別データ(年齢),Yはボクセル値,Bが求めたい係数
>> y = XB  % 上記操作で B が求められたので,XBをプロットできる
>> plot(age, y)  % y = XB に基づいて回帰直線が引かれる

重回帰も同じ要領

  • 100人の患者の脳画像で,年齢 age,性別 sex,頭蓋内容積 TIV,画像機器による定数 C,その他 ε

Y=β1×Age+β2×Sex+β3×TIV+C+ϵ

  • これらの “係数” を推定するのも擬似逆行列関数 pinv で対応可

Matlab の文法

%コメントアウト
%%2つ続くとセクション扱いになる

セミコロンの使い方

  1. 行列を表す時に改行する
    • [2 4; 3 5]
    • (2435)
  2. コマンド結果を出力しない

コロンの使い方

  1. 数字a:数字b:数字c とすると,a から c まで b 刻みで連続する値を意味
    • 1:2:10 → 「1 3 5 7 9」 と同義
  2. 単独で使うことで,全行・全列を指定する
    • A(:,2) → 全行 2 列目

参考文献

1)
Nemoto K, Shimokawa T, Fukunaga M, et al. Differentiation of schizophrenia using structural MRI with consideration of scanner differences: A real-world multisite study. Psychiatry Clin Neurosci. 2020;74(1):56-63. DOI