install.packages("devtools") devtools::install_github("shkonishi/cornet")
library(cornet) ls("package:cornet")
# data: normalized fpkm ---- nfpkm <- rskodat::nfpkm # 1000 genes ---- nfpkm[1:6,1:6]; dim(nfpkm)
遺伝子のクラスタリングを行い、dynamicTreeCut::cutreeDynamicTree
を用いてクラスタを検出する。クラスタごとのdataframe等を返す。
- amap::Dist
のメソッドから距離定義を選択する。別手法で作成した距離行列をas.dist
で変換したdistオブジェクトでも良い。
- cutree
を使ってクラスターに分割する場合はmethod_dycut
にkの値を入れる
res.cd <- cornet::dycutdf(dat = nfpkm[-1:-4], distm = "abscorrelation", clm = "average", method_dycut = "tree") # cutreeで分割する場合 # res.cd <- dycutdf(dat = dat, distm = "spearman", clm = "average", # column = 5:ncol(dat), method_dycut = 2) # cutreeDynamicの結果 head(res.cd$dynamic_cut) # クラスタ別のデータフレーム sapply(res.cd$cluster_dat, dim)
cornet::cluster_mat(nfpkm[-1:-4], res_dycut = res.cd$dynamic_cut, fcdat = nfpkm[2:3])
abspearson
とかを使う # dycutdfの結果から特定のクラスタに属するデータを取り出す cld <- res.cd$cluster_dat[["3"]] # 相関係数行列 cormat <- cor(cld) # グラフ作成 res.cg <- corgraph(mat = cormat) # 返り値1. igraphオブジェクト (g <- res.cg$undir.graph) # 返り値2. エッジリスト head(res.cg$edge.list) # 返り値3. ks-testの結果 head(res.cg$res.ks.text) # 全クラスターについてgraphオブジェクトのみ作成 clds <- res.cd$cluster_dat cl_gs <- lapply(clds, function(x)cornet::corgraph(cor(x))[[1]]) # 特定の遺伝子がどのクラスタにいるのかを調べる sapply(clds, function(x)match("gene1",names(x)))
igraphオブジェクトをプロットする。たくさんあるパラメータの表記をできるだけ省略したいので、よく使うオプションは初期値を指定してある。大雑把に視覚化したい時に使う。
cl_gs <- cl_gs[-1] par(mfrow=c(2,4)) for (i in seq_along(cl_gs)){ cornet::igplot(cl_gs[[i]], v.l = NA) }
res.hub <- cornet::gethub(g = cl_gs[["3"]], com_fun = "cluster_louvain") head(res.hub[[2]])
corgraph
を使って閾値を元にグラフ作成する場合とmatoedge
を使って完全グラフを作る場合# サンプルデータ dat <- data.frame( S1 = c(43.26, 166.6, 12.53, 28.77, 114.7, 119.1, 118.9, 3.76, 32.73, 17.46), S2 = c(40.89, 41.87, 39.55, 191.92, 79.7, 80.57, 156.69, 2.48, 11.99, 56.11), S3 = c(5.05, 136.65, 42.09, 236.56, 99.76, 114.59, 186.95, 136.78, 118.8, 21.41) ) rownames(dat) <- paste0("G", 1:10) # グラフ作成 cormat <- round(cor(t(dat)),2) g1 <- corgraph(cormat)[[1]] g2 <- cornet::matoedge(cormat) # 閾値グラフ par(mfrow=c(1,2)) igplot(g1, v.s = igraph::degree(g1)*10) # 完全グラフ ewid <- abs(igraph::E(g2)$weight) ecol <- ifelse(igraph::E(g2)$weight < 0 , "steelblue3", "grey80") igplot(ig = g2, lay=igraph::layout.circle, v.s = 15, e.c = ecol, e.w = ewid*4)
par(mfrow = c(4,4)) cornet::igplot(ig = g1, lay = "all", v.s = igraph::degree(g1)*10)
# 相関行列のような対称行列から重み付きエッジリストを作成 cormat <- cor(res.cd$cluster_dat$`1`) edge.list <- matoedge(mat = cormat, format = "df", diag = F, zero.weight = F) head(edge.list)
非線形の関連を見つける。minerva::mine
を実行して、その結果を整形してdataframeで返す
- pearson(r)とspearman(rho)も計算する
- TICの大きい順に並べる
# mineを連続実行、結果を整形出力 cldat <- as.data.frame(res.cd$cluster_dat[["3"]]) res.mic <- cluster_mine(cl_dat = cldat) # 結果を一部表示 res.mic[1:3,]
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.