NMF: una técnica mergente de análisis no supervisado

[N]NMF (se encuentra con una o dos enes) es una técnica de análisis no supervisado emergente. Se cuenta entre mis favoritas. [N]NMF significa non negative matrix factorization y, como SVD, descompone una matriz M como UDV'. Solo que, en este caso, las entradas de M son todas positivas. Y la descomposición es UV', donde las entradas de ambas matrices son también positivas. ¿Qué tipo de matrices tienen entradas estrictamente positivas? Las resultantes de cuestionarios donde sujetos (filas) valoran (de 0 a 10) objetos, propuestas, etc. (columnas). Las que representan clientes (filas) que compran (un determinado número >= 0) de productos (columnas). … Y acabo con un instrumento (el paquete NMF de R) y el análisis de una encuesta realizado con dicha técnica para que la veáis en acción.

14 de septiembre de 2015 · Carlos J. Gil Bellosta

Cosas de R (¿que tal vez alguien sabrá explicar?)

En Twitter, leo The state of the art in statistical computing: sum(c(1, 2), na.r=F) [1] 3 sum(c(1, 2), na.r=T) [1] 4 – John Myles White (@johnmyleswhite) September 8, 2015 ¿Alguien puede explicar lo que ocurre? ¿Es tan grave como parece indicar sorna el autor del tuit?

9 de septiembre de 2015 · Carlos J. Gil Bellosta

Voronois con distintas distancias

Especulando sobre la diferencia en la práctica entre distintas métricas ($l_1$, $l_2$, $l_\infty$, etc.), construi una serie de diagramas de Voronoi usado métricas arbitrarias. En la Wikipedia se comparan gráficamente $l_1$, $l_2$ (o euclídea y Manhattan). Mi código, library(data.table) library(reshape2) library(grid) n <- 20 dim.image <- 1000 puntos <- data.frame(id = 1:n, x0 = runif(n) * dim.image, y0 = runif(n) * dim.image) colores <- rainbow(n) voronoi <- function(p){ tmp <- data.table(expand.grid( x = 1:dim.image, y = 1:dim.image, id = 1:n), key = "id") tmp <- merge(tmp, puntos, by = "id") distancia <- function(a, b, c, d, p) (abs(a-c)^p + abs(b-d)^p)^(1/p) tmp$distancia <- distancia(tmp$x, tmp$y, tmp$x0, tmp$y0, p) tmp[, rank := rank(distancia, ties = "random"), by = c("x", "y")] rejilla <- tmp[tmp$rank == 1,] rejilla$x0 <- rejilla$y0 <- rejilla$distancia <- rejilla$rank <- NULL rejilla$color <- colores[rejilla$id] imagen <- as.matrix(dcast(rejilla, x ~ y, value.var = "color")[,-1]) grid.raster(imagen) } permite usar más en función del parámetro p. ...

8 de septiembre de 2015 · Carlos J. Gil Bellosta

Guías de estilo para programar en R

Frans van Dunné me ha hecho llegar su guía de estilo de programación en R. Abunda en otra creada por Google hace un tiempo y que traduje y adapté aquí. Tiene como novedad, dice, su adaptación a las formas y maneras de Hadley Wickham, aún no tan conocido entonces. Coinciden, no obstante, en lo más. Ninguna de las dos trata el uso las tuberías (operador %>%). Pero es un asunto que se nos puede ir de las manos: de hecho, hoy he conocido el paquete [backpipe](https://github.com/decisionpatterns/backpipe), que implementa %<% y que nos augura largas y desesperantes sesiones de depuración de código.

4 de septiembre de 2015 · Carlos J. Gil Bellosta

Estar en racha (y promediar promedios)

Suponemos que observamos rachas de longitud 2 + rpois(1, 10) de un juego en el que se tiene éxito (1) o se fracasa (0) con probabilidad 1/2. Nos interesa saber si existe eso de las rachas de suerte, es decir, si es más probable que a un éxito le suceda otro o lo contrario. El observador ve rachas y calcula el número de veces que a un éxito le sigue un éxito y el número de veces que a un éxito le sigue un fracaso así: ...

10 de agosto de 2015 · Carlos J. Gil Bellosta

Ajuste de probabilidades en regresiones logísticas bajo sobremuestreo ( y otros)

En ocasiones, el conjunto de datos sobre el que se ajusta una regresión logística está desequilibrado con respecto a la población subyacente. Por ejemplo, puede suceder que la tasa de casos positivos en los datos sea del 20% mientras que en la población general es del 5%. Esto puede suceder por varios motivos. El sobremuestreo es uno de ellos: se sobremuestrea cuando se toman, por ejemplo, todos los casos positivos y solo un subconjunto de los negativos. ...

3 de agosto de 2015 · Carlos J. Gil Bellosta

Estrategias escalables con R

Recomiendo leer Scalable Strategies for Computing with Massive Data, un artículo que trata dos de los problemas de escalabilidad con que tropezamos los usuarios de R: Los de memoria, para los que proponen e ilustran el uso del paquete bigmemory. Los de velocidad de ejecución, a los que se enfrentan paralelizando el código, tanto en una única máquina como en un clúster, con foreach. En el artículo no solo discute los dos paquetes por separado sino que ilustra además cómo usarlos conjuntamente en su propuesta de estrategia escalable con R.

22 de julio de 2015 · Carlos J. Gil Bellosta

Un modelo jerárquico para lo de Casillas

Vuelvo a lo de Casillas inspirándome en el primer ejemplo de este artículo de Gelman et al. El planteamiento es el siguiente: el número de paradas, $n_i$, que realiza el $i$-ésimo portero tiene una distribución binomial $$ n_i \sim B(N_i, p_i)$$ donde $N_i$ es el número de disparos entre los palos y $p_i$ es la habilidad innata del portero. Estas habilidades innatas siguen una distribución dada, la de habilidades innatas de los porteros de primera división, que podemos suponer que sigue una distribución beta ...

15 de julio de 2015 · Carlos J. Gil Bellosta

Efectos en regresiones logísticas

Rescato y reconvierto un comentario de mi buen amigo José Luis Cañadas en una entrada mía reciente en la de hoy. Sugiere José Luis el uso del paquete effects de R para estudiar el efecto de (que el caso concreto de interés, aunque hay otros) las variables de un modelo logístico. Nos copia el código library(effects) mod.cowles <- glm(volunteer ~ sex + neuroticism*extraversion, data = Cowles, family = binomial) eff.cowles <- allEffects(mod.cowles, xlevels = list(extraversion = seq(0, 24, 6)), given.values = c(sexmale = 0.5)) plot(eff.cowles, type = "response") que genera un gráfico en el que se aprecia el efecto de las variables en la probabilidad de volunteer. Entre otras cosas, nos indica el efecto de sex, que coincide con el que podemos obtener haciendo ...

14 de julio de 2015 · Carlos J. Gil Bellosta

¿Son normales las alturas (de los individuos)?

Diríase que sí. La altura de un individuo está sujeta a multitud de factores que suman y restan. Está la genética (que es el resultado de la suma y resta del impacto de muchos genes individuales). Está la dieta, está… Diríase, insisto, que la altura es el promedio de muchos efectos pequeños y no demasiado dependientes entre ellos. Y en efecto, (una vez descargados los microdatos de la Encuesta Nacional de Salud de 2011), ...

9 de julio de 2015 · Carlos J. Gil Bellosta