Тепловая карта данных микрочипа с использованием расстояния Пирсона - PullRequest
3 голосов
/ 16 июля 2011

Я пытался сгенерировать тепловую карту в R для некоторых данных микрочипа и по большей части был успешным в ее создании, основанной на онлайн-инструкциях, но она не выполняет именно то, что я хочу. Я хотел бы объединить данные, основанные на расстоянии Пирсона, а не на евклидовом расстоянии, но я столкнулся с некоторыми трудностями.

Используя heatmap2 (из пакета gplots), я использую следующий код для создания моей начальной карты тепла:

heatmap.2(Test402,trace="none",density="none",scale="row", ColSideColors=c("red","blue")   [data.test.factors],col=redgreen,labRow="",hclustfun=function(x) hclust(x,method="complete"))

Test402 - это матрица с 402 строками (генами) и 31 столбцом (пациентами), а data.test.factors являются индикаторами группы результатов, к которой принадлежит каждый пациент. Использование hclustfun прекрасно работает здесь, и тепловая карта, кажется, реагирует на изменения в методе и в целом работает. Проблема в том, что расстояние кластеризации - это все евклидово расстояние, я хотел бы изменить его на расстояние Пирсона. Поэтому я пытаюсь сделать следующее:

heatmap.2(Test402,trace="none",density="none",scale="row", ColSideColors=c("red","blue")[data.test.factors],col=redgreen,labRow="",hclustfun=function(x) hclust(x,method="complete"), distfun=function(x) as.dist((1-cor(x))/2) )

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

cU = cor(Test402)
heatmap.2(cU,trace="none",density="none",scale="row", ColSideColors=c("red","blue")[data.test.factors],col=redgreen,labRow="",hclustfun=function(x) hclust(x,method="complete"), distfun=function(x) as.dist((1-x)/2) )

Это работает, НО здесь проблема. Тепловая карта вместо того, чтобы иметь исходные значения выражений в TEST402, теперь отображает только корреляции. Это НЕ то, что я хочу! Я хочу это , и я только хочу, чтобы дендрограмма кластеризовалась иначе, я не хочу менять, какие данные на самом деле представлены в тепловой карте! Это возможно?

1 Ответ

10 голосов
/ 17 июля 2011

Хорошо ... Я думаю, вы просто не понимаете, как работают cor и dist. Из документации на dist:

This function computes and returns the distance matrix computed by using the specified 
    distance measure to compute the distances between the rows of a data matrix.

А из документации по cor:

If x and y are matrices then the covariances (or correlations) 
    between the columns of x and the columns of y are computed.

Видите разницу? distdist объекты, то есть то, что heatmap.2 предполагает, что оно получает), предполагают, что вы вычислили расстояние между строками , а при использовании cor вы по существу вычисляете расстояние столбцы . Добавление простой транспонирования к вашей функции расстояния позволяет запустить этот (не квадратный) пример для меня:

TEST <- matrix(runif(100),nrow=20)
heatmap.2(t(TEST), trace="none", density="none", 
            scale="row",
            labRow="",
            hclust=function(x) hclust(x,method="complete"),
            distfun=function(x) as.dist((1-cor(t(x)))/2))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...