Blog: "Thema: R", deel 8

Een R- functie die een clustervector produceert die niet apriori gelijke volumes veronderstelt.
Blog: "Thema: R", deel 8

Dit kan het beste door middel van hiërarchische clustering.
We nemen de bekende attitude dataset.

Eerst een functie om van een vector een matrix te maken.

GM_v <- function(x, f) {
x <- t(as.matrix(x))
k <- dim(x)[2]
un <- (k / 2) * (k - 1)
com <- combn(1:k, 2)
M <- function(z){
r1 <- x[ ,com[1, z]]
r2 <- x[ ,com[2, z]]
r <- f(r1, r2)}
m <- unlist(lapply(1:un, M))
mat <- matrix(0, k, k)
mat[lower.tri(mat)] <- m
mat <- matrix((mat + t(mat)), k, k)
}

De f parameter in GM_v heeft een maat nodig die de afstand tussen vectorelementen berekent.

ab <- function(x,  y) abs(x – y)
DM <- GM_v((rowSums(scale(attitude))),ab)

DM is een distancematrix.  Zo’n matrix heeft de volgende kenmerken: elke cel heeft een niet negatieve vulling, de matrix is symmetrisch en op de hoofddiagonaal staan uitsluitend nullen. Een distancematrix kan in hierarchische clustering, maar ook in multidimensionele schaalanalyse worden gebruikt.

De toegepassing bij clusteranalyse:

CV <- cutree(hclust(as.dist(DM), method = “complete”), 4)
table(CV)
CV          1              2            3             4
No          8             11            8             3