The Elements of Statistical Craftsmanship

En How Statistics lifts the fog of war in Syria se describe una solución al problema de estimar el número de víctimas en cierto lance de la guerra de Siria. Lo complicado del problema es que existen diversos recuentos independientes y las víctimas pueden aparecer en todos, alguno o ninguno. Me llama la atención que el método utilizado sea el de los bosques aleatorios (en particular, el randomForest de R). No sabría cómo utilizarlo para resolver este problema. Tampoco he tenido tiempo para entrar en los detalles. ...

3 de abril de 2014 · Carlos J. Gil Bellosta

Varimax: lo que se gana, lo que se pierde

Hoy hablaremos de exploratory factorial analysis y en particular aprovecharé para dejar constancia de que dejo resuelta una duda que siempre me ha dado pereza resolver: qué se pierde —lo que se gana ya nos lo han contado por doquier— al realizar una rotación varimax. Comencemos. Primero, voy a realizar un análisis factorial (exploratorio) basándome en ?varimax: fa <- factanal( ~., 2, data = swiss, rotation = "none") fa # Call: # factanal(x = ~., factors = 2, data = swiss, rotation = "none") # # Uniquenesses: # Fertility Agriculture Examination Education Catholic Infant.Mortality # 0.420 0.492 0.270 0.005 0.061 0.960 # # Loadings: # Factor1 Factor2 # Fertility -0.674 0.356 # Agriculture -0.648 0.297 # Examination 0.713 -0.471 # Education 0.997 # Catholic -0.178 0.953 # Infant.Mortality -0.104 0.169 # # Factor1 Factor2 # SS loadings 2.419 1.373 # Proportion Var 0.403 0.229 # Cumulative Var 0.403 0.632 # # Test of the hypothesis that 2 factors are sufficient. # The chi square statistic is 20.99 on 4 degrees of freedom. # The p-value is 0.000318 Usando factanal he creado dos factores sobre el conjunto de datos swiss y he optado por no usar nigún tipo de rotación. ...

2 de abril de 2014 · Carlos J. Gil Bellosta

Componentes principales para quienes cursaron álgebra de primero con aprovechamiento

Quienes cursaron su álgebra de primero con aprovechamiento —los que no, pueden ponerse al día en 3:47 minutos— aprendieron que una matriz $X$ puede descomponerse de la forma $$ \mathbf{X} = \mathbf{UDV}$$ donde $\mathbf{U}$ y $\mathbf{V}$ son matrices ortonormales y $\mathbf{D}$ es diagonal. Si los elementos de la diagonal de $\mathbf{D}$ son $d_1>d_2>\dots$ y los últimos son pequeños, entonces $$ \mathbf{X} \approx \mathbf{UD_0V}$$ donde $\mathbf{D_0}$ es la matriz en la que se han sustituido los $d_i$ despreciables por ceros. Si $\mathbf{D_0}$ tiene m elementos diagonales no nulos, solo hay m columnas de $\mathbf{U}$ y m filas de $\mathbf{V}$ que juegan un papel efectivo en la proximación anterior. Por lo tanto se puede reescribir de la forma ...

1 de abril de 2014 · Carlos J. Gil Bellosta

Predictores con varianza casi nula, inflación, loterías y línea de comandos

Hoy viernes vuelvo a traer a mis páginas cuatro enlaces interesantes. El primero de ellos es como las malas películas: un arranque espléndido, un planteamiento prometedor y, al final, humo. Pero no trata de chico-conoce-chica sino de qué hacer con esas variables que tienen una varianza casi nula (a la hora de crear modelos estadísticos, se entiende). Me llegó tan oportunamente que pensé que alguien que vela por mí desde lo alto me lo enviaba para sacarme de mi semanal atolladero. Pero no fue el caso. ...

28 de marzo de 2014 · Carlos J. Gil Bellosta

Los sospechosos habituales y Python

Llamo sospechosos habituales a esos programas y lenguajes para el análisis de datos distintos de R cuya decreciente popularidad nos parece tan natural a los partidarios de este último. Abundan los análisis de cuotas de mercado tales como What Analytic Software are People Discussing? ¿Cuáles son estos sospechosos habituales? Pues SAS, SPSS y algún otro: Stata, Statistica, Minitab,… Sin embargo, R tiene competidores más serios a medio plazo. Uno de ellos, el más importante, es Python. Lo veo a mi alrededor: son muchos los físicos, los ingenieros, los informáticos que tienen experiencia en ese lenguaje y, sintiéndose cómodos en él —y les alabo el gusto— quieren utilizarlo para analizar datos cuando les toca. ...

20 de marzo de 2014 · Carlos J. Gil Bellosta

Selección de enlaces: censos, el Titanic, periodistas y mapas

El primer enlace de la selección de esta semana es The evolution of the modern census. Todos sabemos que lo que llevó a José y María a Belén hace más de 2000 años fue dizque tenían que censarse. Hay noticias de censos anteriores. Desde entonces hasta ahora ha habido muchos, muchísimos censos, pero su mismo concepto y finalidad ha ido cambiando a lo largo de la historia: ya no se trata solamente de contar, medir la riqueza o el poderío militar. Ahora nos interesan otros aspectos relacionados ya no tanto con el cuántos sino con el cómo somos. ...

14 de marzo de 2014 · Carlos J. Gil Bellosta

Victoria o diferencia de puntos, ahora con "random forests"

Después de hablar con tirios y troyanos sobre mi entrada sobre los efectos de binarizar una variable objetivo continua, he decidido tomarme la justicia por mi mano y llamar a la caballería. Es decir, utilizar random forests. Aquí va el código: library(randomForest) set.seed(1234) my.coefs <- -2:2 n <- 200 train.n <- floor(2*n/3) test.error <- function(){ X <- matrix(rnorm(n*5), n, 5) Y <- 0.2 + X %*% my.coefs + rnorm(n) Y.bin <- factor(Y>0) train <- sample(1:n, train.n) X <- as.data.frame(X) X$Y <- Y modelo <- randomForest(Y ~ ., data = X[train,]) pred <- predict(modelo, X[-train,]) error.cont <- length(pred) - sum(diag(table(pred >0, Y[-train]>0))) X$Y <- Y.bin modelo <- randomForest(Y ~ ., data = X[train,]) pred <- predict(modelo, X[-train,]) error.bin <- length(pred) - sum(diag(table(pred, Y.bin[-train]))) data.frame(error.cont = error.cont, error.bin = error.bin) } errores <- do.call(rbind, replicate(1000, test.error(), simplify = F)) sapply(errores, fivenum) El resultado, si te interesa, en tu pantalla. ...

7 de marzo de 2014 · Carlos J. Gil Bellosta

¿Victoria o diferencia de puntos? ¿lm o glm?

Supongamos que queremos construir un modelo para predecir quién ganará un determinado partido de baloncesto basándonos en datos diversos. Y en un histórico, por supuesto. Podemos utilizar una regresión logística así: set.seed(1234) my.coefs <- -2:2 n <- 200 train.n <- floor(2*n/3) test.error.glm <- function(){ X <- matrix(rnorm(n*5), n, 5) Y <- (0.2 + X %*% my.coefs + rnorm(n)) > 0 train <- sample(1:n, train.n) X <- as.data.frame(X) X$Y <- Y mod.glm <- glm(Y ~ ., data = X[train,], family = binomial) glm.pred <- predict(mod.glm, X[-train,], type = "response") error <- length(glm.pred) - sum(diag(table(glm.pred > 0.5, Y[-train,]))) } errores.glm <- replicate(1000, test.error.glm()) El código anterior hace lo siguiente: Crea las variables aleatorias X (unos predictores) e Y (el resultado de los partidos). Ajusta un modelo logístico a un subconjunto de los datos. Predice sobre el complementario de dichos datos, el conjunto de prueba. Mide el error cometido. Itera el proceso anterior y guarda los errores de clasificación cometidos. Nótese que la variable objetivo es binaria por construcción. ...

4 de marzo de 2014 · Carlos J. Gil Bellosta

D. Hand sobre estadística y minería de datos

Voy a comentar y recomendar hoy un artículo, Statistics and data mining: intersecting disciplines (lo siento, he perdido el enlace para su libre descarga), del siempre recomendable David Hand. Trata de un asunto que para muchos de los que seáis estadísticos y trabajéis en el asunto rodeados de gente procedente de otras disciplinas —¡ay, esos ingenieros!—, seguro, os produce dolores de cabeza: esa brecha que separa los mundos de la estadística y de la llamada minería de datos (y de otras maneras más recientemente). ...

27 de febrero de 2014 · Carlos J. Gil Bellosta

De ratios, apuestas y riesgos

Nunca he entendido eso de los odds. Me refiero a eso que mencionan las películas: ocho contra uno a favor de tal, cinco contra tres a favor de cual. Y no creo que sea el único al que le son ajenos. De hecho, la página de la Wikipedia en español correspondiente a la inglesa para odds se refiere a ellas como cuotas, término que jamás hasta hoy había visto así usado. Tampoco lo han visto, se concoce, los lexicógrafos de la RAE. ...

12 de febrero de 2014 · Carlos J. Gil Bellosta