¿Qué son los árboles de regresión?

Los árboles de regresión son una técnica de análisis discriminante no paramétrica que permite predecir la asignación de muestras a grupos predefinidos en función de una serie de variables predictoras. Es decir, que teniendo una variable respuesta categórica, los árboles de regresión nos van a permitir crear una serie de reglas basadas en variables predictoras que nos van a permitir asignar una nueva observación a un grupo u a otro. Es una técnica discriminante porque permite "discriminar" entre grupos. Más importante que la interpretación de la relación entre la variable dependiente y las varialbes predictoras, es aquí la capacidad predictiva del modelo que generemos. Esto es, dadas unas variables predictoras ¿podemos predecir correctamente la variable respuesta (que, no olvidemos, es categórica)?

Ventajas:

  • La regla se asignación son simples y legibles, por tanto la interpretación de resultados es directa e intuitiva.
  • Es robusta frente a datos atípicos u observaciones mal etiquetadas.
  • Es válida sea cual fuera la naturaleza de las variables explicativas: continuas, binarias nominales u ordinales.
  • Es una técnica no parámetrica que tiene en cuenta las interacciones que pueden existir entre los datos.
  • Es computacionalmente rápido

Desventajas:
  • Las reglas de asignación son bastantes sensibles a pequeñas perturbaciones en los datos (inestabilidad).
  • Dificultad para elegir el árbol óptimo.
  • Ausencia de una función global de las variables y como consecuencia pérdida de la representación geométrica.
  • Los árboles de clasificación requieren un gran número de datos para asegurarse que la cantidad de las observaciones de los nodos hoja es significativa.

Un árbol de clasificación busca en cada nodo (split) minimizar la devianza residual o, lo que es lo mismo, maximizar la variabilidad explicada por ese nodo. El ajuste de un árbol de regresión en R se hace utilizando la misma formulación que en modelos lineales o GLM (y ~ x1 + x2 + x3 + x4 + ... + xn, pero ¡ojo! no se admiten términos de interacción entre variables).


Caso de estudio: Predicción de la defoliación en la Sierra de los Filabres, Almería

(L. Cayuela, datos no publicados)
En este estudio se tienen datos sobre defoliación estimada en porcentaje en pinares de repoblación en la Sierra de los Filabres, Almería. Se quiere generar un modelo que nos permita predecir la defoliación en otras zonas de la sierra. Sin embargo, la estimación de visu de la defoliación es relativamente subjetiva por lo que la agrupación de los porcentajes de defoliación en clases (baja, media y alta) es recomendable. Como la variable respuesta es en esencia categórica, el uso de árboles de regresión ofrece una buena alternativa para el análisis de los datos.

Los datos constan de observaciones hechas en 76 rodales de pino silvestre (Pinus sylvestris) y pino salgareño (Pinus nigra). En este caso concreto sólo generaremos un modelo de árbol de regresión para los pinares de pino salgareño. Aunque se tiene información de diferentes variables predictoras, el modelo que queremos ajustar sólo considerará las siguientes variables: densidad de pinos, elevación, pendiente, insolación y potencial hídrico.

Objetivos:

  1. Generar un modelo predictivo que permita explicar el grado de defoliación (bajo, medio, alto) en función de diferentes variables ambientales.
  2. Entender cómo funcionan los aŕboles de regresión y aprender a interpretar los resultados.

Documentación


Datos

Los datos están disponibles pinchando aquí . Puedes descargarte los datos a tu ordenador, copiarlos al portapapeles o leerlos directamente de la dirección URL (esto último es lo más recomendable para que el código sea reproducible desde cualquier ordenador) utilizando en todos los casos la función read.table().

Pasos a seguir

  1. Lee los datos y sálvalos en un objeto llamado pinos. Explora los datos con las funciones edit() y str(). ¿Has identificado cuál es la variable respuesta? ¿Has identificado las variables predictoras? ¿Son todas ellas numéricas?
  2. Explora la correlación entre las variables predictoras con la función cor(). Aunque los árboles de regresión pueden tratar variables independientes correlacionadas entre sí, el conocer cómo se correlacionan dichas variables puede ayudarnos a interpretar los resultados.
  3. Busca una función en R que ajuste árboles de regresión (busca con help.search()). Nota: la función o funciones que vamos a usar en esta sesión se encuentran dentro del paquete tree().
  4. Transforma la variable respuesta en categórica con la función cut() asignando los valores a tres clases de daño: 0-25% (baja), 25-50% (media) y 50-100% (alta).
  5. Cambia las etiquetas de esta nueva variable para que digan "Baja", "Media" y "Alta" respectivamente. Esto será de gran ayuda en la representación de los gráficos. Utiliza para ello el comando levels(variable nueva) <- c("Baja", "Media", "Alta").
  6. Ajusta el árbol de regresión y asígnalo a un objeto llamado tree1. ¿Cómo es la estructura de este objeto? Escribe tree1 y mira a ver qué resultado te da. ¿Cómo se interpreta este resultado?
  7. Utiliza la función summary() para ver el resumen de tu modelo. ¿Qué información nos da el resultado de esta función?
  8. Dibuja el árbol con la función plot(). Añade las etiquetas de los nodos terminales y de las reglas de asignación con la función gráfica de bajo nivel text().
  9. ¿Cómo interpretas tus resultados?

Código


#1. Leer los datos y salvarlos en un objeto llamado pinos
pinos<-read.table(url("http://archivos-para-subir.googlegroups.com/web/Ejemplo%201.txt?gda=6wuxMkMAAAABV8DnKdep7DQec7BaKTDe6tVUhYIecarG6-kEdpT18V3u1xMEWA1Jf1QFNsx9i1sytiJ-HdGYYcPi_09pl8N7FWLveOaWjzbYnpnkpmxcWg"),header=T,sep="\t")

#2. Crear un nuevo data.frame que contenga sólo los datos de Pinus nigra
pinus.nigra<-pinos[pinos$Especie=="Pinus nigra",]

#3. Explorar las correlaciones entre variables ambientales
cor(pinos[,c(7:9,11:12)])

#4. Categorizar la variable dependiente con la función cut()
pinus.cat<-cut(pinus.nigra$Defoliacion,breaks=c(0,25,50,100))
levels(pinus.cat)<- c("Baja", "Media", "Alta")

#5. Ajustar un árbol de clasificación con la función tree()
install.packages("tree")
library(tree)
tree1<-tree(pinus.cat~Densidad_pinos+Elevacion+Pendiente+Insolacion+Potencial_hidrico, data=pinus.nigra)

#6. Dibujar el árbol de clasificación
plot(tree1)
text(tree1)