Spike-and-slab

MikuHatsune2016-08-03

読んだ Nat Genet. 2016 Aug 1.
様々なデータを取ってきて、遺伝子との相関があるかを解析するわけだが、サンプルの人数、組織、遺伝子の3次元をサンプル×要素(component やfactor と呼ぶ)と要素×遺伝子の行列に分解することで、テンソル分解してデータの構造をいじる。
もちろん、時間次元をいれて4次元テンソルとかN次元テンソルとかも発展版ができる。
 
遺伝子を扱うときは、たいてい、遺伝子発現データが数万で、サンプルが100から1000といういわゆるp>>n 問題に直面する。そのため、spike-and-slabという方法で変数を減らしている。
P個の変数がモデルにあるとする。\gammaPと同じ長さで、\{0,1\}である。0ならばモデルにパラメータを取り入れず、1なら採用する、というフラグである。Pが採用される確率は、特に理由がなければベルヌーイ分布を使う。
モデルは普通にパラメータPに対して係数\betaがあるが、\gamma\{0,1\}なので採用されない場合は0かけで消える。
 
Skips-and-slab の名前の由来は,ふたつの事前分布によるらしく,ひとつは採用するかしないかの\gamma(spike),もうひとつはモデルの係数\beta(slab)ということでいいとおもう.

The model got its name (spike-and-slab) due to the shape of the two prior distributions. The "spike" is the probability of a particular coefficient in the model to be not zero. The "slab" is the prior distribution for the regression coefficient values.

 
R ではspikeslabとBoomSpikeSlab があったが、BoomSpikeSlab はBoom がインストールできませんうんたらかんたらでspikeslab を使ってみる。
diabetesI データセットは、糖尿病に関してデータをとって、1行目に自然数のなんらかのoutcome がはいっている。変数は64個あるが、最終的に14個の変数になっている。
図はLASSO っぽい感じの変数選択の結果が出る。

library(spikeslab)
data(diabetesI, package = "spikeslab")
obj <- spikeslab(Y ~ . , diabetesI, verbose=TRUE)
print(obj)
plot(obj)
------------------------------------------------------------------- 
Variable selection method     : AIC 
Big p small n                 : FALSE 
Screen variables              : FALSE 
Fast processing               : TRUE 
Sample size                   : 442 
No. predictors                : 64 
No. burn-in values            : 500 
No. sampled values            : 500 
Estimated mse                 : 2829.238 
Model size                    : 13 


---> Top variables:
            bma   gnet bma.scale gnet.scale
bmi      24.072 24.013   506.079    504.835
ltg      23.200 22.414   487.761    471.226
map      14.132 12.055   297.114    253.439
hdl     -10.640 -9.069  -223.686   -190.658
sex      -8.181 -5.367  -172.006   -112.844
age.sex   5.396  5.043   113.449    106.021
bmi.map   4.544  4.232    95.541     88.967
glu.2     1.410  2.611    29.650     54.900
bmi.2     1.288  1.486    27.081     31.247
age.ltg   1.052  0.479    22.118     10.071
age.map   0.854  1.004    17.962     21.108
age.glu   0.815  0.641    17.141     13.477
glu       0.597  0.246    12.543      5.182
------------------------------------------------------------------- 


 
論文ではベイズを使っていろいろ書いていて、1回の計算で8スレ使って20時間と書いている。10回繰り返しているので有意になる遺伝子群はすこしばらつくので、施行間でクラスタリングしたりいろいろしている。
 
というか昔fastICAを使ったんだけどこのラボらしい…