2011-01-24 5 views
5

다른 사람들이 K- 클러스터 순서를 사용하여 무엇을하고 있는지 궁금합니다. 히트 맵 (주로 ChIP-Seq 데이터)을 만들고 있으며 사용자 정의 히트 맵 기능 (R의 히트 맵 기능 내장)을 사용하여 멋진 인물을 얻고 있습니다. 그러나 두 가지 개선 사항을 원합니다. 첫 번째는 감소하는 평균값을 기준으로 클러스터를 주문하는 것입니다. 예를 들어 다음 코드는클러스터 내부 및 내부 클러스터 순서 지정

fit = kmeans(data, 8, iter.max=50, nstart=10) 
d = data.frame(data, symbol) 
d = data.frame(d, fit$cluster) 
d = d[order(d$fit.cluster),] 

으로 나에게 클러스터 열에 정렬 된 data.frame을 제공합니다. 8 개의 클러스터가 각각의 순서대로 정렬되도록 행을 정렬하는 가장 좋은 방법은 무엇입니까?

둘째, 각 클러스터 내에서 행의 평균을 가장 높은 값에서 가장 낮은 값으로 정렬하는 것이 좋습니다. 이것은 데이터에보다 조직적인 모습을 부과 할 것이나, 신중하지 않은 관찰자를 속여서 그가하지 말아야 할 것을 추측 할 수도 있습니다. 이것을 권하고 싶다면 어떻게하면 가장 효율적으로 할 수 있을까요?

+0

수단? 클러스터링에 사용되는 변수 중 하나입니까? –

+0

각 클러스터의 값을 의미합니다. 예를 들어, 각 클러스터가 data.frame에서 30 행이고 ​​data.frame에 k-means 클러스터링이 수행되는 열이 10 개인 경우 각 클러스터의 평균 값은 300입니다. 중심을 사용할 수도 있습니다. –

+0

centroid는 각 클러스터의 번호가 아니며 10-d 공간의 한 지점이므로 각 클러스터 중심의 좌표는 10입니다. –

답변

4

당신이 물어 보는 것에 대한 정확한 대답은 아니지만 k-means clustering 대신 seriation을 고려할 수도 있습니다. 클러스터링보다는 안수 방식과 비슷하지만, 결과적으로 seriated 데이터의 히트 맵이 생성됩니다.이 히트 맵은 k- 평균과 특별하게 정렬 된 히트 맵을 사용하는 것처럼 보입니다.

가 seriation에 대한 R 패키지가, seriation라고 그리고 내가 시도하는 예를 요리 한 후에는 directly from CRAN

내가 Q의 세부 사항을 답변 해 드리겠습니다 얻을 수있는 네트을 가지고 있습니다.

Ok - 위의 의견에서 다음과 같은 올바른 대답. 먼저 몇 가지 더미 데이터 - 3 개의 변수 각각에 10 개의 샘플로 구성된 3 개의 클러스터.

set.seed(1) 
dat <- data.frame(A = c(rnorm(10, 2), rnorm(10, -2), rnorm(10, -2)), 
        B = c(rnorm(10, 0), rnorm(10, 5), rnorm(10, -2)), 
        C = c(rnorm(10, 0), rnorm(10, 0), rnorm(10, -10))) 

## randomise the rows 
dat <- dat[sample(nrow(dat)),] 
clus <- kmeans(scale(dat, scale = FALSE), centers = 3, iter.max = 50, 
       nstart = 10) 

## means of n points in each cluster 
mns <- sapply(split(dat, clus$cluster), function(x) mean(unlist(x))) 

## order the data by cluster with clusters ordered by `mns`, low to high 
dat2 <- do.call("rbind", split(dat, clus$cluster)[order(mns)]) 

## heatmaps 
## original first, then reordered: 
layout(matrix(1:2, ncol = 2)) 
image(1:3, 1:30, t(data.matrix(dat)), ylab = "Observations", 
     xlab = "Variables", xaxt = "n", main = "Original") 
axis(1, at = 1:3) 
image(1:3, 1:30, t(data.matrix(dat2)), ylab = "Observations", 
     xlab = "Variables", xaxt = "n", main = "Reordered") 
axis(1, at = 1:3) 
layout(1) 

항복 : 무엇

Original and reordered heatmaps

+0

우수! 나는 그것을 시도하고 내가 받아들이 기 전에 어떤 문제도 겪지 않도록하고 싶다. 돌아와 줘서 고마워! –

+0

probs 없음 @Ron 의견을 게시하거나 질문을 편집하고 내가 좋아하는 것을 보았습니다. Q –

+1

나는이 일을하려고 나에게와 주려고 왔지만 그 결과를 얻지 못했습니다. 그들은 예상했다. 우리가'mns <-c (0.18, 0.19, -0.27, 0.24, 0.32, -0.05)'we '를 가지고 있다면'order (order)가 아닌'order 세 번째 그룹을 먼저 나열하고 다섯 번째 그룹을 마지막으로 나열하려면 clus <- 1 : 6 '인 경우 clus [order (order (mns) [clus])]는 두 번째 요소를 마지막으로 지정하고, 우리는 클러스터 평균의 등급으로 데이터를 정렬하려고합니다. 이전 답변이지만 사람들은 여전히 ​​보입니다. (clus [order (mns) [clus])] 여기에. –