膨大な数の遺伝子の発現パターンを似たパターン同士にクラスタリングする手法.K-meansよりも高度な解析.
>TS<-read.csv("all_genes.csv", header=T) #オブジェクトに発現量データのcsvファイルを指定
>head(TS) #データの確認
>names(TS) #列名の確認
>install.packages("som") #SOM関数(自己組織化マップ)のためのパッケージインストール
>library("som")
>TS_n<-normalize(TS) #値の標準化
>TS_n[is.nan(TS_n.all)]<-0 #非数値NaNが出た場合は解析ができないので,0に置換
>TS_n.som<-som(TS_n, xdim = 4, ydim = 4) #SOMのラン,列数と行数を任意に指定(この例では4x4)
>plot(TS_n.som) #結果のグラフ化,うまくパターンが分かれないときは行列数を増やしてみる
#問題は,どの遺伝子がどのクラスターに入ったのかすぐわからないこと
遺伝子IDとクラスター番号の対応づけが必要
>attributes(TS_n.som) #オブジェクトの属性を見る
$`names`
[1] "data" "code" "visual" "qerror" "init" "alpha" "neigh" "topol" "alpha0"
[10] "radius0" "rlen" "xdim" "ydim" "err.radius" "inv.alp.c" "code.sum"
#属性がnamesとはわかったが、その中身が多すぎてもっとわからない
Rstudioのパッケージタブ→som→Valueを見ると,それら一つ一つの解説がある
visual
a data frame of three columns, with the same number of rows as in data: x and y are the coordinate of the corresponding observation in the map, and qerror is the quantization error computed as the squared distance (depends topol) between the observation vector and its coding vector.
が正解
>nrow(TS_n.som$visual) #visualの数が遺伝子数と一致するか確認
>write.csv(TS_n.som$visual,"任意のパス") #csvファイルに書き出し
#xとyが分かれて2列に出力される
今回の4x4の場合,それぞれが1-4ではなく0-3の数字が与えられるため,遺伝子のエクセルファイルに2列を挿入したあと、その横の列を使って"=(x列のセル+1)+y列のセル*4"でクラスター番号を算出すれば良い
クラスター数を変えた場合は計算法は変わるので注意