Кластеризация и тепловая карта в R - PullRequest
4 голосов
/ 22 марта 2012

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

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

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

1 Ответ

1 голос
/ 27 сентября 2012

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

Тепловая карта Вопрос 1

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

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

...