Multiple lineal regression (I)

Cuando hablamos de modelos de regresion estamos hablando acerca de analizar relaciones entre variables numericas. Que es regresion? es entender las relaciones entre una variable dependiente (que sera el valor a ser predecido) y una o mas variables independientes (las variables predictoras). La forma mas simple de regresion asume una relacion lineal entre una variable independiente y dependiente.

Regresion lineal multiple

Muchos analisis utilizados en la vida real incluyen mas de una variable independiente. Esto tiene como principal beneficio que trabajar con mas de una variable independiente permite adaptar el modelo a casi cualquier tarea. Aun asi se mantinen algunas restricciones basicas:  el dataset tiene que estar completo (no permite trabajar con missing values), y todos los elementos que formen parte de la regresion deben ser numericos.

Caso practico: Prediccion de gastos medicos usando regresion lineal

Tomando un grupo de variables muy reducido nos gustaria analizar cual sera el posible gasto medico dado el perfil de un usuario. Nuestro dataset se compone de las siguientes variables:

  • Age: Variable continua y numerica.
  • Sex: Female / Male. Variable discreta.
  • BMI: Variable continua y numerica. Numeros mayores a 30 se consideran un riesgo para la salud, es probable que nuestro dataset nos muestre que a mayor peso existe una mayor incidencia de enfermedades lo que nos da un mayor probable gasto en insurance.
  • Children: Variable discreta y numerica. Es probable que exista una correlacion entre children > 0 y mayor pago de insurance… lo cual es logico!
  • Smoker: Yes / No. Discreta.
  • Region: Se divide el pais en cuatro regiones. Variable discreta.
  • Charges: Monto total a pagar.

Analisis

Para poder encontrar una funcion de regresion lineal que permita ajustar los datos, podemos usar la funcion lm(). En base a la funcion que se cree, vamos a poder usar la misma para realizar predicciones.

Implementacion tecnica

Trabajo con los datos

library(readr)
library(psych)
library(stats)
## Step 1. Get data
url_data <- "https://raw.githubusercontent.com/stedy/Machine-Learning-with-R-datasets/master/insurance.csv"
insurance <- read_csv(url(url_data))

## Step 2. Analyzing data
str(insurance)
summary(insurance$charges)
# Min.    1st Qu.   Median    Mean    3rd Qu.     Max. 
# 1122    4740      9382      13270   16640       63770 

hist(insurance$charges)
table(insurance$region)
# northeast   northwest   southeast   southwest 
# 324         325         364         325 

## 2.1 Exploring relationships among features - correlation matrix
cor(insurance[c("age","bmi","children",'charges')])
pairs(insurance[c("age","bmi","children",'charges')])
pairs.panels(insurance[c("age","bmi","children",'charges')])

En este punto ya se realizo un analisis de los datos donde se observo que existe correlacion entre las variables , y .

Implementacion del modelo

## Step 4: Evaluating the model
ins_model
# Call:
#   lm(formula = charges ~ ., data = insurance)
# 
# Coefficients:
#   (Intercept)               age                   sexmale                 
#   -11938.5                  256.9                 -131.3                         
#   bmi                       children              smokeryes
#   339.2                     475.5                 23848.5
#   regionnorthwest           regionsoutheast       regionsouthwest  
#   -353.0                    -1035.0               -960.1  

summary(ins_model)
# Call:
#   lm(formula = charges ~ ., data = insurance)
# 
# Residuals:
#   Min       1Q   Median       3Q      Max 
# -11304.9  -2848.1   -982.1   1393.9  29992.8 
# 
# Coefficients:
#   Estimate      Std. Error          t   value   Pr(>|t|)    
#   (Intercept)     -11938.5      987.8  -12.086  < 2e-16 ***
#   age                256.9       11.9   21.587  < 2e-16 ***
#   sexmale           -131.3      332.9   -0.394 0.693348    
#   bmi                339.2       28.6   11.860  < 2e-16 ***
#   children           475.5      137.8    3.451 0.000577 ***
#   smokeryes        23848.5      413.1   57.723  < 2e-16 ***
#   regionnorthwest   -353.0      476.3   -0.741 0.458769    
#   regionsoutheast  -1035.0      478.7   -2.162 0.030782 *  
#   regionsouthwest   -960.0      477.9   -2.009 0.044765 *  
#   ---
#   Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
# 
# Residual standard error: 6062 on 1329 degrees of freedom
# Multiple R-squared:  0.7509,	Adjusted R-squared:  0.7494 
# F-statistic: 500.8 on 8 and 1329 DF,  p-value: < 2.2e-16

Conclusiones

Desde el punto de vista tecnico, la implementacion del modelo de regresion lineal es sumamente simple, sin embargo el analisis posterior del modelo requiere tener cierto conocimiento de estadistica de forma de poder realizar una correcta evaluacion del modelo y proponer las mejoras necesarias.

  • Residual section: es una seccion que provee el resumen estadistico para los errores de nuestra prediccion, ahora analizemos que nos dice:
    • Max: 29.981.7, quiere decir que al menos en un caso el modelo predijo casi 30.000 de menos.
    • 1Q + 3Q, es decir el 50% de los errores esta entre sobreestimar 2.850, y subestimar en 1383.9 por debajo de su valor real.
    • Cada uno de los coeficientes indica cuanto mas se incrementa el costo, por cada uno de las caracteristicas del cliente (con hijos, sin hijos, fuma, no fuma…)
  • Multiple R Squared (Coeficiente de determinacion): nos da una medida de que tan bien nuestro modelo puede calcular la variable dependiente. En este caso nos da 75%, esto es, en el 75% de los casos nuestro modelo explica la data.

En la vida real, un modelo con un valor del 75% de coeficiente de determinacion seria un muy buen modelo, ahora bien con fines academicos, podemos pensar en como mejorar nuestro modelo 

Bibliografia

Machine Learning with R by Brett Lantz