Buenos dias para todos,
Estoy trabajando en una aplicación que involucra análisis de clusters.
Básicamente el objetivo es determinar a qué cluster pertenece cada
observación de una matriz de datos "mydata" y luego generar muestras
aleatorias de los mismos datos para determinar la proporción de veces que
cada observación es clasificada en el cluster k.

Este tipo de análisis es muy común en aplicaciones de Phylogeny <
http://en.wikipedia.org/wiki/Phylogeny>

Suponiendo que el método de cluster a utilizar es fijo y que de alguna
manera se determinó que el número de clusters óptimo, conocen alguna
libreria en R que permita hacer lo que describo?

Este es un ejemplo en R en el que utilizo ksmeans y 7 clusters

# Data set
set.seed(123)
mydata <- matrix(rnorm(100*10), ncol=10)
colnames(mydata) <- paste('X', 1:10, sep="")
rownames(mydata) <- paste('s', 1:100, sep="")

# Función para determinar el cluster al que
# pertenece cada muestra s_i
foo <- function(X, k = 7){
      x <- X[sample(nrow(X)),]
      rx <- rownames(x)
      cluster <- kmeans(x, k)$cluster
      names(cluster) <- rx
      cluster[rownames(X)]
         }

# Repitiendo foo 1000 veces
N <- 1000
res <- replicate(N, foo(mydata))

# Dandole un nuevo formato a la salida de res
grupos <- t(apply(res, 1, function(x){
              x <- factor(x, levels = 1:7)
              table(x)
               }
      )
 ) /1000
head(grupos)

Al trabajar con datos completamente aleatorios, se espera que las
proporciones de los grupos sea similares. En este caso el valor cluster
donde la proporción es mayor puede ser obtenido como:

apply(grupos, 1, which.max)


Muchas gracias,

Jorge Ivan Velez

	[[alternative HTML version deleted]]

