Regresión lineal múltiple
library(pacman)
p_load("prettydoc", "DT", "xfun", "dplyr", "psych", "GGally", "ggplot2","readr")
La regresión lineal múltiple permite generar un modelo lineal en el que el valor de la variable dependiente o respuesta (Y) se determina a partir de un conjunto de variables independientes llamadas predictores X1X2X3.
Los modelos de regresión múltiple pueden emplearse para predecir el valor de la variable dependiente o para evaluar la influencia que tienen los predictores sobre ella (esto último se debe que analizar con cautela para no malinterpretar causa-efecto).
Los modelos lineales múltiples siguen la siguiente ecuación:
\[ Y_{i}=(\beta_{0}+\beta_{1}X_{1i}+\beta_{2}X_{2i}+\cdots+\beta_{n}X_{ni})+e_{i} \]
$ _{0} $ : es la ordenada en el origen, el valor de la variable dependiente Y cuando todos los predictores son cero.
$ _{i} $ : es el efecto promedio que tiene el incremento en una unidad de la variable predictora Xi sobre la variable dependiente Y manteniéndose constantes el resto de variables. Se conocen como coeficientes parciales de regresión.
$ e_{i} $ : es el residuo o error, la diferencia entre el valor observado y el estimado por el modelo.
Condiciones para la regresión lineal múltiple
Los modelos de correlación lineal múltiple requieren de las mismas condiciones que los modelos lineales simples más otras adicionales.
Parsimonia
Este término hace referencia a que el mejor modelo es aquel capaz de explicar con mayor precisión la variabilidad observada en la variable respuesta empleando el menor número de predictores, por lo tanto, con menos asunciones.
Tamaño de la muestra
No se trata de una condición de por sí pero, si no se dispone de suficientes observaciones, predictores que no son realmente influyentes podrían parecerlo. En el libro Hanbook of biological statistics recomiendan que el número de observaciones sea como mínimo entre 10 y 20 veces el número de predictores del modelo.
La gran mayoría de condiciones se verifican utilizando los residuos, por lo tanto, se suele generar primero el modelo y posteriormente validar las condiciones. De hecho, el ajuste de un modelo debe verse como un proceso iterativo en el que se ajusta el modelo, se evalúan sus residuos y se mejora. Así hasta llegar a un modelo óptimo.
Caso de estudio. Granja de Camarones
Las granjas acuícolas para la producción del crustáceo se han convertido en la industria de más rápido crecimiento dentro del sector primario y casi triplican ya a los volúmenes obtenidos por los métodos pesca en estero y en alta mar. Sinaloa y Sonora despuntan como las entidades de mayor desarrollo de camarón en cautiverio con 140 mil toneladas producidas en 2018. Un volumen de producción superior a las 70 mil toneladas de camarón de granja con valor superior a los 6 mil 600 millones de pesos es lo que se espera lograr a finales de 2020, posicionando a Sonora al frente a nivel nacional, además de la generación de empleos.
Por lo tanto, realizaremos un estudio para generar un modelo que permita predecir la produccion de una granja de camarones en función de diferentes variables. Se dispone de información sobre 12 estanques:
- Numero de estanque
- Superficie
- Dias activo
- Semanas activo
- Peso anterior
- Peso actual
- Tamaño del alimento
- Alimentos por semana
- Y Alimentos por dia
Imagen representativa de camarones
Datos
library(readr)
camarones <- read_csv("CasoCamarones.csv")
## Rows: 12 Columns: 6
## -- Column specification --------------------------------------------------------
## Delimiter: ","
## chr (1): Estanque
## dbl (5): Superficie, PesoActual, AlimentoSemana, AlimentoDiario, Vendido
##
## i Use `spec()` to retrieve the full column specification for this data.
## i Specify the column types or set `show_col_types = FALSE` to quiet this message.
datosCamarones <- as.data.frame(camarones)
datatable(datosCamarones)
- El monitoreo del crecimiento de los camarones de cada estanque fue durante 12 semanas, un requisito obligatorio para considerar que los camarones están en condiciones para ser vendidos es que pesen un mínimo de 12 gramos cada uno, este peso está representado en la tabla con la variable “PesoActual”, el cual indica el peso promedio de los camarones del estanque en relación a las a la comida que se les dio durante las 12 semanas, las cuales son representadas con las variables “AlimentoSemana” y “AlimentoDiario”. La variable “Vendido” estará marcada con un 1 si es que se cumplió con esta condición, de lo contrario estará marcada con un 0.
tabla <- table(camarones$Vendido)
tabla
##
## 0 1
## 9 3
- Solo 3 de los 12 estanques cumplieron con este requisito.
Grafica Ilustrada
colores <- NULL
colores[camarones$Vendido == 1] <- "green"
colores[camarones$Vendido == 0] <- "red"
plot(camarones$PesoActual, camarones$Exito, pch=21, bg=colores,
xlab="Peso Camaron", ylab="Probabilidades de venta")
## Warning: Unknown or uninitialised column: `Exito`.
legend('bottomleft', c('Vendido', 'No vendido'), pch = 21, col = c('green', 'red'))
Regresión logística
La variable AlimentoDiario sera implementada dentro del modelo de regresion logistica con el fin de determinar la hipotesis de si el venta es posible.
regresion <- glm(Vendido ~ AlimentoDiario, data = camarones, family=binomial)
summary(regresion)
##
## Call:
## glm(formula = Vendido ~ AlimentoDiario, family = binomial, data = camarones)
##
## Deviance Residuals:
## Min 1Q Median 3Q Max
## -1.28965 -0.68424 -0.39705 -0.00008 2.00729
##
## Coefficients:
## Estimate Std. Error z value Pr(>|z|)
## (Intercept) -35.1229 25.8776 -1.357 0.175
## AlimentoDiario 0.1194 0.0901 1.325 0.185
##
## (Dispersion parameter for binomial family taken to be 1)
##
## Null deviance: 13.496 on 11 degrees of freedom
## Residual deviance: 11.311 on 10 degrees of freedom
## AIC: 15.311
##
## Number of Fisher Scoring iterations: 5
Predicción con el modelo ajustado
Calculo de la probabilidad de fallo estimadas ediante la funcion logistica. utilizaremos un vector de alimentos entre 2750 y 290 kilos.
pred_nueva <- data.frame(AlimentoDiario = seq(270, 290, 1))
pred_nueva
## AlimentoDiario
## 1 270
## 2 271
## 3 272
## 4 273
## 5 274
## 6 275
## 7 276
## 8 277
## 9 278
## 10 279
## 11 280
## 12 281
## 13 282
## 14 283
## 15 284
## 16 285
## 17 286
## 18 287
## 19 288
## 20 289
## 21 290
Nuevas probabilidades
new_prob <- predict(regresion, pred_nueva, type="response")
new_prob
## 1 2 3 4 5 6 7
## 0.05242200 0.05867808 0.06562907 0.07333931 0.08187600 0.09130844 0.10170717
## 8 9 10 11 12 13 14
## 0.11314270 0.12568410 0.13939716 0.15434229 0.17057215 0.18812899 0.20704184
## 15 16 17 18 19 20 21
## 0.22732366 0.24896848 0.27194887 0.29621381 0.32168718 0.34826715 0.37582650
- Grafica representativa de probabilidad:
colores[camarones$Vendido == 1] <- "green"
colores[camarones$Vendido == 0] <- "red"
plot(camarones$AlimentoDiario, camarones$Vendido, pch=21, bg=colores,
xlab="Cantidad de alimento diario", ylab="Probabilidades de venta")
legend('bottomleft', c('Vendido', 'No vendido'), pch = 21, col = c('green', 'red'))
lines(pred_nueva$AlimentoDiario, new_prob, col="blue", lwd=1)