Archivo de la categoría: R

Manual. Curso introducción de R. Capítulo 18: Modelos de regresión de Poisson

Cuando disponemos de un número de eventos que ocurren en un intervalo tiempo estamos ante una variable de poisson, además tiene que producirse que este número de eventos en intervalos sean independientes del número de eventos que ocurran fuera de ese intervalo de tiempo. En un intervalo muy pequeño la probabilidad de que ocurra un evento es proporcional al tamaño del intervalo y por último la probabilidad de que ocurran dos o más eventos en un intervalo muy pequeño es prácticamente 0. Cualquier variable medida en un intervalo de tiempo o en un intervalo espacial es una variable de Poisson, también se pueden emplear para medir frecuencias en intervalos de población (casos de cáncer en poblaciones, frecuencias siniestrales,…). Tiene como particularidad que la media y la varianza son iguales a p*s donde  p es la probabilidad de ocurrencia de un evento de poisson en un intervalo de tiempo de tamaño unidad y s es el tamaño del intervalo de tiempo o espacial en estudio.

Un modelo de regresión de Poisson mide la relación de dependencia de una variable de Poisson con una o varias variables. Si p, repetimos,  es la probabilidad de ocurrencia de un evento de poisson en un intervalo de tiempo de tamaño unidad y s es el tamaño del intervalo el modelo matemático podría expresarse  como Seguir leyendo Manual. Curso introducción de R. Capítulo 18: Modelos de regresión de Poisson

Simulación. Estimación de pi con el método Montecarlo

La simulación es un campo que está tomando una gran importancia. Nos está permitiendo evaluar comportamientos extremos sin ningún tipo de riesgos. Casi nadie se imaginaba que el escenario económico actual podía cambiar con la velocidad que lo está haciendo. Imaginemos una modificación brusca de los ratios de morosidad implicará que las entidades bancarias tengan que modificar sus fondos de previsión. Esta misma morosidad puede afectar a las aseguradoras de crédito que tienen que estimar sus provisiones técnicas. Ahora mismo es necesario simular las condiciones más extremas para los datos futuros y la simulación nos permite experimentar para aproximarnos al problema.

El primer acercamiento a la simulación lo vamos a realizar mediante el método Montecarlo. Seguir leyendo Simulación. Estimación de pi con el método Montecarlo

Monográfico. Arboles de clasificación con RPART

Con este rápido monográfico voy a acercarnos a los árboles de regresión con R. Esta metodología de predicción realiza construcciones lógicas que establecen reglas que nos permiten clasificar observaciones en función de una variable respuesta y de las relaciones existentes entre las variables dependientes. En esta primera aproximación no no voy a entrar en algoritmos ni en tipos de árboles (hay suficiente documentación en la red) intentaré en despertar la curiosidad del lector sobre este tipo de análisis y sobre todo quiero acercar a R al mundo empresarial un ámbito donde creo que R no destaca (al menos en España).

Como es habitual voy a plantear un ejemplo e iremos analizando las posibilidades del paquete rpart. También quiero que este ejemplo sirva como introducción a la generación de datos aleatorios con R. Con esto la idea es “simular” la cartera de un banco Seguir leyendo Monográfico. Arboles de clasificación con RPART

I Jornadas de usuarios de R en España

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.

El anuncio es tal vez algo prematuro  faltan ciertos detalles por concretar. Los interesados podrán seguir las discusiones al respecto en la lista oficial de R en español.

¡Espero que, con la participación de todos, sean un gran éxito!

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.

La versión original de rpart coincidía con CART de manera casi absoluta. La única diferencia reseñable estaba en los surrogates: yo me decantaba por el surrogate con el mayor número de coincidencias mientras que CART lo hacía por el que tenía mayor porcentaje de coincidencias. La consecuencia es que rpart favorece aquellas variables con menos missings. Desde entonces, ambos programas han evolucionado. Yo no he tenido tiempo de trabajar de manera sustancial en rpart durante los últimos diez años. No es de extrañar, por tanto, que los gráficos y la visualización hayan quedado algo anticuados; lo que es más sorprendente es que todavía subsistan.

Rpart se llama rpart porque los autores registraron comercialmente el término CART. Era la mejor alternativa que se me ocurrió entonces. Me parece curioso que una de las consecuencias de haber registrado “CART” es que ahora se utilice “particionamiento recursivo” mucho más a menudo que CART como nombre genérico para los métodos basados en árboles.

[…]

El lector queda invitado a extraer sus propias conclusiones.

Lista oficial de ayuda de R en español

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.

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).

Pero la situación va a cambiar con el paquete partykit, todavía en fase de desarrollo, que, según sus autores, va a ofrecer “una representación unificada de los árboles, así como métodos predict(), print() y plot()“. Esto además de otras novedades, como una reimplementación del algoritmo CHAID y mejoras en la visualización de algunos de los tipos de árboles más habituales.

La presentación en sociedad del nuevo paquete va a realizarse en la conferencia de usuarios de R y es de esperar que, una vez dispongamos de una versión estable del paquete, cambie de manera sustancial la manera en que utilicemos esta familia de modelos tan importante en la práctica.

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:


frutas<-read.table("c:\\datos\\alimentos.txt",header=FALSE,sep="\t")
nombres<-c("nombre","inter_hidratos","kcal","proteinas","grasas")
names(frutas)<-nombres

El archivo de texto lo tenemos en una ubicación de nuestra máquina c:\datos Seguir leyendo Manual. Curso introducción de R. Capítulo 17: Análisis Cluster con R (y III)

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

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

No es complicado realizar muestreos estratificados con o sin reemplazamiento. La manera más sencilla de obtenerlos consiste en usar el paquete sampling.

El muestreo sin reemplazamiento y estratificado respecto a iris$Species —que es un factor con tres niveles de 50 elementos cada uno— puede llevarse a cabo así:

library( sampling )
estratos <- strata( iris, stratanames = c("Species"), size = c(20,20,20), method = "srswor" )
iris.muestreado <- getdata( iris, estratos )

Para obtener un muestreo con reemplazamiento se sustituye el método srswor por el srswr.

El interesado en utilizar técnicas de muestreo estratificado más sofisticadas no tiene sino que consultar la ayuda y ejemplos de la función strata.