Da comienzo la lectura de “The Elements of Statistical Learning”

Enero 10th, 2012 por rvaquerizo

Interesante iniciativa de Juanjo Gibaja y Carlos Gil Bellosta consistente en leer el libro “The Elements of Statistical Learning”. La idea es crear un grupo de trabajo que lea de forma coordinada el libro, pero además van a implementar en R los ejercicios y ejemplos. Desde esta bitácora no vamos a colaborar en la lectura pero si vamos a colaborar en la divulgación de resultados. Seguiremos muy de cerca este proyecto.

Tags:

Trucos SAS. Eliminación de espacios en blanco

Enero 10th, 2012 por rvaquerizo

Truco SAS práctico para aquellos que os estáis iniciando en el uso de las funciones de texto con SAS. Se trata de eliminar aquellos espacios en blanco que no son necesarios en una variable. Quería plantearos las posibles soluciones que se me han ido ocurriendo. Algunas de ellas no son eficientes pero es necesario que dispongáis de todas. En la línea habitual planteo un ejemplo para que lo ejecutéis y así podáis analizar los resultados:

data ejemplo;
palabra=" EJEMPLO DE ELIMINACIÓN DE BLANCOS CON SAS ";
uso_compress=compress(palabra);
uso_trimn=trimn(palabra);
uso_trimn_left=trimn(left(palabra));
uso_compbl=compbl(palabra);
length uso_rxchange $50.;
rx=rxparse("' ' to ' '"); drop rx;
call rxchange (rx,length(palabra),palabra,uso_rxchange);
run;

La variable palabra tiene tanto espacios por la derecha como por la izquierda y entre las palabras que no son necesarios. La función COMPRESS elimina todos los espacios en blanco. Con TRIMN y LEFT eliminamos los espacios en blanco al inicio y al final de palabra pero mantenemos los espacios en blanco entre palabras.
COMPBL (compress blank) parece más adecuada para eliminar los espacios en blanco sobrantes entre las palabras. La función de reconocimiento de patrones RXCHANGE (que necesita el patrón previamente con RXPARSE) sustituye dos espacios por uno sólo, el resultado no parece muy satisfactorio; esto mismo podríamos hacerlo con la función TRANWRD. A ver si algún lector encuentra un patrón adecuado para
estas funciones. 

¿La combinación óptima de funciones?

data ejemplo;
palabra=" EJEMPLO DE ELIMINACIÓN DE BLANCOS CON SAS ";
optimo=trimn(left(compbl(palabra)));
run;

Combinación de 3 funciones de texto que nos permite eliminar espacios en blanco. A continuación lo ponemos como una macro que realiza una función:

%macro noblanco(pal);
trimn(left(compbl(&pal.)))
%mend;
*;
data ejemplo;
palabra=" EJEMPLO DE ELIMINACIÓN DE BLANCOS CON SAS ";
optimo=%noblanco(palabra);
run;

Espero que sea de vuestra utilidad. Un saludo.

Tags: , , , , , , ,

Lecciones de economía de un ignorante. ¿Llegamos a Solvencia II?

Diciembre 29th, 2011 por rvaquerizo

Lo primero, antes de expresar mi preocupación, aunque no sea el tipo más apropiado debido a que no soy ningún experto os cuento un poco de que va el tema. Solvencia II es una normativa iniciada en la Unión Europea para regular las operaciones de compañías aseguradoras. La sana intención que tiene es controlar los riesgos contratados y evitar que no se líe parda. Se estructura en 3 pilares:

  • Pilar I: Medir los activos y pasivos financieros de las compañías para calcular las exigencias de capital
  • Pilar II: Definir una estructura en la organización para supervisar los procesos
  • Pilar III: Mantenimiento de los pilares anteriores y creación de unos mecanismos que faciliten la supervisión

En estos pilares es donde se sustenta este marco regulatorio. Podemos decir que se trata de cuantificar el riesgo, crear una cultura dentro de la organización y facilitar la labor de reguladores y agencias de calificación [para que hagan la de Lehman Brothers y todavía las sigamos tomando en serio]. La medición de un impacto cuantitativo QIS (Quantitative Impact Study) nos va a permitir definir unas herramientas cualitativas que ajustan correctamente los riesgos. Y cuando empleamos el término riesgos no hay que referirse sólo al propio riesgo actuarial, tendremos en cuenta:

  • El riesgo actuarial: que es el propio del objeto asegurado
  • El riesgo de mercado: que es el riesgo debido a los problemas en mercados financieros (a qué os suena)
  • El riesgo de crédito: riesgo que nos mide el incumplimiento de las obligaciones contractuales, falta de pago principalmente
  • El riesgo operacional: es el derivado de la actividad que desarrolla la aseguradora principalmente son errores técnicos y humanos

Imagino que también se ha de analizar el riesgo de tipo de cambio (¿dentro del riesgo de mercado?) o el riesgo de masas tan importante tras la primavera árabe. Esto es lo que, a muy grandes rasgos, describe el marco de Solvencia II. Si hay alguna barbaridad escrita, mil perdones y corregidlo.

Solvencia II es positivo para el sector pero, bajo mi punto de vista, no todas las entidades aseguradoras pueden afrontar los cambios que suponen su entrada en vigor. Y por ello esperaba más fusiones como la de Adeslas con la Mutua pero esto no está sucediendo. En un reciente estudio everis exponía que sólo un 15% de las aseguradoras encuestadas estaría en condiciones de cumplir los requisitos del Solvencia II en 2013. Y este dato será mayor en compañías pequeñas. Pero no se nota tensión en el sector asegurador, no hay fusiones, no hay compras, ¿qué está pasando? En el sector bancario si se nota más esta tensión ante cambios normativos. Preocupa esa falta de preocupación.

No tengo claro el calendario de implantación de Solvencia II (¿2013 ó 2014?) pero si parece que llegamos tarde. Tendrán que preparar una moratoria. Además es muy complicado valorar las carteras de Vida en la situación actual con crisis de deuda en España e Italia ya que son las aseguradoras las que invierten esas rentas de Vida en deuda soberana ¿cómo valoras esas rentas con la que está cayendo? Mucho me temo que tendrán que fijar otra fecha para implantar el marco regulatorio o no será posible porque las cuentas no salen y parece que todo el sector lo tiene claro y pretende seguir funcionando como si no existieran los plazos. Al final como decía aquel “La Vida Sigue Igual”.

Tags:

Begraphic un add in para Excel muy interesante

Diciembre 26th, 2011 por rvaquerizo

 

Me he descargado de Begraphic un add in gratuito en su versión lite para Excel que nos permite realizar algunos gráficos interesantes como velocímetros o mapas. También tiene la posibilidad de realizar dashboard en hojas Excel. Todas estas tareas las realizamos mediante menús de forma bastante sencilla. En realidad es un add in que nos permite vincular las características de formas de Excel a celdas, ¿a qué os suena esto? Efectivamente, a los mapas de Excel que publico periódicamente en este sitio. Pero en este caso la gente de Begraphic pone a vuestra disposición en este enlace unos cuantos mapas más.

¿A qué estás esperando para registrarte y descargarte este complemento de Excel?

En futuras entradas trabajaremos con él, pero si alguien se anima que nos cuente su experiencia.

Truco Excel y SAS. Ejecutar SAS desde macro en Excel

Diciembre 12th, 2011 por rvaquerizo

Un truco muy malo hoy. Se trata de crear una macro de Excel que llame a un programa SAS y que además podamos pasar un parámetro. Es un código en Visual Basic que no tiene complejidad pero que puede ser útil. El código es:

Sub ejecuta_SAS()
'
'Ponemos la ubicación del ejecutable de SAS
ubicacion_SAS = "C:\SAS\sas.exe"
'
'Programa que deseamos ejecutar de SAS
programa_SAS = "'C:\ejecucion_excel.sas'"
'
'Podemos pasar parámetros como macros por ejemplo que aparecen en una celda de Excel
'Podemos poner todo el código SAS que queramos
parametro = "'%let nobs = " & Cells(1, 1) & " ;'"
'
'En una cadena ponemos toda la ejecución
ejecucion = ubicacion_SAS & " " & programa_SAS & " -initstmt " & parametro
'
'Shell ejecuta la cadena anterior
ejecuta = Shell(ejecucion, 1)
'
End Sub

Poca cosa y poco talento y bastante claro. Pero si me gustaría destacar el uso de la opción de SAS -initstmt que nos permite ejecutar SAS poniendo un código previamente (init statement). Esta opción nos permite pasar una macro como parámetro que es leída en una celda de Excel. Es una opción habitual cuando hacemos archivos ejecutables para SAS. Espero que sea de utilidad. Saludos.

Tags:

Informes con R en HTML. Comienzo con R2HTML (I)

Noviembre 28th, 2011 por rvaquerizo

En las III jornadas de R tuve el placer de asistir al taller de Gregorio Serrano sobre informes con R. Me abrió los ojos. Siempre he pensado que R no es una herramienta que sirva para hacer informes [modo consultor = ON] R no servía para realizar reporting  [modo consultor = OFF]. Pero R tiene un poderoso motor gráfico y dispone del paquete R2HTML para poder realizar tablas en HTML y si trabajamos con libros CSS de estilos podemos obtener resultados muy atractivos. Así que la otra tarde me puse manos a la obra y creo que puede salir una trilogía interesante. Bueno, depende del interés que despierte esta entrada del blog haré más entregas, pero de momento tengo en mente llegar a 3.

Seguimos con el sistema habitual. Simulo unos datos de ejemplo que podéis copiar  y pegar en vuestra consola de R:

clientes=20000
saldo_vista=abs(rnorm(clientes,0,1)*10000+5000)
saldo_ppi=(runif(clientes,0.1,0.6)*rpois(clientes,2))*60000
saldo_fondos=abs(rnorm(clientes,0,1)*100000+3000)*(runif(clientes)>=0.6)
edad=rpois(clientes,60)
datos_ini<-data.frame(cbind(saldo_vista,saldo_ppi,saldo_fondos,edad))
datos_ini$saldo_ppi=(edad<65)*datos_ini$saldo_ppi
#Creamos la variable objetivo a partir de un potencial
datos_ini$potencial= runif(clientes,0,1)
datos_ini$potencial= datos_ini$potencial +
log(edad)/2 +
runif(1,0,0.03)*(saldo_vista>20000)+
runif(1,0,0.09)*(saldo_fondos>30000)+
runif(1,0,0.07)*(saldo_ppi>10000)
datos_ini$pvi=(datos_ini$potencial>=quantile(datos_ini$potencial,
0.85))*1
#Eliminamos la columna que genera nuestra variable dependiente
datos_ini = subset(datos_ini, select = -c(potencial))

Datos simulados de una entidad bancaria donde tenemos edad, saldos en distintos productos de pasivo e identificamos a aquellos clientes que tienen contratada una pensión vitalicia. Nos solicitan realizar un informe con los datos de contratación por edad y por pasivo. Cuando realizamos informes es muy habitual tramificar variables continuas. Para crear los tramos de edad y de pasivo vamos a emplear Lee el resto de esta entrada »

Tags: , , , , , , ,

Trucos Excel (y SAS). Complemento para cambiar la configuración regional

Noviembre 25th, 2011 por rvaquerizo

Pasar salidas de SAS a Excel trae de cabeza a muchos usuarios de SAS. A este  blog llegan un gran número de entradas desde Google con términos del tipo  importar datos de sas a Excel, conectar SAS a excel, cambiar la configuración  regional con macros,... Hoy quería ayudaros un poco con esta problemática. Bueno, en realidad os va a ayudar el compañero Salva que hace unos meses me pasó un complemento de Excel tremendamente útil para aquellos que movemos datos  entre SAS y Excel. Para trabajar con este complemento sólo tenéis que  descargarlo en este enlace y activar el complemento en Opciones de Excel  Administrar complementos. Una vez hayamos hecho esto tendremos en nuestra  pestaña complementos lo siguiente:

configuracion-regional-excel.PNG

Muy sencillo, si elegimos Excel Americano habremos cambiado la configuración regional de Excel a . para separar decimales y , para separar miles. Si elegimos configuración Excel del sistema tendremos la configuración habitual europea. Si elegimos eliminar el Add-in... Ahora podéis copiar y pegar directamente salidas de Enterprise Guide o SAS en Excel. También os será mucho más sencillo exportar ficheros de Excel a SAS para aquellos que no tenéis los módulos necesarios ya que podéis guardar los archivos SAS como texto e importarlos desde SAS sin problemas. No me lo agradezcáis a mi, yo sólo escribo estas líneas, agradecédselo a Salva. Por cierto, el complemento está protegido con una contraseña que no diré sin su permiso.

Tags: , ,

Trucos SAS. Trasponer con SQL para torpes

Noviembre 21st, 2011 por rvaquerizo

trasponer_sql1.png

Trasponer datos con SAS es un tema que genera un gran número de consultas en Google, por lo tanto genera un gran número de visitas a este blog. Ya hay un monográfico al respecto pero hoy quería volver a contar la trasposición de datos con SQL y SAS pero a un nivel más bajo para que sea lo más sencillo posible. En el ejemplo partimos de una tabla con 3 variables, un id_cliente, un campo tipo y un campo precio. Cada tipo tiene un precio y necesitamos que nuestro dataset tenga un registro por id_cliente y 3 precios, uno por cada tipo. El ejemplo en código SAS:

data datos;
input id_cliente $ tipo precio;
datalines;
A 1 100
A 2 150
A 3 120
B 1 200
B 2 250
B 3 220
C 1 300
C 2 350
C 3 320
D 1 400
D 2 450
D 3 420
;run;

Esta es nuestra tabla de partida, ahora vamos a generar tres variables en función de la variable tipo:

data datos2;
set datos;
precio_1 = (tipo = 1) * precio;
precio_2 = (tipo = 2) * precio;
precio_3 = (tipo = 3) * precio;
run;

trasponer_sql2.png

Si vemos la tabla resultante tiene una forma de matriz con precios y ceros en función de la variable tipo. Ahora si sumarizamos esas variables y agrupamos por el id_cliente la forma de la tabla resultante es el objetivo deseado:

proc sql;
create table tdatos as select
id_cliente,
sum(precio_1) as precio_1,
sum(precio_2) as precio_2,
sum(precio_3) as precio_3
from datos2
group by 1;
quit;

Bien, pues esta es la “filosofía” de la trasposición con SAS en SQL. Pero esto lo podemos hacer en un solo paso:

proc sql;
create table tdatos as select
id_cliente,
sum((tipo=1)*precio) as precio_1,
sum((tipo=2)*precio) as precio_2,
sum((tipo=3)*precio) as precio_3
from datos
group by 1;
quit;

Y así podemos trasponer de forma sencilla en SAS sin emplear el PROC TRASPOSE que tiene alguna que otra limitación. Y por supuesto nos sirve para trasponer siempre que utilicemos SQL, con ORACLE, POSTGRES,… Creo que esta vez es muy sencillo de entender. Saludos.

Tags: , ,

Revisión de las III Jornadas de R

Noviembre 21st, 2011 por rvaquerizo

El día 18 de noviembre finalizaron las III jornadas de R y mis impresiones no pueden ser más positivas. A nivel organizativo todo funcionó a la perfección, algo muy meritorio teniendo en cuenta que los organizadores no son expertos en el tema y es muy difícil organizar un evento con 200 personas inscritas. En cuanto a la participación destacaría el gran número de asistentes y sus distintos ámbitos de procedencia. El contenido lejos de parecer abrumador, muchas presentaciones de 10 minutos, al final se hacía muy ameno aunque algunos ponentes eran considerablemente más aburridos que otros, en fin, no estábamos para divertirnos pero algunos se limitaban a contar fórmulas. Los talleres han sido un éxito. También quería agradecer a la EOI las aulas que pusieron a disposición del evento. Creo que el pilar del éxito de las Jornadas ha sido la EOI por instalaciones, ubicación y disposición.

A todo lo anterior hay que añadir un pero. No había representación empresarial. Casi todas las exposiciones estaban englobadas dentro del mundo de la docencia o la investigación, evidentemente es el primer paso para una aplicación empresarial pero eché en falta más presencia de empresas en el evento. Nos consta que hay empresas que trabajan en su día a día con R pero no han querido participar en modo activo con estas jornadas, como si estuvieran acomplejadas, luego se subirán al carro y se definirán pioneras.

A nivel personal muy positivo. He puesto cara a amigos y colaboradores cibernéticos como Gregorio, Juanjo, Jose Luis,… Para el blog se abren líneas de trabajo interesantes con una clara aplicación empresarial, una cuestión ronda mi cabeza ¿tendría sentido una empresa como Revolutions en España? También vengo con un gusto amargo, tendría que haber participado sobre todo con el uso conjunto de SAS y R, el software libre no se enfrenta al el software comercial, se complementa. Para sucesivas entregas, tras el éxito de estas no me cabe duda, tendré más oportunidades.

Segundo día en las III jornadas de R

Noviembre 18th, 2011 por rvaquerizo

Comenzamos el segundo día de las jornadas. Esto promete, el paquete brew para la automatización de informes. Una aplicación muy clara hacía el mundo empresarial.

Por cierto, la organización un 10.