Slovník | Vyhledávání | Mapa webu
 
Základy informatiky pro biologyAnalýza dat v R Příklad komplexní analýzy dat Zobrazení výsledků - heatmapa

Logo Matematická biologie

Zobrazení výsledků - heatmapa

K dispozici máme tři datové soubory (klikněte na název pro stažení souboru):

uroda.txt - tabulka s hektarovými výnosy 14 plodin ve 14 krajech České republiky

kraje.txt - tabulka krajů, jejich velikosti v hektarech, populace, jestli se nacházejí na hranici ČR a do kterého regionu patří

plodiny.txt - tabulka obsahující název každé plodiny, její kategorizaci dle typu a výživnou hodnotu

Prvním krokem každé analýzy je obvykle načtení dat. To provedme pro každou tabulku zvlášť, s pomocí funkce read.delim(), pro zachování české diakritiky použijeme argument  encoding:

> uroda <- read.delim("uroda.txt", header=TRUE, row.names=1)
kraje <- read.delim("kraje.txt", header=TRUE, row.names=1, encoding="UTF-8")
plodiny <- read.delim("plodiny.txt", header=TRUE, row.names=1, encoding="UTF-8")

> rownames(uroda)<-kraje$Name

Využívame výsledky shlukové analýzy z predešlých kapitol.

Velmi užitečným nástrojem pro zobrazení výsledků shlukování je heatmapa, která zobrazí dvourozměrně hodnoty výnosů plodin v krajích a zároveň je seřadí podle výsledků shlukování. Dostupných je několik funkcí: heatmap(), nebo heatmap.2() z balíku gplots.

Funkce heatmap() má tuto strukturu a argumenty:

heatmap(x, Rowv, Colv, ColSideColors, labRow, cexRow, col, …)
Vybrané argumenty:
x – numerická matice
Rowv, Colv – dendrogram pro řádky nebo sloupce
ColSideColors – barevné označení sloupců (podobně pro řádky RowSideColors)
labRow – textové popisky řádků (pro sloupce labCol)
cexRow – relativní velikost písma pro popisky řádků (pro sloupce cexCol)
col – barevná škála

Nastavíme barevnou škálu od modré přes černou až k červené barvě. Modrá barva značí málo výnosné plodiny a červená velmi výnosné plodiny. Černá barva znamená průměrný výnos.

> barvy <- colorRampPalette(c("blue", "black","red"))(15)

Funkce heatmap() automaticky provádí:

> heatmap(as.matrix(uroda),col=barvy)

Pokud chceme vytvořit heatmapu na základě našeho vlastního shlukování, musíme definovat parametr Rowv (pro dendrogram řádků - míst) a Colv (pro dendrogram sloupců - plodin).

Pro kraje použijeme dendrogram ze shlukování na Spearmanově korelaci:
> dendr.hclust.kraj.spear.avg <- as.dendrogram(hclust.kraj.spear.avg)

Pro plodiny použijeme dendrogram ze shlukování na euklidovské vzdálenosti:
> dendr.hclust.plodina.eucl.avg <- as.dendrogram(hclust.plodina.eucl.avg, labels=group)

> heatmap(as.matrix(uroda), col=barvy, RowSideColors=as.character(as.numeric(group)), Colv= dendr.hclust.plodina.eucl.avg, Rowv= dendr.hclust.kraj.spear.avg)

Zadáme dendrogram z korelací i u plodin:

> dendr.hclust.plodina.spear.avg <- as.dendrogram(hclust.plodina.spear.avg, labels=group)
> heatmap(as.matrix(uroda), col=barvy, RowSideColors=as.character(as.numeric(group)), Colv= dendr.hclust.plodina.spear.avg, Rowv= dendr.hclust.kraj.spear.avg)

Pokud chceme vidět názvy plodin (plodiny$název), zadefinujeme parametr labCol a zvětšíme písmo ve sloupcích pomocí parametru cexCo. Dále pro zýraznění rozdílů mezi kraji použijeme škálovaní slopcu:

> heatmap(as.matrix(uroda), col=barvy, RowSideColors=as.character(as.numeric(group)), Colv= dendr.hclust.plodina.spear.avg,
        Rowv= dendr.hclust.kraj.spear.avg,
        labCol=plodiny$název, cexCol=1.3, scale="col")

Pokud chceme shlukování řádků nebo sloupců, zadáme hodnotu NA do parametrů Colv nebo Rowv

> heatmap(as.matrix(uroda), col=barvy, RowSideColors=as.character(as.numeric(group)), Colv= dendr.hclust.plodina.spear.avg,
        Rowv= NA, labCol=plodiny$názov, cexCol=1.3, scale="col")

Heatmapu uložíme např. funkcí png() v definované velikosti:

> png("heatmapa7.png", height=1200, width=600)
> heatmap(as.matrix(uroda), col=barvy, RowSideColors=as.character(as.numeric(group)), Colv= dendr.hclust.plodina.spear.avg,
        Rowv= dendr.hclust.kraj.spear.avg,
        labCol=plodiny$názov, cexCol=1.3)
> dev.off()

Vzhledem k tomu, že heatmapa této funkce je definovaná přes layout() a ten není možné měnit, není tedy možné ani její zvětšování. Pokud se vám nechce probírat zdrojovým kódem, zkuste funkci heatmap.2() z balíku gplots, ta už má více možností.

 
vytvořil Institut biostatistiky a analýz Lékařské fakulty Masarykovy univerzity