Кластеризация и тепловая карта в 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-средних, но, опять же, это не помогло. Моя идея заключалась в том, что цветовую шкалу нельзя использовать полностью из-за двух выбросов, но, хотя их удаление немного увеличило диапазон цветов, отображаемых на тепловой карте, это все равно не выявило правильных кластеров.

Есть ли еще что-нибудь, с чем я могу поиграть?

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


person AnjaM    schedule 22.03.2012    source источник
comment
Учебное пособие по созданию тепловой карты с использованием ggplot2 доступно по адресу [learnr.wordpress.com/2010/01/26/ggplot2-quick-heatmap-plotting/   -  person Etienne Low-Décarie    schedule 22.03.2012
comment
Учебное пособие по кластерному анализу в R доступно по адресу [statmethods.net/advstats/cluster.html]   -  person Etienne Low-Décarie    schedule 22.03.2012
comment
@ EtienneLow-Décarie: Спасибо, я просмотрел эти учебные пособия, а также учебник Томаса Гирке раньше, но это не помогло мне определить проблему. Фактически, я всю неделю пытался найти решение, используя ряд веб-сайтов и учебных пособий. Я был бы очень рад, если бы вы намекнули, какую конкретную деталь я мог упустить из виду, из-за чего кластеризация не работает должным образом.   -  person AnjaM    schedule 22.03.2012
comment
что это за другая программа? Как он вычисляет тепловую карту?   -  person EDi    schedule 22.03.2012
comment
@EDi: Это не коммерческий, а разработанный в моем университете. Он использует иерархическую кластеризацию по натуральному логарифму данных. На тепловой карте отображаются нелогарифмические значения данных, и вы можете четко видеть отдельные популяции на тепловой карте. Мне сказали, что для данных не используется масштабирование.   -  person AnjaM    schedule 22.03.2012
comment
Может помочь, если вы добавите ссылку на то, где мы могли бы получить данные, чтобы попробовать это.   -  person Alos    schedule 27.09.2012


Ответы (1)


Если вы не против использовать тепловую карту.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. Так что я не думаю, что вам нужно это делать. Возможно, вы захотите взглянуть на некоторые похожие вопросы, которые я задал, которые могут помочь вам указать правильное направление:

Вопрос 1 тепловой карты

Тепловая карта, вопрос 2

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

person Alos    schedule 27.09.2012