Multifactor Dimensionality Reduction (MDR)

MikuHatsune2013-09-02

Multifactor Dimensionality Reduction(MDR)という手法がある。意味のある組み合わせを考えたいが、組み合わせ爆発が起こるのでうまくbin化しながら考えるようなイメージだと思った。これを遺伝医学に応用した話。
Am J Reprod Immunol. 2013 Jul 31.
RではMDR, mbmdrなどでできる。元々はBioinformatics. 2003 Feb 12;19(3):376-82.


STEP1
CVするために n-fold CVとして今回は1/10にした。
STEP2
N個のlocusがfactorとしてある。
STEP3
遺伝子座Lについて、L_iL_j を取ってきて、3*3のカテゴリーでcase と controlの人数を考える。
STEP4
リスクが1以上なら high, 1以下なら low, 割り付けが存在しなかったら emptyのラベルに貼り替える。
STEP5
L_iL_jの組み合わせの時L_{i,j}のモデルのときの誤差をひたすら計算しておく。
STEP6
検証データで誤差を確認する。

library(mbmdr)
data(simSNP)
fit <- mbmdr(y=simSNP$Y, data=simSNP[, 3:12], order=2, family=binomial(link=logit), printStep1=TRUE) # print the results of step one

SNP1とSNP2を取ってきて計算した時の結果を示す。SNP1の遺伝子型がAA/Aa/aaのときとSNP2の遺伝子型がBB/Bb/bbのときの9パターンにおいて上のステップの通り計算し、Wald testのp値を返している。

Model:  2 1 
 SNP2 SNP1 cases controls    beta   p.value category
    0    0     0        9 -2.9904 0.0510640        L
    1    0    49       19  1.1286 0.0001103        H
    2    0     0       15 -3.5117 0.0182311        L
    0    1    50       19  1.1554 0.0000727        H
    1    1     0       57 -5.0794 0.0004079        L
    2    1    43       30  0.4396 0.0938642        H
    0    2     0       14 -3.4397 0.0211741        L
    1    2    58       26  1.0056 0.0001219        H
    2    2     0       11 -3.1919 0.0348002        L

permutation testでp値が小さかった順にSNPの組み合わせを返す。

print(fit)
  SNP1 SNP2 NH  betaH     WH        PH NL   betaL     WL        PL     MIN.P
  SNP2 SNP1  4 6.1135 18.285 1.902e-05  5 -6.1135 18.285 1.902e-05 1.902e-05
  SNP8 SNP2  1 0.5195  2.771 9.598e-02  2 -0.7656  7.972 4.750e-03 4.750e-03
  SNP8 SNP7  1 0.6271  3.592 5.806e-02  1 -0.8908  6.901 8.614e-03 8.614e-03
 SNP10 SNP4  2 0.6802  6.182 1.291e-02  1 -0.7414  3.099 7.836e-02 1.291e-02
 SNP10 SNP9  0     NA     NA        NA  1 -1.1196  6.156 1.309e-02 1.309e-02
 SNP10 SNP1  0     NA     NA        NA  1 -0.7777  5.435 1.974e-02 1.974e-02
  SNP6 SNP1  0     NA     NA        NA  1 -0.5302  4.930 2.640e-02 2.640e-02
  SNP8 SNP6  1 0.7379  4.845 2.773e-02  0      NA     NA        NA 2.773e-02
  SNP8 SNP4  1 0.8045  2.940 8.640e-02  1 -0.6804  4.518 3.355e-02 3.355e-02
  SNP6 SNP2  0     NA     NA        NA  1 -0.6804  4.518 3.355e-02 3.355e-02
  SNP7 SNP3  1 1.0338  4.457 3.475e-02  0      NA     NA        NA 3.475e-02
  SNP7 SNP2  0     NA     NA        NA  1 -0.5757  3.609 5.747e-02 5.747e-02
  SNP6 SNP4  1 0.8744  3.540 5.989e-02  0      NA     NA        NA 5.989e-02
  SNP8 SNP1  1 0.5572  3.503 6.126e-02  0      NA     NA        NA 6.126e-02
 SNP10 SNP2  1 0.5390  3.132 7.677e-02  0      NA     NA        NA 7.677e-02
  SNP9 SNP6  1 0.8045  2.940 8.640e-02  1 -0.5849  3.089 7.883e-02 7.883e-02
  SNP4 SNP2  1 0.5214  3.037 8.137e-02  0      NA     NA        NA 8.137e-02
  SNP5 SNP1  1 0.4901  2.867 9.040e-02  0      NA     NA        NA 9.040e-02

論文では、決定木を使って疾患リスクを推定している。

library("rpart")
classification_tree <- rpart(Y ~ . -X, data = simSNP)

#finding the best optimal size of tree
cp <- classification_tree$cptable[which.min(classification_tree$cptable[, "xerror"]), "CP"]# select the complexity parameter associated with minimum error
Regtree_optimal <- prune(classification_tree, cp=cp)
plot(Regtree_optimal, uniform=T, main="pruned regression Tree for trait")
text(Regtree_optimal, use.n=TRUE, xpd=TRUE)