2012-03-22 2 views
4

Я новичок в R, и я пытаюсь выполнить некоторую кластеризацию в таблице данных, где строки представляют отдельные объекты и столбцы, представляют собой функции, которые были измерены для этих объектов. Я работал над некоторыми учебниками по кластеризации, и я получаю некоторый результат, однако, тепловая карта, которую я получаю после кластеризации, совсем не соответствует тепловой карте, полученной из той же таблицы данных с другой программой. Хотя тепловая карта этой программы указывает на явные различия в маркерной экспрессии между объектами, моя тепловая карта не показывает больших различий, и я не могу распознать какую-либо структуру кластеризации (т. Е. Цвет) на тепловой карте, она просто кажется случайным образом запутанным набором цветов, близких друг к другу (без большого контраста). Вот пример кода, который я использую, возможно, у кого-то есть идея о том, что я могу делать неправильно.Кластеризация и тепловая карта в R

mydata <- read.table("mydata.csv") 
datamat <- as.matrix(mydata) 
datalog <- log(datamat) 

Я использую значение журнала для кластеризации, потому что я знаю, что другая программа делает это тоже

library(gplots) 

hr <- hclust(as.dist(1-cor(t(datalog), method="pearson")), method="complete") 
mycl <- cutree(hr, k=7) 
mycol <- sample(rainbow(256)); mycol <- mycol[as.vector(mycl)] 
heatmap(datamat, Rowv=as.dendrogram(hr), Colv=NA, 
    col=colorpanel(40, "black","yellow","green"), 
    scale="column", RowSideColors=mycol) 

Опять же, я сюжет оригинальных цветов, но использовать лог-кластеры, потому что я знаю, что это то, что делает другая программа.

Я попытался поиграть с методами, но я не получаю ничего, что по крайней мере каким-то образом напоминало бы кластерную тепловую карту. Когда я вынимаю масштабирование, тепловая карта становится очень темной (и я на самом деле абсолютно уверен, что я как-то масштабирую или нормализую данные по столбцу). Я также попытался сгруппировать с помощью k-средств, но опять же это не помогло. Моя идея заключалась в том, что цветовая гамма может не использоваться полностью из-за двух выбросов, но, хотя их удаление слегка увеличило диапазон цветов, нанесенных на тепловую карту, это все еще не выявило правильных кластеров.

С чем я могу поиграть?

И можно ли изменить цветовую гамму с помощью тепловой карты, чтобы в последнем ящике находились выбросы, которые имеют диапазон «все больше определенного значения»? Я попытался сделать это с помощью heatmap.2 (аргумент «breaks»), но я не совсем преуспел, и мне не удалось установить цвета строки, которые я использую с функцией heatmap.

+0

Учебное пособие по созданию карты тепла с использованием ggplot2 доступно на [http://learnr.wordpress.com/2010/01/26/ggplot2-quick-heatmap-plotting/] –

+0

Имеется учебное пособие по кластерному анализу в R на [http://www.statmethods.net/advstats/cluster.html] –

+0

@ EtienneLow-Décarie: Спасибо, я уже проходил эти учебные пособия, а также через учебник Томаса Гирка, но это мне не помогло для выявления проблемы. Фактически, я пытался найти решение на целую неделю, используя несколько веб-сайтов и учебников. Я был бы великодушен, если бы вы могли дать мне подсказку о том, какие детали я мог упустить, из-за которых кластеризация работает неправильно. – AnjaM

ответ

1

Если вы согласны с использованием heatmap.2 из пакета gplots, который позволит вам добавлять перерывы, чтобы назначать цвета диапазонам, представленным в вашей карте нагрева.
Например, если у вас 3 цвета синий, белый и красный со значениями происходит от низкой до высокой вы могли бы сделать что-то вроде этого:

my.breaks <- c(seq(-5, -.6, length.out=6),seq(-.5999999, .1, length.out=4),seq(.100009,5, length.out=7)) 
result <- heatmap.2(mtscaled, Rowv=T, scale='none', dendrogram="row", symm = T, col=bluered(16), breaks=my.breaks) 

В этом случае у вас есть 3 набора значений, которые соответствуют 3 цвета, значения будут различаться, в зависимости от того, какие значения у вас есть с вашими данными.

Одна вещь, которую вы делаете в своей программе, - это вызвать hclust на ваши данные, а затем вызвать на ней тепловую карту, однако, если вы посмотрите на странице руководства по тепловой карте, она заявляет: По умолчанию hclust. Так что я не думаю, что вам нужно это сделать. Вы можете захотеть взглянуть на некоторые подобные вопросы, которые я просил, что может помочь направить вас в правильном направлении:

Heatmap Question 1

Heatmap Question 2

Если вы разместите изображение тепловой карты вы получаете и изображение тепловой карты, которое делает другая программа, будет легче для нас, чтобы помочь вам больше.

Смежные вопросы