2010-02-22 14 views
11

J'ai un dendrogramme qui m'a été donné en tant qu'images. Comme il n'est pas très grand, je peux le construire "à la main" dans un objet R.Comment créer manuellement un objet dendrogram (ou "hclust")? (en R)

Donc, ma question est de savoir comment puis-je créer manuellement un objet, quand tout ce que j'ai dendrogramme (ou « hclust ») est l'image dendrogramme?

Je vois qu'il ya une fonction appelée « as.dendrogram » Mais je ne pouvais pas trouver un exemple sur la façon de l'utiliser.

(ps: Ce poste suit ma question de here)

Un grand merci, Tal

Répondre

21

Je pense que vous êtes mieux de créer un objet hclust, puis le convertir en un dendrogramme en utilisant as.dendrogram, puis essayer de créer un dendrogramme directement. Regardez la page d'aide ?hclust pour voir la signification des éléments d'un objet hclust.

Voici un exemple simple avec quatre feuilles A, B, C et D, combinant premier AB, puis CD, et enfin AB CD:

a <- list() # initialize empty object 
# define merging pattern: 
# negative numbers are leaves, 
# positive are merged clusters (defined by row number in $merge) 
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 <- LETTERS[1:4] # labels of leaves 
class(a) <- "hclust"  # make it an hclust object 
plot(a)      # look at the result 

#convert to a dendrogram object if needed 
ad <- as.dendrogram(a) 
+0

Excellente idée Aniko - merci! –

4

complètement manuel ... pas recommandé pour les grands ensembles de données.

tree<-list(); 
attributes(tree)<-list(members=18,height=3); 
class(tree)<-"dendrogram"; 

tree[[1]]<-list(); 
attributes(tree[[1]])<-list(members=4,height=2,edgetext="1"); 
tree[[1]][[1]]<-list(); 
attributes(tree[[1]][[1]])<-list(members=2,height=1,edgetext="H"); 
    tree[[1]][[1]][[1]]<-list(); 
    attributes(tree[[1]][[1]][[1]])<-list(members=1,height=0,edgetext="H",label="1HH",leaf=TRUE); 
    tree[[1]][[1]][[2]]<-list(); 
    attributes(tree[[1]][[1]][[2]])<-list(members=1,height=0,edgetext="T",label="1HT",leaf=TRUE); 
tree[[1]][[2]]<-list(); 
attributes(tree[[1]][[2]])<-list(members=2,height=1,edgetext="T"); 
    tree[[1]][[2]][[1]]<-list(); 
    attributes(tree[[1]][[2]][[1]])<-list(members=1,height=0,edgetext="H",label="1TH",leaf=TRUE); 
    tree[[1]][[2]][[2]]<-list(); 
    attributes(tree[[1]][[2]][[2]])<-list(members=1,height=0,edgetext="T",label="1TT",leaf=TRUE); 
tree[[2]]<-list(); 
attributes(tree[[2]])<-list(members=2,height=2,edgetext="2"); 
tree[[2]][[1]]<-list(); 
attributes(tree[[2]][[1]])<-list(members=1,height=0,edgetext="H",label="2H",leaf=TRUE); 
tree[[2]][[2]]<-list(); 
attributes(tree[[2]][[2]])<-list(members=1,height=0,edgetext="T",label="2T",leaf=TRUE); 
tree[[3]]<-list(); 
attributes(tree[[3]])<-list(members=4,height=2,edgetext="3"); 
tree[[3]][[1]]<-list(); 
attributes(tree[[3]][[1]])<-list(members=2,height=1,edgetext="H"); 
    tree[[3]][[1]][[1]]<-list(); 
    attributes(tree[[3]][[1]][[1]])<-list(members=1,height=0,edgetext="H",label="3HH",leaf=TRUE); 
    tree[[3]][[1]][[2]]<-list(); 
    attributes(tree[[3]][[1]][[2]])<-list(members=1,height=0,edgetext="T",label="3HT",leaf=TRUE); 
tree[[3]][[2]]<-list(); 
attributes(tree[[3]][[2]])<-list(members=2,height=1,edgetext="T"); 
    tree[[3]][[2]][[1]]<-list(); 
    attributes(tree[[3]][[2]][[1]])<-list(members=1,height=0,edgetext="H",label="3TH",leaf=TRUE); 
    tree[[3]][[2]][[2]]<-list(); 
    attributes(tree[[3]][[2]][[2]])<-list(members=1,height=0,edgetext="T",label="3TT",leaf=TRUE); 
tree[[4]]<-list(); 
attributes(tree[[4]])<-list(members=2,height=2,edgetext="4"); 
tree[[4]][[1]]<-list(); 
attributes(tree[[4]][[1]])<-list(members=1,height=0,edgetext="H",label="4H",leaf=TRUE); 
tree[[4]][[2]]<-list(); 
attributes(tree[[4]][[2]])<-list(members=1,height=0,edgetext="T",label="4T",leaf=TRUE); 
tree[[5]]<-list(); 
attributes(tree[[5]])<-list(members=4,height=2,edgetext="5"); 
tree[[5]][[1]]<-list(); 
attributes(tree[[5]][[1]])<-list(members=2,height=1,edgetext="H"); 
    tree[[5]][[1]][[1]]<-list(); 
    attributes(tree[[5]][[1]][[1]])<-list(members=1,height=0,edgetext="H",label="5HH",leaf=TRUE); 
    tree[[5]][[1]][[2]]<-list(); 
    attributes(tree[[5]][[1]][[2]])<-list(members=1,height=0,edgetext="T",label="5HT",leaf=TRUE); 
tree[[5]][[2]]<-list(); 
attributes(tree[[5]][[2]])<-list(members=2,height=1,edgetext="T"); 
    tree[[5]][[2]][[1]]<-list(); 
    attributes(tree[[5]][[2]][[1]])<-list(members=1,height=0,edgetext="H",label="5TH",leaf=TRUE); 
    tree[[5]][[2]][[2]]<-list(); 
    attributes(tree[[5]][[2]][[2]])<-list(members=1,height=0,edgetext="T",label="5TT",leaf=TRUE); 
tree[[6]]<-list(); 
attributes(tree[[6]])<-list(members=2,height=2,edgetext="6"); 
tree[[6]][[1]]<-list(); 
attributes(tree[[6]][[1]])<-list(members=1,height=0,edgetext="H",label="6H",leaf=TRUE); 
tree[[6]][[2]]<-list(); 
attributes(tree[[6]][[2]])<-list(members=1,height=0,edgetext="T",label="6T",leaf=TRUE); 


windows(width=3,rescale="fixed"); 
par(ps=8); 
plot(rev(tree),center=TRUE,horiz=TRUE); 
+0

Merci. Bien que comme vous l'avez dit - pas pour les faibles de cœur :) –