fbpx

Hola mundo! Esta entrada es una continuación de la entrada de modelos estadísticos en donde veremos un ejemplo de regresión lineal simple en R. Vamos allá.

El problema de predicción

Este problema de machine learning consiste en estimar un valor numérico dada información previa. En ejemplo de estos son los valores o precios que tienen las casas basados en precios de otros inmuebles similares.

prediccion con la ouija

Algunos modelos de machine learning interesantes en el caso de predicción es toda la familia de
regresión, como la lineal múltiple o no lineal (salvo la regresión logística que suele utilizarse para clasificación).

Ejemplo con árboles de naranjas

Para trabajar el modelos de regresión lineal simple, vamos a poner en contexto una situación en donde tenemos árboles de naranja.

En este caso, vamos a tener varios árboles y nos va a interesar saber o conocer su circunferencia para distintos días. La pregunta en específico que vamos a tratar de resolver es: ¿cuál sería la medida de un árbol de naranjas a los 800 días de sembrado?

Para eso, los datos que tenemos son como estos:

Acá tenemos solamente uno de los cinco árboles que vamos a ver más adelante en el código. Fíjate que para cada uno vamos a tener las columnas que estamos llamando age ,que van a ser los días pasado desde que se sembraron, y circunference, el tamaño de la circunferencia, supongamos que en centímetros para efectos prácticos.

De la imagen, podemos decir que para el día 800 el valor de la circunferencia debería estar entre 87 y 115, que corresponde al valor de las circunferencias entre los días 664 y 1004.

Sin embargo, es una exploración previa. La idea de aplicar algún tipo de modelo es para hacer esto mucho más específico. En este caso lo haremos utilizamos la regresión lineal simple.

La regresión lineal simple

La regresión lineal simple lo que busca es utilizar una recta para ajustar los datos. Así, encontrar el mejor valor posible basándose en la información que tenemos.

Podemos modelar matemáticamente esta situación utilizando una ecuación. En esta ecuación incluir la medida de la
circunferencia, que es la cantidad que queremos saber, y además el número de días.

Vamos a establecer la relación lineal multiplicado el número de días por un valor a, que vamos a llamar pendiente, y sumado con un valor b, o intercepto. Esto es la ecuación más simple de la recta.

Fíjate que aquí no hemos dado todavía valores ni a ni a b. Estos valores podrían variar, lo esto nos lleva a pensar que hay muchos modelos. Esto se llama una familia de modelos. Los distintos valores que pueden tener a y b serían todas las posibles rectas.

Para encontrar el mejor modelo, se utilizan el método de mínimos cuadrados. Esto no lo vamos a ver en esta entrada pero podemos empezar a ver cómo se hace el análisis de regresión prescindiendo de esto.

Por ahora recuerda: La a es la pendiente o slope y la b es el intercepto.

Práctica en R

Para empezar vamos a cargar las librerías y datos

# cargando paquete para analizar datos
library(tidyverse)

# cargando datos a entorno
data("Orange")

Recuerda que puedes ver el encabezado de los datos haciendo head(Orange).

Ahora, para responder la pregunta inicial, vamos a hacer una gráfica exploratoria.

# problema/pregunta
# Cuanto medir? la circunferencias, en promedio, de
# un arbol de naranjas en a los 800 dias de plantarlo
Orange %>% 
  ggplot(aes(x = age,
             y = circumference)) +
  geom_point() 

Esto nos regresa

La tendencia lineal es clara. Podemos encontrar los valores óptimos de la recta con el comando lm, veamos

# "mejor" ajuste de regresión lineal simple
lm(circumference ~ age, data = Orange)

Esto nos da los siguientes valores: para la pendiente de 0.1068 y para el intercepto de 17.3997.

Podemos utilizar estos valores en una gráfica como la anterior para ver el resultado del modelo. También podemos trazar una línea vertical en 800 para calcular cuanto la circunferencia para estos días, al menos de forma empírica. El código:

Orange %>% 
  ggplot(aes(x = age,
             y = circumference)) +
  geom_point() +
  geom_abline(intercept = 17.3997,
              slope = 0.1068,
              col = 'blue') +
  geom_vline(xintercept = 800,
             col = 'red')

Lo que resulta en la gráfica:

Donde el valor sería cercano a 100. También podemos extraer el valor exacto de la circunferencia con el siguiente código:

dias <- 800
medida <- 0.1068 * dias + 17.3997
print(medida)

Obteniendo un valor de 102.8397. Esta respuesta es mucho más específica.

De esta forma, es posible entender porque los modelos estadísticos son tan útiles!

Conclusión

Espero que esta entrada te haya ayudado a entender un poco más sobre la regresión lineal simple y cómo puede usarse para ayudarte a modelar fenómenos numéricos.

Te mando un saludo donde quiera que estés!