C#によるCox回帰の適用の実装

Cox回帰とは

Cox回帰は生存時間分析として知られる分析の一つである。単純な線形回帰が説明変数から量的な目的変数を予測するのに対し、Cox回帰は時間経過によって変わっていく瞬間死亡率を積み上げて累積的な生存率へとたどり着く。Cox回帰そのものの議論についてはここでは触れない。

したがって、RISK値、すなわち説明変数からのリスクへの影響を求めるには、説明変数に係数を乗じて話を取り、エクスポネンシャルを取ればよいということになる。

ということは、説明変数がdoubleな配列Xに入っていて、係数が配列Aに入っており、切片がdoubleな変数Bに入っていて、説明変数の個数がSIZEに入っているなら、

double total =B;

for(int i = 0; i < SIZE; i++) {

total += A[i] * X(i);

}

double RISK = Math.Exp(total);

とすることができる。

ただし、注意するのはもし、係数の算出にRを使っているならば、Rのcoxphは内部で平均を説明変数から引いて用いるため、回帰式に投入する前にモデリング時の説明変数の平均を引かないとRのモデリング結果とは同じにならないことに注意する。

当然ながら、k∈N (k<=n)なるkを与えるメソッド、Range(n)などが定義されていれば、これをLINQで書き直すことができる。

例えば、

var q = from k in Range(n) select A(k) * X(k);

double total = q.Sum()+B;

double RISK = Math.Exp(total);

のように。

コメントを残す