Curso de lenguaje SAS con WPS. Introducción a los formatos de variables

Volvemos con el curso de lenguaje SAS con WPS. Estaba parado debido a un problema con las licencias de WPS desde junio de 2010, pero lo retomamos con uno de los capítulos más interesantes: formatos de variables en SAS. Si tuviéramos que definirlos, son imprescindibles tanto para leer como para escribir variables. Y ésa es la característica que los divide: existen formatos de entrada (INFORMAT) y formatos de salida (FORMAT). Se dividen por categorías, entre las que destacan los formatos numéricos, formatos carácter y formatos de fecha. La sintaxis es sencilla: [IN]FORMAT <variable> <formato>;. ...

14 de enero de 2011 · rvaquerizo

Medir la importancia de las variables con Random Forest

¿Qué variables son las más importantes para nuestro modelo de clasificación? Yo creo que muchos de vosotros os habréis encontrado con esta problemática. Hay muchas formas de solventarla, habitualmente empleamos aquellas variables que mejor pueden entender nuestras áreas de negocio. Es decir, hacemos segmentaciones en base al sexo y la edad sólo por no tener que explicar cómo hemos construido una variable artificial a alguien que no entiende lo que es una variable y mucho menos variable artificial. Pero hoy os quería plantear la utilización de métodos de random forest con R para medir la importancia de las variables cuantitativas, para variables cualitativas recomiendo otras formas que plantearé más adelante. El random forest es un método de clasificación basado en la realización de múltiples árboles de decisión sobre muestras de un conjunto de datos. Hacemos muchas clasificaciones con menos variables y menos observaciones y al final nos quedamos con un promedio de estas clasificaciones, esa sería la idea a grandes rasgos. La característica que hace de este método muy interesante es la posibilidad de incluir un gran número de variables input en nuestro modelo ya que no encontraremos relaciones lineales entre ellas y tampoco aparecerán relaciones debidas al azar. ...

8 de enero de 2011 · rvaquerizo

Truco R. Eval, parse y paste para automatizar código

La función paste nos permite concatenar cadenas de texto con R: paste("Dato", 1:10, sep = "") parse recoge una expresión pero no la evalúa: parse(text = "sqrt(121)") Y, por último, eval evalúa una expresión: eval(parse(text = "sqrt(121)")) Interesantes funciones que nos pueden permitir automatizar códigos recursivos o códigos guardados como objetos en R. Imaginemos el siguiente ejemplo: # Creamos un data frame con 20 variables aleatorias Poisson ejemplo1 <- data.frame(replicate(20, rpois(20, 10))) # Automatizamos los nombres de las columnas nom <- paste("dato", 1:20, sep = "") names(ejemplo1) <- nom summary(ejemplo1) Hemos automatizado los 20 nombres de un data frame con datos aleatorios con una distribución de Poisson de media 10 creado con la función replicate. Ahora imaginemos que deseamos transformar en factor sólo aquellos elementos del data frame con un sufijo par (dato2, dato4…). Podemos crear una función o podemos generar las ejecuciones de código R del siguiente modo: ...

7 de enero de 2011 · rvaquerizo

El modelo multivariante en el sector asegurador. Los modelos por coberturas (V)

Debido a la pobre aceptación, había dado de lado esta serie de monográficos sobre la tarifa multivariante en el sector asegurador. Pero tengo una lectora que sí los seguía y, como yo me debo a mis lectores, continúo con la serie. Recapitulemos: como variables dependientes tenemos la frecuencia siniestral y el coste medio de los siniestros; las variables independientes serán aquellas que compongan la estructura de nuestra tarifa. Como prototipo para determinar qué variables forman parte de nuestro modelo, empleamos el multitarificador de ARPEM. Con este planteamiento, partimos de dos modelos: el modelo de frecuencias y el modelo de costes medios. Sin embargo, a la hora de ajustar, es muy importante plantear un modelo para cada una de las garantías. Parece lógico que el modelo multivariante para el contenido en una tarifa de hogar no ha de ser el mismo que el modelo para el continente. O centrándonos en el modelo de autos (sobre el que está girando nuestra serie), es necesario modelizar los siniestros de responsabilidad civil por un lado, los siniestros de daños propios por otro, defensa, robo… ...

27 de diciembre de 2010 · rvaquerizo

Montemos un sistema de información en nuestro equipo (III)

Vamos a conectar R a nuestra BBDD PostgreSQL. Lo vamos a hacer vía ODBC con el paquete de R RODBC. [Inciso] Recordad que todo el trabajo lo estamos realizando bajo Windows. Además, trabajar con ODBC nos permitirá conectar nuestro PostgreSQL con Access o Excel. Aunque para este tipo de tarea recomiendo el uso del Data Integration de Pentaho. El primer paso será descargarnos de esta dirección los controladores ODBC para PostgreSQL que se adecúen con nuestro sistema operativo y nuestra versión de la base de datos. Tras instalarlos, ya podemos ir a las Herramientas Administrativas > Orígenes de Datos ODBC e introducimos un nuevo DSN de sistema y de usuario: ...

18 de diciembre de 2010 · rvaquerizo

Recodificar el valor de un factor en R

Tras leer una duda planteada en la lista de R-Help en español, me he animado a crear una entrada acerca de la recodificación de factores en R. Así dejo recogido algún código/truco que puede serviros en vuestro trabajo con R y que este pequeño problema no afecte a vuestra productividad. Además, os acerco a la función recode del paquete car. Pero en primer lugar os planteo cómo recodificar factores empleando if / else: ...

7 de diciembre de 2010 · rvaquerizo

Gráficos de burbuja con R

El otro día en R-bloggers leí este post. Entonces busqué información sobre estos gráficos con R en español y sólo encontré ayuda para realizarlos con Excel. Es verdad que el enlace que os pongo es más que suficiente para realizar los gráficos de burbuja, pero en pocas líneas puedo ilustrar mejor un ejemplo y proponeros varias formas de crearlo. La primera de ellas emplea la función symbols y genera el siguiente gráfico: ...

5 de diciembre de 2010 · rvaquerizo

Montemos un sistema de información en nuestro equipo (II)

Vamos a empezar a subir archivos a la BBDD. Evidentemente, lo primero que tenemos que hacer es crearnos una BBDD en Postgres. Con el PGAdmin creamos una nueva base de datos; disponemos de varias opciones, en nuestro caso no modificamos ninguna y creamos BD. Ya tenemos una BBDD funcionando y a la hora de conectarnos a ella tendremos que asignarle las propiedades necesarias para su correcto funcionamiento: Ya tenemos dispuesta la BBDD y ya podemos empezar a subir tablas. Para ello, ya os comenté que usaríamos el Data Integration de Pentaho (antes conocido como Kettle). La intención que tengo al montar este pequeño sistema de información es disponer de una serie de tablas para la realización de modelos estadísticos con R. Podría tener mi equipo lleno de ficheros de texto, de Excel y algún Access por ahí, pero es eso lo que pretendo evitar; con esto me garantizo un orden y un correcto acceso a mis tablas. Para comenzar a trabajar quiero subir una tabla del repositorio de datos UCI. Quiero seguir trabajando con el paquete e1071 de R y estoy analizando qué tablas son las que más se adecúan a mis objetivos; para ello tendré que cargar algunas y comprobar si los datos se adecúan a mis propósitos. ...

3 de diciembre de 2010 · rvaquerizo

Montemos un sistema de información en nuestro equipo (I)

Un poco de bricolaje. Se trata de crear un sistema de información sin coste y que nos permita almacenar nuestros datos con orden y coherencia, crear informes y realizar modelos matemáticos bajo Windows. Es perfectamente replicable para Linux. También estoy abierto a sugerencias, ya que tampoco soy ningún experto en el tema y podemos crear un debate interesante. El sistema que planteo se va a sustentar en tres pilares fundamentales que os podéis descargar de forma gratuita en los enlaces creados: ...

27 de noviembre de 2010 · rvaquerizo

Macros (fáciles) de SAS. Número de observaciones de un dataset

Con esta macro podréis identificar el número de observaciones de UN CONJUNTO DE DATOS SAS. No funciona con tablas Oracle, Informix, DB2,… me gustaría dejarlo claro. Al emplear la función de I/O OPEN junto con ATTRN y CLOSE no realizamos un conteo de observaciones. Al final el proceso crea una macro variable que se llama NOBS y que podremos usar en nuestra sesión SAS. %macro observaciones(datos); /*EL NUMERO DE OBS LO VAMOS A METER EN UNA MV GLOBAL*/ %global nobs; /*ABRIMOS EL CONJUNTO DE DATOS PARA VER SUS CARACTERISTICAS*/ %let datosid = %sysfunc(open(&datos)); /*SI ESTA ABIERTO ENTONCES LA FUNCION ATTRN NOS DA LA NOBS*/ %if &datosid %then %do; %let nobs =%sysfunc(attrn(&datosid,NOBS)); /*CERRAMOS EL CONJUNTO DE DATOS*/ %let rc = %sysfunc(close(&datosid));%end; %mend ; Fácil y rápida. Si alguien tiene problemas con su uso que lo comunique en el blog. Seguro que es de gran utilidad. Saludos.

24 de noviembre de 2010 · rvaquerizo