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