An embedded and charset-unspecified text was scrubbed... Name: no disponible URL: <https://stat.ethz.ch/pipermail/r-help-es/attachments/20090624/d5368970/attachment.pl>
[R-es] Remuestreo de Clusters
7 messages · Carlos J. Gil Bellosta, Olivier Nuñez, Jorge I Velez +1 more
Hola, ¿qué tal? Hay algo que no entiendo dado que en cada iteración creas una nueva partición del espacio (una nueva llamada a kmeans). Algo se me escapa porque no veo qué relación guarda el cluster con la etiqueta "i" entre cada una de las iteraciones... Un saludo, Carlos J. Gil Bellosta El 24 de junio de 2009 17:50, Jorge Ivan Velez<jorgeivanvelez en gmail.com> escribió:
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
Jorge, podrÃas dar un ejemplo concreto en Filogenia. No estoy seguro de entender la finalidad del bootstap que aparece en tu código. Intuyo que un análisis cluster jerárquico podrÃa ser adecuado en este tipo de problema. Si es asà el package pvclust deberÃa serte de ayuda. Un saludo. Olivier -- ____________________________________ Olivier G. Nuñez Email: onunez en iberstat.es Tel : +34 663 03 69 09 Web: http://www.iberstat.es ____________________________________ El 24/06/2009, a las 17:50, Jorge Ivan Velez escribió:
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
An embedded and charset-unspecified text was scrubbed... Name: no disponible URL: <https://stat.ethz.ch/pipermail/r-help-es/attachments/20090624/fc8a8d2a/attachment.pl>
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 ---------------------------------------------------------------------------- ---- _______________________________________________ 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>
An embedded and charset-unspecified text was scrubbed... Name: no disponible URL: <https://stat.ethz.ch/pipermail/r-help-es/attachments/20090625/9af1e02b/attachment.pl>
De nada Jorge! En realidad me di cuenta de la complejidad de tu problema cuando empeze a cambiar tu código para usar el paquete "boot". Pablo ----- Original Message ----- From: "Jorge Ivan Velez" <jorgeivanvelez en gmail.com> To: "Pablo Emilio Verde" <PabloEmilio.Verde en uni-duesseldorf.de> Cc: "R-help-es" <r-help-es en r-project.org> Sent: Thursday, June 25, 2009 9:30 PM Subject: Re: [R-es] Remuestreo de Clusters Muchas gracias Pablo por tu ayuda. En definitiva lo que intenté hacer con el código que envié a la lista parece más complejo de lo que inicialmente pensé, asà que cambiaré mi estrategia. Por ahora el artÃculo que me envÃas y tu sugerencia de explorar RandomForest me son de gran ayuda. Gute nacht, Jorge 2009/6/25 Pablo Emilio Verde <PabloEmilio.Verde en uni-duesseldorf.de>
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
---------------------------------------------------------------------------- ---- _______________________________________________ R-help-es mailing list R-help-es en r-project.org https://stat.ethz.ch/mailman/listinfo/r-help-es