есть ли способ получить поддерево из hclust? (Р)

Я хочу создать «поддерево» из объекта hclust.

Например, допустим, у меня есть следующий объект:

a <- list()  # initialize empty object
a$merge <- matrix(c(-1, -2,
                    -3, -4,
                     1,  2,
             -5,-6,
             3,4), nc=2, byrow=TRUE ) 
a$height <- c(1, 1.5, 3,4,4.5)    # define merge heights
a$order <- 1:6              # order of leaves(trivial if hand-entered)
a$labels <- 1:6# LETTERS[1:4]    # labels of leaves
class(a) <- "hclust"        # make it an hclust object
plot(a)                     # look at the result   

Теперь желаю извлечь из него следующее поддерево:

a <- list()  # initialize empty object
a$merge <- matrix(c(-1, -2,
                    -3, -4,
                     1,  2
                ), nc=2, byrow=TRUE ) 
a$height <- c(1, 1.5, 3)    # define merge heights
a$order <- 1:4             # order of leaves(trivial if hand-entered)
a$labels <- 1:4# LETTERS[1:4]    # labels of leaves
class(a) <- "hclust"        # make it an hclust object
plot(a)                     # look at the result   

Как я мог получить к нему доступ?

(Я знаю, что cutree может достать мне объекты поддерева, но не создать реальный объект hclust)

Спасибо за любую помощь,

Таль


person Tal Galili    schedule 13.06.2010    source источник


Ответы (2)


Не уверен, что это то, что вы ищете, но вы могли бы

a <- as.dendrogram(a)
branch1 <- a[[1]]
branch2 <- a[[2]]

par(mfrow=c(1,3))
plot(a)
plot(branch1)
plot(branch2)
person nico    schedule 14.06.2010
comment
Именно то, что я искал. Спасибо, Нико. - person Tal Galili; 14.06.2010

Если у вас есть матрица расстояний, вы можете сделать что-то подобное:

subtree <- function(d, idx) {
  hclust(dist(d[idx, idx]))
}
d <- matrix(rnorm(50 * 50), 50)
s <- subtree(d, sample(1:50, 20))
plot(s)
person qed    schedule 07.11.2016