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