R

¿Qué es un banco? ¿Qué son las pruebas de resistencia? (En primera derivada)

En primera derivada, un banco es un señor que pone 10, capta 90 en depósitos de ahorradores —a los que da un interés del 4 %— y presta 100 al 5 %. El código en R que aparece a continuación indica cuál es el beneficio del señor:

capital <- 10
depositos <- 90

int.dep   <- 0.04
int.pres  <- 0.05

prestamos <- capital + depositos
ingresos <- prestamos * ( 1 + int.pres )
gastos   <- depositos * ( 1 + int.dep  )

beneficio <- ingresos - gastos
rentabilidad.capital <- 100 * beneficio / capital

Quien lo ejecute comprobará cómo el señor obtiene un jugoso beneficio. Además, el señor podría hacerlo aún más jugoso incrementando el valor de los depósitos, es decir, captando más ahorro con el mismo capital inicial. Queda como ejercicio para mis lectores repetir los cálculos anteriores con depositos <- 190, etc.

Competición de estadística con R en las III Jornadas de Usuarios de R

R

Como actividad complementaria a las III Jornadas de Usuarios de R, por gentileza de uno de sus patrocinadores, Nestoria y gracias al trabajo de Emilio Torres Manzanera, se ha anunciado hoy el I Concurso de Análisis de Datos con R.

Con 1.500€ en premios y la posibilidad de pasar a colaborar con la plantilla de Nestoria para los autores de las mejores soluciones, el concurso aspira a sondear la habilidad de la comunidad de usuarios de R para analizar datos reales y extraer valor de la base de datos de viviendas y precios de viviendas de Nestoria.

Desarrollo de paquetes con R (III): check, check, check

R

Uno de los pasos más importantes en el desarrollo de un paquete es verificar que funciona correctamente. Un check comprueba la estructura del paquete, la consistencia entre el código y la documentación, que no faltan secciones importantes en esta última, que los ejemplos pueden ejecutarse sin problemas, etc.

De ahí que sirva para para muchos propósitos. En particular, si uno elige los ejemplos que acompañan a la documentación de las funciones con buen criterio, éstos servirán no sólo para ilustrar el comportamiento de las funciones sino, también, para verificar el funcionamiento del paquete. Además, de usar R-forge, como el sistema realiza checks en varias plataformas distintas, el elegir bien los ejemplos permite realizar comprobaciones multiplataforma del código.

Paquetes huérfanos de R

R

Ayer hablaba con Juan José Gibaja (al que finalmente conocí en persona) y me contaba cómo había usado un paquete de R —no recuerdo cuál— que misteriosamente había desaparecido de CRAN.

—¡Imposible! Los paquetes no desaparecen: quedan huérfanos.

Efectivamente, en la lista de paquetes de CRAN, abajo, se mencionan los llamados paquetes húerfanos. Según el README, se trata de paquetes cuyos autores o mantenedores

  • han decidido desentenderse del paquete o
  • los mensajes que les envían desde CRAN rebotan o no son contestados.

Tales paquetes pasan al estado ORPHANED y se mantienen en CRAN mientras pasen los checks. Pero, conforme avanzan las versiones de R, puede que algunos de esos paquetes dejen de compilar y entonces son archivados. Existe una lista de paquetes huérfanos archivados cuya última versión puede encontrarse aquí.

Desarrollo de paquetes con R (II): primeros pasos

R

La segunda entrada en mi serie sobre la creación de paquetes con R cubre los primeros pasos en la creación de uno. Bastan para tener una primera versión de un paquete en minutos. Pero antes, unos consejos generales:

  1. Usar algún tipo de sistema operativo basado en Unix: Linux, Mac OS, etc. o Cygwin en el peor de los casos. Tengo que confesar que yo comencé a usar Linux precisamente por este motivo: los procedimientos y herramientas que se utilizan para construir paquetes de R están influenciadas por la tradición Unix. Es cierto que se han creado herramientas para poder desarrollarlos desde Windows pero, después de haber trabajado en Linux, me parecen incómodas y antinaturales: pasar de Linux a Windows es como pasar del Ferrari al borriquillo.
  2. Registrar el proyecto en R-Forge, como ya hemos comentado previamente. Dadas sus ventajas —siendo una de las principales permitir probar el paquete sobre varias plataformas distintas (Linux, Mac y Windows) automáticamente— sólo se me ocurre un motivo para no utilizarlo: como el código está públicamente disponible, no es válido para desarrollar aplicaciones cerradas y propietarias.
  3. Utilizar subversion (o git). Si el proyecto se aloja en R-Forge, subversion es la opción por defecto. Utilizar subversion permite gestionar mejor el desarrollo del paquete y facilita la colaboración entre los diversos autores.

La manera en la que recomiendo comenzar a crear un paquete es partiendo de una serie de funciones ya desarrolladas previamente. Ni siquiera hace falta que estén terminadas ni que funcionen correctamente. Por ejemplo, podemos tener las dos funciones siguientes:

Sweave, investigación reproducible... y más

Me consta que algunos de mis lectores están al tanto de eso que llaman investigación reproducible. De acuerdo con la Wikipedia (en inglés),

[E]l término investigación reproducible se atribuye a Jon Claerbout, de la Universidad de Stanford y se refiere a la idea de que el producto final de la investigación no debería circunscribirse a un artículo sino comprender también el entorno computacional completo usado en la generación los resultados que contiene, tales como el código, los datos, etc. para que puedan ser reproducidos y se pueda avanzar a partir de ellos.

Desarrollo de paquetes con R (I): ¿para qué?

R

Por popular demanda, voy a comenzar una serie de entradas sobre desarrollo de paquetes con R. Mi idea consiste en establecer un diálogo con mis lectores que me permita pulirlas para acabar escribiendo un documento que pueda resultar útil a los usuarios de R.

En el primero me voy a limitar a explicar para qué puede resultar útil desarrollar paquetes. Lo voy a hacer desde mi experiencia de desarrollador y desde el particular punto de vista de mis hábitos y manías personales. Y no sería justo proseguir sin anunciar (o confesar) que una de las más pugnaces es la de mi aversión al caos.

Una herramienta para construir paquetes de R sobre Windows

R

Construir paquetes multiplataforma con R supone todo un reto para quienes tenemos un acceso limitado o nulo a determinados sistemas operativos. En particular, a muchos nos resulta complicado acceder a una máquina Windows con todas las herramientas necesarias para crear y comprobar los paquetes.

Pero Uwe Ligges, el encargado de los paquetes binarios de Windows para CRAN ha puesto en funcionamiento un servicio para poder compilarlos. En la página de información de este servicio pueden consultarse las instrucciones para subir los paquetes y los caveats:

Minitutorial de subversion

Por popular demanda, voy a ilustrar en esta entrada el uso de subversion para el desarrollo colaborativo de software. Lo escribo teniendo en mente el desarrollo de paquetes alojados en R-Forge y para usuarios de sistemas operativos más o menos decentes. A quienes usan Windows les recomiendo Tortoise, cuyo uso queda fuera del alcance de lo que sigue.

En primer lugar, para los desavisados: subversion es un programa para gestionar versiones de ficheros. A usuarios particulares, les permite mantener fotos de tu trabajo (¿cómo estaba mi libro/tesis/código hace un mes?). Cuando varias personas trabajan en un mismo proyecto, les permite controlar quién ha hecho qué, cuándo y por qué; además, que cada uno de los integrantes del proyecto trabaje sobre su propia copia del código, aunque mandando su cambios a un repositorio central y recibiendo, claro está, los cambios del resto del equipo.

Gestión de proyectos en R

Muchos de mis lectores tienen, seguro, maneras distintas —y probablemente mejores— de organizar sus proyectos en R que yo. Pero me consta que a algunos les cuesta no convertir sus carpetas en un caos en los que sólo ellos se manejan —hasta que pasa el tiempo, se olvidan y tienen que volver sobre ello—. Para ellos, para sugerirles un procedimiento eficiente de trabajo, va esta entrada. En ella describo cómo organizo mis propios proyectos con R.

Sobre la encuesta sobre minería de datos de Rexer Analytics

Hace unos días se publicaron los resultado de la cuarta encuesta anual de minería de datos realizada por Rexer Analytics en la que 735 participantes de 60 países completaron sus 50 preguntas. Los hechos más relevantes que contiene son:

  • La principal aplicación de la minería de datos (siempre pienso que desgraciadamente) es en el campo de la gestión (o inteligencia) de clientes, lo que por ahí denominan CRM.
  • Los algoritmos más usados por los encuestados han sido árboles de decisión, regresión y análisis de conglomerados.
  • En cuanto a las herramientas, la más utilizada es R. El 43% de los encuestados afirmaron haberlo usado. Sin embargo, como herramienta básica de trabajo, la más usada parece ser STATISTICA, usada por un 18% de los encuestados. Las herramientas mejor valoradas fueron STATISTICA, IBM SPSS Modeller y R.
  • La mayor parte del análisis siguie realizándose en ordenadores personales, con los datos almacenados en local. Lo mismo ocurre a la hora de realizar el scoring. Los usuarios que más utilizan PMML son quienes emplean STATISTICA.

Y más detalles pueden descargarse de la página de la encuesta.

Dos perspectivas sobre el problema de los valores no informados

Me llegó el otro día información acerca de un curso sobre métodos para afrontar el problema planteado por los valores no informados (missing observations) que su autor agrupaba bajo etiquetas bastante simpáticas: el bueno, el malo y el impensable. Tal vez faltaba el feo, tal vez porque lo son todos ellos, igual que el bendito problema que suponen. Añadía, sin mayores abundamientos, que

  • explicaría cómo la solución común es en general la peor;
  • mostraría por qué cierta solución sencilla, relativamente común y con mala fama no es habitualmente tan mala, explicando, además, cuáles son las situaciones en las que funciona y no funciona e
  • indicaría dos soluciones que proporcionan resultados insesgados, una de las cuales es sencilla de implementar pero sólo funciona en ciertas circunstancias y la otra, aunque más complicada, funciona siempre.

Es un planteamiento un tanto comercial y no exento de gancho. Sin embargo, para el interesado en estos temas, traigo a colación dos artículos que ofrecen dos perspectivas algo distintas sobre este problema. El primero es una panorámica de procedimientos y herramientas existentes para encarar el problema de los valores no informados (en el contexto del análisis de la regresión, pero fácilmente extrapolables a otros similares), _Much Ado About Nothing: A Comparison of Missing Data Methods and Software to Fit Incomplete Data Regression Models _. El segundo es un informe de la Agencia Europea del Medicamento, Guideline on Missing Data in Confirmatory Clinical Trials, que sostiene una postura razonablemente paranoica al respecto (resumidamente: en caso de duda, siempre la solución más conservadora).