Programa R para Biologia da Conservação
Gostaria de reagir a esta mensagem? Crie uma conta em poucos cliques ou inicie sessão para continuar.

COMO FAZER O R IDENTIFICAR MEUS GRUPOS NO CLUSTER?

2 participantes

Ir para baixo

COMO FAZER O R IDENTIFICAR MEUS GRUPOS NO CLUSTER? Empty COMO FAZER O R IDENTIFICAR MEUS GRUPOS NO CLUSTER?

Mensagem por Nelson Rodrigues Ter Mar 15, 2016 7:56 pm

Boa noite a todos

Eu fiz o cluster e estou tentando fazer com que seja identificado os 4 grupos que se formaram. Quando faço o cluster com os dados na vertical ele identifica os 4 grupos mas quando coloco na horizontal eu não consigo fazer com que os grupos apareçam, alguém pode me ajudar? Sei que a dúvida é básica mas não estou conseguindo.

Abraços

Abaixo envio os dados:

par(mar=c(10,3,2,10))
plot(as.dendrogram(cluster.guildas),horiz=T)
rect.hclust(cluster.guildas, horizontal=T, k=4)
Nelson Rodrigues
Nelson Rodrigues

Mensagens : 3
Data de inscrição : 07/01/2016

Ir para o topo Ir para baixo

COMO FAZER O R IDENTIFICAR MEUS GRUPOS NO CLUSTER? Empty Re: COMO FAZER O R IDENTIFICAR MEUS GRUPOS NO CLUSTER?

Mensagem por Prof. Marcos Qui Mar 17, 2016 2:02 pm

Oi, Nelson!

Testei aqui, e acredito que a função rect.hclust não funcione com o cluster na horizontal, pois para construí-lo nós mudamos a classe do objeto de cluster para dendrograma.

Vou buscar mais informações para saber se há algum outro comando alternativo, ok?
Prof. Marcos
Prof. Marcos

Mensagens : 678
Data de inscrição : 23/12/2015
Idade : 42
Localização : Maceió, AL

https://cantinhodor.wordpress.com/

Ir para o topo Ir para baixo

COMO FAZER O R IDENTIFICAR MEUS GRUPOS NO CLUSTER? Empty Re: COMO FAZER O R IDENTIFICAR MEUS GRUPOS NO CLUSTER?

Mensagem por Prof. Marcos Qui Mar 17, 2016 2:14 pm

Achei uma solução, Nelson, a partir de uma dúvida exatamente como a sua que foi respondida no Stack Overflow:

http://stackoverflow.com/questions/24140339/tree-cut-and-rectangles-around-clusters-for-a-horizontal-dendrogram-in-r

Na verdade há mais de uma solução lá, incluindo uma pelo ggplot, caso você queira olhar.

A solução mais direta é criar uma versão alternativa da função rect.hclust. Basta copiar e colar o código no R para criar a função:

Código:

rhc <- function (tree, k = NULL, which = NULL, x = NULL, h = NULL, border = 2,
    cluster = NULL)
{
    if (length(h) > 1L | length(k) > 1L)
        stop("'k' and 'h' must be a scalar")
    if (!is.null(h)) {
        if (!is.null(k))
            stop("specify exactly one of 'k' and 'h'")
        k <- min(which(rev(tree$height) < h))
        k <- max(k, 2)
    }
    else if (is.null(k))
        stop("specify exactly one of 'k' and 'h'")
    if (k < 2 | k > length(tree$height))
        stop(gettextf("k must be between 2 and %d", length(tree$height)),
            domain = NA)
    if (is.null(cluster))
        cluster <- cutree(tree, k = k)
    clustab <- table(cluster)[unique(cluster[tree$order])]
    m <- c(0, cumsum(clustab))
    if (!is.null(x)) {
        if (!is.null(which))
            stop("specify exactly one of 'which' and 'x'")
        which <- x
        for (n in seq_along(x)) which[n] <- max(which(m < x[n]))
    }
    else if (is.null(which))
        which <- 1L:k
    if (any(which > k))
        stop(gettextf("all elements of 'which' must be between 1 and %d",
            k), domain = NA)
    border <- rep_len(border, length(which))
    retval <- list()
    for (n in seq_along(which)) {
        rect(
            ybottom = m[which[n]] + 0.66,
            xright = par("usr")[3L],
            ytop = m[which[n] + 1] + 0.33,
            xleft = mean(rev(tree$height)[(k - 1):k]),
            border = border[n])
        retval[[n]] <- which(cluster == as.integer(names(clustab)[which[n]]))
    }
    invisible(retval)
}

E depois, com o seu cluster na horizontal aberto, executar a nova função assim:

rhc(cluster.guildas, k = 4, border = "red")

Avise se deu certo, ok? Wink
Prof. Marcos
Prof. Marcos

Mensagens : 678
Data de inscrição : 23/12/2015
Idade : 42
Localização : Maceió, AL

https://cantinhodor.wordpress.com/

Ir para o topo Ir para baixo

COMO FAZER O R IDENTIFICAR MEUS GRUPOS NO CLUSTER? Empty Re: COMO FAZER O R IDENTIFICAR MEUS GRUPOS NO CLUSTER?

Mensagem por Nelson Rodrigues Dom Mar 20, 2016 12:04 pm

SALVEEEEEEEEEEEEEEEE Marcos, sem comentários, muito obrigado

Deu certinho, agora ficou show. Agora to apanhando para colocar a legenda (coeficiente de correlação cofenética) no gráfico mas chego lá. A legenda aparece mas fica sobrepondo as minhas guildas.

Bom domingo e mais uma vez obrigado
Nelson Rodrigues
Nelson Rodrigues

Mensagens : 3
Data de inscrição : 07/01/2016

Ir para o topo Ir para baixo

COMO FAZER O R IDENTIFICAR MEUS GRUPOS NO CLUSTER? Empty Re: COMO FAZER O R IDENTIFICAR MEUS GRUPOS NO CLUSTER?

Mensagem por Prof. Marcos Dom Mar 20, 2016 3:41 pm

Que legal, Nelson, que bom que deu certo! Smile

Sobre incluir o texto, você pode ir pela função legend() e tentar ajustar a posição. Mas se estiver muito difícil, uma opção é usar a função mtext(), que coloca texto na margem, do lado "de fora" do gráfico .

Aqui eu dou algumas dicas sobre a inclusão de textos nos gráficos:
https://cantinhodor.wordpress.com/2015/04/24/graficos-no-r-mexendo-em-nomes-dos-eixos-e-algumas-outras-coisinhas/

Abraços, e qualquer coisa pergunte aqui.
Prof. Marcos
Prof. Marcos

Mensagens : 678
Data de inscrição : 23/12/2015
Idade : 42
Localização : Maceió, AL

https://cantinhodor.wordpress.com/

Ir para o topo Ir para baixo

COMO FAZER O R IDENTIFICAR MEUS GRUPOS NO CLUSTER? Empty Re: COMO FAZER O R IDENTIFICAR MEUS GRUPOS NO CLUSTER?

Mensagem por Conteúdo patrocinado


Conteúdo patrocinado


Ir para o topo Ir para baixo

Ir para o topo

- Tópicos semelhantes

 
Permissões neste sub-fórum
Não podes responder a tópicos