Vi algumas consultas sobre agrupamentos em séries temporais e especificamente sobre agrupamentos, mas não acho que elas respondam à minha pergunta.
Antecedentes: Quero agrupar genes em um experimento de levedura. Há quatro pontos de tempo dizer: t1 t2 t3 e t4 e número total de genes G . Eu tenho os dados em forma de uma matriz M na qual as colunas representam os tratamentos (ou pontos no tempo) t1 t2 t3 e t4 e as linhas representam os genes. Portanto, M é uma matriz Gx4.
Problema: eu quero agrupar os genes que se comportam da mesma forma em todos os pontos de tempo t1 t2 t3 e t4 , bem como dentro de um ponto de tempo específico ti , em que eu estou em {1, 2, 3, 4} (caso não possamos fazer ambos os agrupamentos, o agrupamento dentro de um ponto no tempo é mais importante do que o agrupamento entre os pontos no tempo). Além disso, também quero desenhar um mapa de calor.
Minha solução:
Eu uso o código R abaixo para obter um mapa de calor, bem como os clusters usando a hclust
função em R (executa cluster hierárquico com distância euclidiana)
row.scaled.expr <- (expr.diff - rowMeans(expr.diff)) / rowSds(expr.diff)
breaks.expr <- c(quantile(row.scaled.expr[row.scaled.expr < 0],
seq(0,1,length=10)[-9]), 0,
quantile(row.scaled.expr[row.scaled.expr > 0],
seq(0,1,length=10))[-1] )
blue.red.expr <- maPalette(low = "blue", high = "red", mid = "white",
k=length(breaks.expr) - 1)
pdf("images/clust.pdf",
height=30,width=20,pointsize=20)
ht1 <- heatmap.2(row.scaled.expr, col = blue.red.expr, Colv = FALSE, key = FALSE,
dendrogram = "row", scale = "none", trace = "none",
cex=1.5, cexRow=1, cexCol=2,
density.info = "none", breaks = breaks.expr,
labCol = colnames(row.scaled.expr),
labRow="",
lmat=rbind( c(0, 3), c(2,1), c(0,4) ), lhei=c(0.25, 4, 0.25 ),
main=expression("Heat Map"),
ylab="Genes in the Microarray",
xlab="Treatments"
)
dev.off()
Eu descobri recentemente um hopach
pacote no Bioconductor que pode ser usado para estimar o número de clusters. Anteriormente, eu estava atribuindo aleatoriamente o número de caixas para o mapa de calor e cortando a árvore a uma altura apropriada para obter um número pré-especificado de clusters.
Possíveis problemas na minha solução:
- Posso não estar agrupando os genes em um tratamento específico e agrupando genes apenas entre tratamentos ou vice-versa.
- Pode haver melhores maneiras de obter um mapa de calor para o padrão que eu quero ver (genes semelhantes em um tratamento e entre tratamentos).
- Pode haver melhores métodos de visualização dos quais eu não conheço.
Nota:
csgillespie (moderador) possui um documento mais geral em seu site, no qual ele discute todos os aspectos da análise do curso do tempo (incluindo mapas de calor e agrupamento). Eu gostaria que você pudesse me indicar artigos que descrevem mapas de calor e agrupamentos em detalhes.
Eu tentei o
pvclust
pacote, mas ele reclama que M é singular e depois falha.
fonte
Em complemento à resposta do @ mbq (
Mfuzz
parece ótimo), vou colocar algumas referências (PDFs) sobre o agrupamento de dados de expressão gênica no decorrer do tempo:Você experimentou o
timecourse
pacote (como sugerido por @csgillespie no folheto )?fonte
timecourse
pacote não é realmente para determinar clusters, é para calcular quais genes são expressos diferencialmente.kml
mas não sou realmente um especialista nesse domínio).Apenas para adicionar às outras respostas (que parecem resolver o problema), você tentou usar algoritmos de cluster padrão para seus dados ao construir seu dendrograma? Por exemplo,
Em vez de usar a distância média para agrupar, você também pode usar "ala", "única", "mediana", ... Veja
?hclust
para obter uma lista completa.Para extrair clusters, use o
hclust
comando diretamente e, em seguida, use ocutree
comando Por exemplo,Mais detalhes podem ser encontrados na minha página da web .
fonte
cutree
comando que pode ser usado para extrair clusters do objeto heatmap.2.