2017-01-25 1 views
1

허용 오차를 고려하여 dendrogram 가지를 붕괴하고 싶습니다.허용 오차가 주어진다면 덤 드로 그램 접기

나는 다음과 같습니다. dendextend 님의 collapse_branchexample입니다. dendextendexample에서 dendrogram들과 달리

require(dendextend) 
dend <- iris[1:5,-5] %>% dist %>% hclust %>% as.dendrogram 
dend %>% ladderize %>% plot(horiz = TRUE); abline(v = .2, col = 2, lty = 2) 

enter image description here

, 나는 모든 붕괴 지점을 대체하고 싶습니다 (즉, 수직 빨간색 라인 점선 오른쪽으로 어떤 계통 군)와 유사한 삼각형을, clades는 this link)에서 (이 그림에서 제시하는 방법 :

enter image description here

이 내가 t를 절단 정착 것 물어 너무 많은 경우 그는 관용 한계선에서 갈라진다.

답변

1

삼각형을 가져 오는 것은 실제로 너무 많지만 분기에 색상을 지정할 수 있습니다. 높이하거나 color_branches을 사용하여 클러스터의 개수에 의해 어느 : 또한,이 경우에 있어서는, 실루엣 계수 (사용 find_k을 사용하여 클러스터의 개수를 선택할 수

library(dendextend) 
dend <- iris[1:5,-5] %>% dist %>% hclust %>% as.dendrogram 
dend %>% color_branches(h=0.2) %>% ladderize %>% plot(horiz = TRUE); abline(v = .2, col = 2, lty = 2) 
# OR 
# dend %>% color_branches(k=4) %>% ladderize %>% plot(horiz = TRUE); abline(v = .2, col = 2, lty = 2) 

enter image description here

2) :

require(dendextend) 
dend <- iris[1:5,-5] %>% dist %>% hclust %>% as.dendrogram 
find_k(dend)$k 
dend %>% color_branches(k=find_k(.)$k) %>% ladderize %>% plot(horiz = TRUE); abline(v = .2, col = 2, lty = 2) 

enter image description here

+0

아주 좋은으로 다시 변환 할 수 있습니다. 공차 컷오프 수준에서 덴 드로 그램을 자르는 것은 정말로 불가능합니까? 하나의 잎이 많은 잎 그림이 있지만 의미있는 클러스터의 수가 훨씬 적 으면 (따라서 허용 한계는 매우 높을 것입니다) 컷 드레드 프로그램은 기본 '정글'보다 훨씬 쉽게 볼 수 있습니다 나뭇잎으로 내려가. – dan

0

하나는,752을 사용할 수 있습니다packagedrop.tip에 's의 :

require(ape) 
require(dendextend) 
require(data.tree) 

dend <- iris[1:5,-5] %>% dist %>% hclust %>% as.dendrogram 
tol.level <- 0.28 
dend %>% plot(horiz = TRUE); abline(v=tol.level,col="red",lty=2) 

enter image description here

그래서 우리의 허용 수준은 0.28이고, 그들의 조상 노드의 깊이가 tol.level

#convert dendrogram to data.tree 
dend.dt <- as.Node(dend) 

#get vector of leaves per each internal node 
node.list <- lapply(dend.dt$Get(function(node) node$leaves,filterFun = isNotLeaf),function(n) unname(sapply(unlist(n,recursive = T),function(l) l$name))) 
#get vector of per each internal node 
node.depth.df <- data.frame(depth=c(t(sapply(Traverse(dend.dt,traversal="pre-order",pruneFun=isNotLeaf),function(x) c(x$plotHeight)))),stringsAsFactors=F) 

to.drop.leave.names <- c(sapply(which(node.depth.df$depth < tol.level),function(i) node.list[[i]])) 

#convert dendrogram to phylo 
phylo.dend <- as.phylo(dend) 
phylo.dend <- drop.tip(phylo.dend,tip=to.drop.leave.names,interactive=FALSE,trim.internal=FALSE) 
plot(phylo.dend,use.edge.length=F) 
아래에 있기 때문에 따라서 우리가, 잎 (1,5)(3,4)을 축소 할

enter image description here

이제 우리는 dendrogram (Chronogram)

new.dend <- chronos(phylo.dend) 
관련 문제