Truco SAS. Transformación EBCDIC (Mainframe)

Hay ocasiones en las que tenemos que leer directamente de entornos Mainframe ficheros DB2, conocemos la estructura de esos ficheros y necesitamos leerlos vía FTP. Para ello tenemos que tener en cuenta la transformación EBCDIC (Extended Binary Coded Decimal Interchange Code ) a ASCII (American Standard Code for Information Interchange), esta transformación requiere las siguientes equivalencias entre formatos:

  • Decimales empaquetados: PD5. -> S370FPD5.
  • Enteros binarios: IB5. -> S370FIB5.
  • Caracter: 5. ->EBCDIC5.
  • Numérico con 0: Z5. -> S370FZDU5.

De modo que para leer el fichero del Mainframe haremos:

I Jornadas de usuarios de R en España

R

Me es grato anunciar que van a realizarse las primeras jornadas de usuarios de R en España. Van a tener lugar los días 26 y 27 de noviembre en la Universidad de Murcia.

Como uno de los organizadores de las mismas, me gustaría invitar a usuarios de R de todos los ámbitos (academia, banca, centros de investigación, hospitales, etc.) a compartir experiencias, establecer vínculos con otros grupos, conocer a otros usuarios, asistir a charlas y debatir finalmente la creación de una organización de usuarios de R.

Subconjuntos de variables con DROP/KEEP

Me han llegado algunas cuestiones sobre el uso de DROP/KEEP y a raiz de ello me he decidido a hacer un mensaje sencillo para que los usuarios menos avanzados de SAS puedan entender su funcionamiento. Sé que muchos lectores son expertos programadores pero también es necesario tener un rincón con código SAS menos avanzado para aquellos que se estén acercando a esta programación. En este caso partimos de una tabla de datos aleatorios con 102 variables y 10.000 observaciones que generamos mediante el siguiente programa SAS:

Sobre la historia de CART y rpart

Hace unos días conversábamos Raúl y yo sobre árboles de clasificación. En particular, hablábamos de CART, el algoritmo propietario de Salford Systems. Me intrigó saber cuál sería la diferencia entre dicho algoritmo y la alternativa existente en R, rpart.

El autor de dicho paquete, Terry Therneau, tuvo la gentileza de ofrecer una introducción histórica al particular de la que ofrezco algunos fragmentos que traduzco yo mismo a continuación:

[…]

Tanto el programa comercial CART como la función rpart() están basados en el libro Classification and Regression Trees. Como lector y revisor de alguno de sus primeros borradores, llegué a dominar la materia. CART comenzó como un enorme programa en Fortran que escribió Jerry Friedman y que sirvió para contrastar las ideas contenidas en el libro. Tuve el código durante un tiempo y realicé algunos cambios, pero me resultó demasiado frustrante el trabajar con él. Fortran no es el lenguaje adecuado para un algoritmo recursivo […]. Salford Systems adquirió los derechos de dicho código e ignoro si alguna de las líneas origininales permanecen en él todavía. Mantuve muchas conversaciones con su principal programador (hace 15 o 20 años) sobre procedimientos para hacerlo más eficiente, esencialmente un problema interesante de indexación óptima.

Lista oficial de ayuda de R en español

R

Desde hace apenas unas semanas existe una lista de correo de ayuda en español para R. Está gestionada desde los servidores de CRAN.

Para darse de alta en ella sólo hay que seguir las instrucciones contenidas en el siguiente enlace:

https://stat.ethz.ch/mailman/listinfo/r-help-es

Los usuarios de R están más que invitados a participar en ella y ayudar a crear una verdadera comunidad de usuarios, aprovechando sinergias, compartiendo experiencias, etc.

Además, se anunciará próximamente a través de esta lista la convocartoria de las primeras jornadas de R en España.

Trucos SAS. Muestreo con PROC SURVEYSELECT

Hace varios días planteamos algún truco SAS para la realización de muestras aleatorias. Hoy planteo otro truco para lo mismo pero empleando el procedimiento de SAS SURVEYSELECT. Este procedimiento lo tenemos en el módulo STAT y tiene una sintaxis muy sencilla. Además nos permite realizar muestreos estratificados de forma muy sencilla, mediante pasos data el muestreo estratificado se complica. Como es habitual vemos varios ejemplos partiendo de una tabla SAS aleatoria:

Oracle y SAS vía SQL pass trough

Para trabajar directamente con el motor de BBDD SAS cuenta con «Pass trougth». SAS crea una conexión al gestor de BBDD y desde ese momento podemos ejecutar sentencias de SQL directamente. Para seguir con la línea de trabajo habitual emplearemos ejemplos para conocer su funcionamiento. Los ejemplos que vamos a emplear serán sobre una BBDD Oracle ya que es muy común trabajar en entornos SAS con acceso a algún datamart de Oracle. Evidentemente la utilidad pass trough o pas thru convive perfectamente con

partykit: un paquete de R para generar y manipular árboles de decisión

Los usuarios de R disponen de una serie de algoritmos estándar para generar y manipular árboles de decisión. Los más habituales están contenidos en alguno de los siguientes paquetes:

  • rpart, tal vez mi favorito
  • RWeka, un paquete más genérico que permite realizar llamadas a funciones de Weka desde R
  • mvpart
  • party

Cada uno de ellos tiene un interfaz distinto y operaciones como las de realizar predicciones, dibujar los árboles, etc. exigen conocer funciones específicas. (Éste es, de hecho, un problema genérico de R derivado de su naturaleza cooperativa).

Manual. Curso introducción de R. Capítulo 17: Análisis Cluster con R (y III)

Ante el exito de los mensajes dedicados al análisis cluster la nueva entrega del manual de R la dedicaremos de nuevo al análisis de agrupamiento. Como es habitual trabajaremos con un ejemplo que podéis desgargaros aquí. Partimos de un archivo de texto delimitado por tabuladores con 46 frutas y la información que disponemos es:

  • Nombre
  • Intercambio de hidratos de carbono por gramo
  • Kilocalorías
  • Proteinas
  • Grasas

(información obtenida de www.diabetesjuvenil.com)

El primer paso será crear un objeto en R que recoja los datos en el análisis. Para ello vamos a emplear la función read.table que deberá tener los parámetros adecuados al fichero de texto que deseamos leer:

Herramientas visuales y libres de minería de datos

El otro día me preguntó una amiga estadística qué herramienta visual de minería de datos libre —imagino que también quería decir gratuita— le recomendaba. Pensaba que la respuesta a la pregunta era sobradamente conocida de los que nos movemos en nuestro estrecho mundillo. La constatación —sobre una muestra que he ampliado a todo un récord de dos individuos— de que lo cierto es lo contrario me ha empujado a redactar esta entrada en el blog.

Muestreo de datos con R

Recientemente, hubo una entrada en este blog sobre cómo realizar muestreos aleatorios en tablas SAS. En ésta vamos a ver cómo se procedería con R.

Consideraremos el conjunto de datos iris —de dimensión 150 x 5— y extraeremos 60 filas con distintos procedimientos.

Para el muestreo aleatorio simple sin repetición , basta con hacer:

indices <- sample( 1:nrow( iris ), 60 )

iris.muestreado <- iris[ indices, ]

Para relizar un muestreo aleatorio simple con repetición , basta con sustituir la variable indices anterior por

Integración de R con SAS, SPSS y otros

R, SAS

Recientemente se publicó en este blog una entrada haciendo mención a la futura integración de R en SAS. Existe, de hecho, un procedimiento artesanal de lanzar procesos de R desde SAS basado en la posibilidad de realizar llamadas al sistema operativo desde SAS. No obstante, SAS ha decidido ahondar en dicha integración y proporcionale un marchamo corporativo.

Sin embargo, esta iniciativa dista mucho de ser la pionera y merce la pena lanzar una mirada panorámica al mercado. Por ejemplo:

Trucos SAS. Pasar de caracter a numérico y viceversa

Llega un gran número de visitas a AyD buscando como transformar en SAS variables caracter a numéricas y viceversa. Pero estas visitas están muy poco tiempo y me he planteado que los mensajes que hay dedicados al uso de PUT e INPUT no son claros. Por este motivo planteo un truco SAS de transformación de variables muy corto y concreto. Como es habitual lo vemos con ejemplos:

Transformar de caracter a numérico: