[R-es] Remuestreo de Clusters

Pablo Emilio Verde PabloEmilio.Verde en uni-duesseldorf.de
Jue Jun 25 19:25:55 CEST 2009


Hola Jorge,

No conozco otro paquete de R que haga lo que necesitas. Random-forest usa
una
mescla de bootstrap y regression trees para construir no solo modelos de
clasificacion
sino tambien modelos de clusters. Quizas te interese usarlo en tu problema.

Te adjunto un paper sobre el tema que te puede ser util. En general el
problema que
tenes es que estas estimando una matriz de probabilidades de dimension (nxk)
y
los metodos de boostrap pueden dar resultados erraticos. Posiblemente tengas
que
agregar un segundo nivel de remuestreo para este problema de prediccion.

Pablo


----- Original Message -----
From: "Jorge Ivan Velez" <jorgeivanvelez en gmail.com>
To: "R-help-es" <r-help-es en r-project.org>
Sent: Wednesday, June 24, 2009 5:50 PM
Subject: [R-es] Remuestreo de Clusters


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]]




----------------------------------------------------------------------------
----


_______________________________________________
R-help-es mailing list
R-help-es en r-project.org
https://stat.ethz.ch/mailman/listinfo/r-help-es

------------ próxima parte ------------
A non-text attachment was scrubbed...
Name: bootstrap-trees.pdf
Type: application/pdf
Size: 301248 bytes
Desc: no disponible
URL: <https://stat.ethz.ch/pipermail/r-help-es/attachments/20090625/96f15911/attachment-0001.pdf>


Más información sobre la lista de distribución R-help-es