インストール

install.packages("devtools") 
devtools::install_github("shkonishi/cornet")

関数及び外部データ一覧

library(cornet)
ls("package:cornet")

data

# data: normalized fpkm ----
nfpkm <- rskodat::nfpkm

# 1000 genes ----
nfpkm[1:6,1:6]; dim(nfpkm)

dycutdf

遺伝子のクラスタリングを行い、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)

cluster_mat

cornet::cluster_mat(nfpkm[-1:-4], res_dycut = res.cd$dynamic_cut, fcdat = nfpkm[2:3])

corgraph

# 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)))

igplot

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) 
} 
 

gethub

res.hub <- cornet::gethub(g = cl_gs[["3"]], com_fun = "cluster_louvain")
head(res.hub[[2]])

グラフ作成と描画

# サンプルデータ
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)  

matoedge

# 相関行列のような対称行列から重み付きエッジリストを作成
cormat <- cor(res.cd$cluster_dat$`1`)
edge.list <- matoedge(mat = cormat, format = "df", diag = F, zero.weight = F)
head(edge.list)

cluster_mine

非線形の関連を見つける。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,]


shkonishi/cornet documentation built on May 30, 2019, 7:09 p.m.