Análisis factorial e ideas que se resisten a morir

Estoy escribiendo mucho sobre métodos de reducción de la dimensionalidad estos días. Digamos que son gajes del oficio. Espero no resultar repetitivo. La cuestión que me empuja a escribir hoy es que algunos a mi alrededor insisten, insisten e insisten en las bondades del análisis factorial y lo oportuno de su aplicación a un problema sobre el que no voy a dar más detalles. Es una técnica que jamás estudié propiamente y con la que el poco contacto que he tenido se ha limitado a echar una mano a algunos clientes en el pasado en algún análisis. ...

7 de abril de 2014 · Carlos J. Gil Bellosta

El lenguaje de Wolfram (según Wolfram)

En el siguiente vídeo Wolfram habla del lenguaje de Wolfram. Siento repetirme, pero quiero dejar claro que puede haber un sesgo. Porque como no lo haya, el Sr. Wolfram me va a tener como admirador (y puede que hasta como cliente). Mirad lo que cuenta: ¿Es o no casi increíble?

4 de abril de 2014 · Carlos J. Gil Bellosta

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

Graficaca en Gas Natural Fenosa

Hoy he querido entrar a la página de Gas Natural Fenosa para echarles un vistazo a mis facturas y he encontrado el siguiente y magnífico ejemplar de graficaca: Es un compendio de todas las cosas que no hay que hacer para representar datos gráficamente. Lo más grave que tiene es que las barras no corresponden a meses sino a periodos de duración desigual e indefinida. No hay forma de ver una evolución ni de realizar una comparación. ...

31 de marzo 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

Mapas: cosas casi increíbles que pueden hacerse con R

Nunca pude ser un erizo. Lo intenté durante años y acabé en el sicólogo. Si el cuerpo me hubiese dado, ahora, tal vez, como algunos compañeros de promoción, sería un experto en un área diminuta del conocimiento y corregiría exámenes los fines de semana. Descubrí con tiempo y muchas sesiones de a 60 euros la hora que había nacido para ser un zorro, un merodeador que olisquea aquí y allá. Una lectura superficial de estas páginas que escribo puede dar la impresión de que contienen conocimientos profundos (¡ojalá!). Una lectura profunda, que contiene superficialidades (¡convengo!). Son obra de un zorro. ...

27 de marzo de 2014 · Carlos J. Gil Bellosta

ykmeans, ¿broma, ironía o triste realidad?

Estar suscrito a las actualizaciones de CRAN le permite a uno estar al tanto de las novedades de R de otra manera. De vez en cuando uno encuentra pequeños paquetes que le solucionan un problema puntual. Mucho más frecuentemente, la verdad, uno se topa con aplicaciones muy específicas en áreas que le resultan remotas. Pero uno no espera nunca tropiezar con paquetes que no sabe si clasificar como una broma, una ironía bromas o como algo mucho peor: la constatación de una triste realidad. Es el caso de ykmeans. ...

26 de marzo de 2014 · Carlos J. Gil Bellosta

Totales agregados por bloques en tablas

En ocasiones uno quiere añadir un total calculado en ciertos bloques a una tabla. Por ejemplo, en la tabla set.seed(1234) ventas.orig <- data.frame( cliente = rep(1:10, each = 5), producto = rep(letters[1:5], times = 10), importe = rlnorm(50)) tenemos clientes, productos e importes. Y nos preguntamos por el porcentaje en términos de importe que cada producto supone para cada cliente. Una manera natural pero torpe de realizar este cálculo consiste en usar un objeto intermedio y merge: library(plyr) tmp <- ddply(ventas.orig, .(cliente), summarize, total = sum(importe)) ventas <- merge(ventas.orig, tmp) ventas$pct.producto <- 100 * ventas$importe / ventas$total No os asustéis, se puede hacer aún peor (p.e., usando sqldf). Pero existen dos maneras, cuando menos, de hacerlo mejor. La primera es usando data.table. ...

25 de marzo de 2014 · Carlos J. Gil Bellosta