2012-01-19 5 views
3

저는 R을 사용하여 계층 적 클러스터링을 수행하고 있습니다. 첫 번째 방법으로서 I는 hclust를 사용하고 다음 단계를 수행 : 미리 계산 된 분산 객체에 pvclust R 함수를 적용합니다.

  • 내가 dist 객체
  • hclust 실행할 제가
  • 는 I가 dist 객체를 변형시키는 as.dist 함수를 사용한 거리 행렬을 가져
    1. distm <- read.csv("distMatrix.csv") 
      d <- as.dist(distm) 
      hclust(d, "ward") 
      
      : 여기

    는 R 코드입니다

    이 시점에서 나는 함수와 비슷한 것을하고 싶습니다. pvclust; 그러나 사전 계산 된 dist 개체를 전달할 수 없기 때문에 할 수 없습니다. R의 dist 함수로 제공되는 것들 중에서 사용할 수없는 거리를 사용하고 있다고 생각하면 어떻게해야합니까?

    답변

    1

    거리 매트릭스가 있는지 여부는 분명하지 않거나 미리 계산해 두었습니다. 전자의 경우 @Vincent가 이미 제안한 것처럼 pvclust의 R 코드를 수정하는 것은 어렵지 않습니다 (fix() 또는 무엇이든 사용하여 another question on CrossValidated에 대한 힌트를 제공했습니다). 후자의 경우 pvclust의 작성자는 사용자 정의 거리 함수를 사용하는 방법에 대해 example을 제공합니다. 그렇다고해도 "비공식 버전"을 설치해야합니다. 나는 빈센트의 제안을 테스트했습니다

    +0

    비공식 버전을 보았지만 사용하지 않는 것이 좋습니다. stackoverflow에 게시 한 후 pvclust 함수 작성자에게 연락했습니다. 이것은 그의 대답입니다 : pvclust가 부트 스트랩 기반 알고리즘을 사용하기 때문에 사전 계산 된 dist를 사용하여 객체는 원칙적으로 불가능합니다. 나는 도움이되지 않아서 미안해. – rlar

    2

    데이터 세트가 너무 크지 않은 경우 동일한 거리 행렬을 사용하여 n-1 차원 공간에 n 개의 점을 삽입 할 수 있습니다. 데이터 세트가 큰 경우

    # Sample distance matrix 
    n <- 100 
    k <- 1000 
    d <- dist(matrix(rnorm(k*n), nc=k), method="manhattan") 
    
    # Recover some coordinates that give the same distance matrix 
    x <- cmdscale(d, n-1) 
    stopifnot(sum(abs(dist(x) - d)) < 1e-6) 
    
    # You can then indifferently use x or d 
    r1 <- hclust(d) 
    r2 <- hclust(dist(x)) # identical to r1 
    library(pvclust) 
    r3 <- pvclust(x) 
    

    , 당신은 구현하는 방법을 pvclust 확인 할 수 있습니다.

    +0

    (즉, 자신을 대답 한 후), 난 정말 OP를 믿는다 'pvclust'는 data.frame이나 matrix 객체를 기대하면서 distance matrix를'pvclust'에 전달하려고합니다. – chl

    +0

    주의 : pvclust()는 행이 아닌 열을 클러스터링하므로 좋은 코드는 pvclust (x)가 아닌 pvclust (x)입니다. –

    3

    , 다음을 수행 할 수 있습니다 (내 데이터 세트는 유사성 행렬) :

    돌이켜에서
    # Import you data 
    distm <- read.csv("distMatrix.csv") 
    d <- as.dist(distm) 
    
    # Compute the eigenvalues 
    x <- cmdscale(d,1,eig=T) 
    
    # Plot the eigenvalues and choose the correct number of dimensions (eigenvalues close to 0) 
    plot(x$eig, 
        type="h", lwd=5, las=1, 
        xlab="Number of dimensions", 
        ylab="Eigenvalues") 
    
    # Recover the coordinates that give the same distance matrix with the correct number of dimensions  
    x <- cmdscale(d,nb_dimensions) 
    
    # As mentioned by Stéphane, pvclust() clusters columns 
    pvclust(t(x))