Mapa de Catalunya en Excel por comarcas

Nuevo mapa en Excel a la colección de esta web. Se trata de un mapa de Cataluña por comarcas que funciona a las mil maravillas y que nos ha pasado nuestro lector Manel Pla. Hay que reconocer que es un trabajo excelente, muy trabajado y sencillo de utilizar, incluso podéis pintar distintas medidas. Seguro será de mucha utilidad.

Además de este gráfico Manel también nos ha pasado un mapa de Barcelona que colgaré en los próximos días. La verdad es que con estos lectores da gusto tener el blog.

Mapa de Catalunya en Excel por comarcas

Nuevo mapa en Excel a la colección de esta web. Se trata de un mapa de Cataluña por comarcas que funciona a las mil maravillas y que nos ha pasado nuestro lector Manel Pla. Hay que reconocer que es un trabajo excelente, muy trabajado y sencillo de utilizar, incluso podéis pintar distintas medidas. Seguro será de mucha utilidad.

Además de este gráfico Manel también nos ha pasado un mapa de Barcelona que colgaré en los próximos días. La verdad es que con estos lectores da gusto tener el blog.

Lectura conjunta de “Analyzing Linguistic Data”

Mi compañero y amigo Carlos Gil junto con Victor Peinado van a iniciar un interesante proyecto. Un grupo de lectura del libro Analyzing Linguistic Data: A practical introduction to Statistics desde aquí nos hacemos eco de este proyecto que podéis seguir desde aquí.

El calendario del curso es:

  • An Introduction to R: (1 semana, del 6/05 al 12/05)
  • Graphical Data Exploration: (1 semana, del 13/05 al 19/05)
  • Probability Distributions: (1 semana, del 20/05 al 26/05)
  • Basic Statistical Methods: (2 semanas, del 27/05 al 9/06)
  • Clustering and Classification: (2 semanas, del 10/06 al 23/06)
  • Regression Modeling: (2 semanas, del 24/06 al 7/07)
  • Mixed Models: (2 semanas, del 8/07 al 21/07)

Será todo un éxito, como las anteriores convocatorias. Saludos.

Mosaic plot con R

Los gráficos de mosaico (mosaic plot) me gustan cada vez más. Hoy quería confesaros una cosa, no me gustan los gráficos. Sé que en esta bitácora electrónica hay muchos ejemplos de gráficos y muchos trucos referente a ellos. Pero siempre prefiero un dato representado en una tabla. Después de esta confesión voy a rebatirme a mí mismo. Es muy complicado ver algo en una tabla de contingencia cuando tenemos 3 o cuatro dimensiones. Sin embargo con un mosaic plot como el que tenemos arriba somos capaces de estudiar cruces de frecuencia para 3-4 dimensiones. Para hacerlo empleamos R, en concreto el paquete vcd. Para ilustrar el ejemplo con datos nos vamos a la web de un conocido libro para el uso de GLM en seguros. No entramos en muchos detalles, el código es muy simple, si tengo ocasión lo complicaré:

El seguro de Salud suma y sigue

Si nos damos una vuelta por ICEA podremos sacar la tabla que tenemos arriba (espero que no se enfaden conmigo por sacarlo tal cual, no he cambiado ni los formatos). Vemos que a lo largo de 2012 el seguro directo en España está sufriendo, especialmente en Autos, casi todos los ramos registran pérdidas de prima a excepción de Hogar y Salud. El tema de Hogar lo trataremos en otra entrada con más cuidado, es un ramo que tiene mucho recorrido debido a que la penetración en España todavía es muy baja, además tendremos que escribir sobre revalorización de capitales, la famosa REVA. Hoy nos centraremos en la otra gran estrella de la tabla que nos ofrece ICEA, el Seguro de Salud.

Analisis cluster con SAS. La importancia de las semillas en las k-medias

El PROC FASTCLUS en SAS nos permite realizar análisis de agrupamiento dirigido mediante el algoritmo de las k-medias. Este algoritmo tiene algunos problemas pero nos puede servir para agrupar de forma multivariante observaciones. Es rápido, sencillo de explicar y con algunas lagunas no funciona mal. Como aproximación a nuestras segmentaciones puede ser muy práctico. Hoy se va a utilizar para identificar a los clientes más complicados de segmentar, a aquellas observaciones que quedan en las zonas grises. (http://www.datanalytics.com/blog/2011/08/03/clustering-iii-sobresimplificacion/)
Estas zonas grises en muchos casos son más importantes que la segmentación en sí. Si estamos con un problema de taxonomía (clasificar especies) puede ser menos importante, pero si clasificamos inversiones, clientes,… ¿qué pasa con aquellos que no sabemos ubicar? Escribimos segmentar en un buscador y tenemos esta imagen:

¿Cuándo tenemos BIG DATA?

No es que sea yo un gurú del tema precisamente, pero considero que llevo más de 12 años haciendo Big Data, por ello a lo peor alguno toma en serio mis reflexiones. Entonces, ¿cuándo tenemos, hacemos, trabajamos Big Data? La respuesta parece sencilla, “cuando tenemos muchos datos”. Pues no, este es un nombre con mucha pegada (como me han dicho hoy en la comida) es un nombre acertado desde un punto de vista “marketiniano”. Pero muchos datos tiene el operacional de un banco y no creo que un entorno Mainframe haga Big Data. Big Data tenemos cuando accedemos a datos desestructurados. Ya la dimensionalidad pasa a un segundo plano y las tecnologías tradicionales/actuales y sus hechos, metadatas, cubos y demás dejan de tener sentido. Hay Big Data cuando no se prepara la información. Anteriormente el acceso a los datos necesitaba un periodo previo para adaptarlo a una estructura, ahora no, ahora accedemos (por ejemplo) a un sistema operacional sin necesidad de pasar por una capa previa. En realidad hacemos lo mismo, tabulamos, graficamos, modelamos pero sobre datos que no están preparados. Eso es Big Data.

Trucos SAS. Lista de variables missing

Duda que me plantearon ayer por la tarde. Dada una serie de variables determinar que registro tiene todas esas variables nulas. El truco que planteo puede servir para determinar incluso cuantos valores perdidos tiene esa lista de variables, ese truco me le reservo para otro día. El código lo acompaño con un ejemplo para que se pueda ejecutar y analizar su funcionamiento:

data aleatorio;
do i=1 to 20000;
aleat1=sqrt(rannor(45));
aleat2=sqrt(rannor(5));
aleat3=sqrt(rannor(4));
aleat4=sqrt(rannor(450));
aleat5=sqrt(rannor(40));
output;
end;
run;

data fila_nula;
set aleatorio;
nulo=0;
array varib(*) aleat1--aleat5;
do j=1 to dim(varib);
if not missing(varib(j)) then nulo=i;
end;
drop j;
if nulo=0;
run;

Muy sencillo el truco. Si se encuentra alguna variable que no es nula la variable nulo ya no toma valor 0. Espero que os sea de utilidad. Saludos.

Si sóis jóvenes pero no sóis ricos no desesperéis

Edad de los 100 primeros en la lista Forbes

He cogido la lista Forbes de los tipos más ricos del mundo y he hecho un gráfico con la distribución de la edad de los 100 primeros miembros y resulta que 82 miembros están por encima de los 50 años. Está Zuckerberg para estropear el gráfico pero sólo 14 miembros de esta lista están por debajo de los 50 años. A la vista de estos datos se me ocurre que a lo peor es que siguen siendo los mismos desde hace muchos años y lo que sucede es que va envejeciendo la lista. No lo sé, pero es interesante que muchos de nosotros hablemos de Software libre cuando entre estos 100 privilegiados hay unos pocos fabricantes de software. Saludos.

Truco SAS. Limpiar un fichero de texto con SAS

El otro día me llegó al correo la siguiente cuestión acerca de caracteres extraños en un fichero de texto y la importación a SAS:

Tengo un problema a la hora de importar a SAS un fichero txt.
El caso es que tiene en algunos registros el carácter «flechita».
Ejemplo: Calle Paseo de la Castellana «flechita» 60.
Cuando lo importo como carácter para al llegar a la flechita.
No se sí podrás ayudarme.
Muchas gracias por adelantado.

Trucos SAS. Medir la importancia de las variables en nuestro modelo de regresión logística

Hoy quería proponeros una forma poco ortodoxa de medir la importancia de las variables en un modelo de regresión logística con SAS. La cuestión es: dado un modelo de regresión logística crear un ranking con las variables más importantes dentro del modelo. Para esta tarea recomiendo el uso de random forest, pero puede ser imposible disponer de un software que realice este tipo de modelos. Imaginemos un caso concreto, disponemos de SAS STAT y nos da reparo trabajar con R. Para este caso podemos emplear el siguiente truco. El AIC (criterio de información de Akaike) es un estadístico que relaciona el cociente de la verosimilitud con el número de parámetros del modelo que ajustamos. Cuanto menor sea este cociente mejor será nuestro modelo. Si eliminamos una variable del modelo ¿cuánto empeora este modelo? Esa será la filosofía que emplearemos para analizar la importancia de las variables presentes en nuestro modelo. En la línea habitual hacemos un ejemplo para que podáis copiar y pegar en vuestro SAS:

Nos hemos terminado de reinventar. Acabamos con el Data Mining y empezamos con el Big Data

Google Trends y buscamos los términos Big Data y Data Mining y obtenemos la figura de arriba. Ya convergen las búsquedas. Muchos opinamos que estamos trabajando con Big Data desde hace muchos años sin embargo es ahora cuando este trabajo parece que se está dando a conocer. Y las escuelas de negocio son conscientes de ello. El sector de las tecnologías de la información tiene que estar continuamente renovándose. A lo largo de los años han habido mas revoluciones conceptuales que verdaderamente tecnológicas, sin embargo este nuevo concepto de Big Data si trae consigo una nueva visión de acceso a la información.

Gráfico de correlaciones entre variables

Los gráficos de correlaciones no me gustan especialmente pero empiezo a verlos en algunas presentaciones. En R tenemos algunos ejemplos interesantes pero con códigos que, bajo mi prisma, son complejos. Por este motivo me he puesto manos a la obra para realizar este gráfico de correlaciones con un código lo más sencillo posible. Para ello vamos a emplear ggplot2:

library(ggplot2)

datos = cor(mtcars)

datos.lista = melt(datos)

names(datos.lista)=c("Variable_1","Variable_2","Correlacion")

escala = seq(-1,1,0.1)

Vamos a emplear el famoso conjunto de datos mtcars para ilustrar el ejemplo. Con él creamos la matriz de correlaciones pero esta matriz la hemos de transformar en una lista, para ello empleamos la función melt del paquete reshape, en este punto hemos pasado de una matriz de correlaciones a una lista con pares de variables y su correspondiente coeficiente de correlación. A esta lista le asignamos los nombres que deseamos con la función names y por último generamos un vector que denominamos escala que nos permitirá establecer los colores que deseamos utilizar cuando pintemos nuestra matriz de correlaciones.