Primer evaluacón de estado de la materia de probabilidad y estadística para ingeniería de software
Caso de estudio 1: Acuacultura
Datos
library(pacman)
p_load("base64enc", "htmltools", "mime", "xfun", "prettydoc", "readr", "knitr", "DT", "scales", "tidyverse", "gridExtra", "modeest" , "fdth")
CAMARONES <- read_csv("CAMARONES.csv")## Parsed with column specification:
## cols(
## Estanque = col_character(),
## EstanqueN = col_double(),
## Superficie = col_double(),
## Dias = col_double(),
## Semana = col_double(),
## PesoAnterior = col_double(),
## PesoActual = col_double(),
## TamanioAlimento = col_double(),
## AlimentoSemana = col_double(),
## AlimentoDiario = col_double(),
## PesoDeseado = col_double(),
## AlimentoSemanaPrueba = col_double()
## )
## # A tibble: 6 x 12
## Estanque EstanqueN Superficie Dias Semana PesoAnterior PesoActual
## <chr> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
## 1 Estanqu~ 1 5 14 2 0.145 0.77
## 2 Estanqu~ 2 5 14 2 0.153 0.78
## 3 Estanqu~ 3 5 14 2 0.149 0.69
## 4 Estanqu~ 4 5 14 2 0.154 0.72
## 5 Estanqu~ 5 5 14 2 0.166 0.61
## 6 Estanqu~ 6 5 14 2 0.215 0.62
## # ... with 5 more variables: TamanioAlimento <dbl>, AlimentoSemana <dbl>,
## # AlimentoDiario <dbl>, PesoDeseado <dbl>, AlimentoSemanaPrueba <dbl>
Se tienen 12 semanas de datos de 12 estanques en los cuales a partir de la semana número 2 se empiezan a pesar los camarones en crecimiento, también se cuantifica su nivel de comida.
En terminos ideales los 12 estanques tendrían que llegar a la semana número 12 a 12 gramos para poder entonces realizar la “Cosecha”, pero unicamente 3 de los 12 estanques llegaron a este peso.
¿Por qué es un problema? Dado a que se tendra que invertir una semana (o más) para poder llegar al peso ideal, y esto supone una pérdida de dinero
- Preguntas a responder
- Haga un planteamiento del problema a resolver con estadistica y realice una descripción exploratoria de los datos (Media, Moda y Mediana, Medidas de Disperción, Caja de gato y Bigotes)
###Semana 1
datosSemana1 <- t(CAMARONES$PesoAnterior)
datosSemana1 <- as.vector(datosSemana1)
datosSemana1 <- datosSemana1[1:12]
#Variancia / que tanto varian entre los mismos datos
varianza <- var(datosSemana1)
paste("La varianza de los pesos de la semana 1 es", varianza)## [1] "La varianza de los pesos de la semana 1 es 0.000828151515151515"
#Desviación Estandar / que tan lejos estan del medio
desviacion <- sd(datosSemana1)
paste("La Desviación Estandar de los pesos de la semana 1 es", desviacion)## [1] "La Desviación Estandar de los pesos de la semana 1 es 0.0287776217771989"
## [1] "La media de los pesos de la semana 1 es 0.159833333333333"
## [1] "La mediana de los pesos de la semana 1 es 0.152"
## [1] "La moda de los pesos de la semana 1 es 0.145"
Vemos que en la primera semana tenemos una media bastante pequeña, sin embargo ignorando eso vemos como hay dos estanques atipicos a los datos, pesando mas que el resto
###Semana 2
datosSemana2 <- t(CAMARONES$PesoActual)
datosSemana2 <- as.vector(datosSemana2)
datosSemana2 <- datosSemana2[1:12]
#Variancia / que tanto varian entre los mismos datos
varianza <- var(datosSemana2)
paste("La varianza de los pesos de la semana 2 es", varianza)## [1] "La varianza de los pesos de la semana 2 es 0.00402424242424242"
#Desviación Estandar / que tan lejos estan del medio
desviacion <- sd(datosSemana2)
paste("La Desviación Estandar de los pesos de la semana 2 es", desviacion)## [1] "La Desviación Estandar de los pesos de la semana 2 es 0.0634369168879007"
## [1] "La media de los pesos de la semana 2 es 0.673333333333333"
## [1] "La mediana de los pesos de la semana 2 es 0.665"
## [1] "La moda de los pesos de la semana 2 es 0.62"
En la semana 2 vemos que los pesos se regularon de mejor manera, siendo el mas pequeño de 0.6, obviamente la media aumento y los datos atipicos se integraron a lo esperado
###Semana 3
datosSemana3 <- t(CAMARONES$PesoActual)
datosSemana3 <- as.vector(datosSemana3)
datosSemana3 <- datosSemana3[13:24]
#Variancia / que tanto varian entre los mismos datos
varianza <- var(datosSemana3)
paste("La varianza de los pesos de la semana 3 es", varianza)## [1] "La varianza de los pesos de la semana 3 es 0.0231537878787879"
#Desviación Estandar / que tan lejos estan del medio
desviacion <- sd(datosSemana3)
paste("La Desviación Estandar de los pesos de la semana 3 es", desviacion)## [1] "La Desviación Estandar de los pesos de la semana 3 es 0.15216368777993"
## [1] "La media de los pesos de la semana 3 es 1.46083333333333"
## [1] "La mediana de los pesos de la semana 3 es 1.41"
## [1] "La moda de los pesos de la semana 3 es 1.32"
Podemos ver que en esta semana algunos estanques crecieron mas en base al peso que otros, esto puede ser por la comida, el tamaño de la comida, entre otras cosas
###Semana 4
datosSemana4 <- t(CAMARONES$PesoActual)
datosSemana4 <- as.vector(datosSemana4)
datosSemana4 <- datosSemana4[25:36]
#Variancia / que tanto varian entre los mismos datos
varianza <- var(datosSemana4)
paste("La varianza de los pesos de la semana 4 es", varianza)## [1] "La varianza de los pesos de la semana 4 es 0.0484454545454545"
#Desviación Estandar / que tan lejos estan del medio
desviacion <- sd(datosSemana4)
paste("La Desviación Estandar de los pesos de la semana 4 es", desviacion)## [1] "La Desviación Estandar de los pesos de la semana 4 es 0.220103281541767"
## [1] "La media de los pesos de la semana 4 es 2.045"
## [1] "La mediana de los pesos de la semana 4 es 2.055"
## [1] "La moda de los pesos de la semana 4 es 2.03"
En la semana 4 los datos de los pesos se estabilizaron bastante, dejando una media bastante esperanzadora conforme al crecimiento de peso de los estanques, sin embargo vemos que algunos se encuentran aun muy ligeros
###Semana 5
datosSemana5 <- t(CAMARONES$PesoActual)
datosSemana5 <- as.vector(datosSemana5)
datosSemana5 <- datosSemana5[37:48]
#Variancia / que tanto varian entre los mismos datos
varianza <- var(datosSemana5)
paste("La varianza de los pesos de la semana 5 es", varianza)## [1] "La varianza de los pesos de la semana 5 es 0.0700083333333333"
#Desviación Estandar / que tan lejos estan del medio
desviacion <- sd(datosSemana5)
paste("La Desviación Estandar de los pesos de la semana 5 es", desviacion)## [1] "La Desviación Estandar de los pesos de la semana 5 es 0.26459087915749"
## [1] "La media de los pesos de la semana es 3.16083333333333"
## [1] "La mediana de los pesos de la semana es 3.095"
## [1] "La moda de los pesos de la semana es 3.13"
Los datos se acomodaron de tal manera que vemos que mas estanques crecieron en base a su peso, lo cual es bueno para el negocio
###Semana 6
datosSemana6 <- t(CAMARONES$PesoActual)
datosSemana6 <- as.vector(datosSemana6)
datosSemana6 <- datosSemana6[49:60]
#Variancia / que tanto varian entre los mismos datos
varianza <- var(datosSemana6)
paste("La varianza de los pesos de la semana 6 es", varianza)## [1] "La varianza de los pesos de la semana 6 es 0.167929545454545"
#Desviación Estandar / que tan lejos estan del medio
desviacion <- sd(datosSemana6)
paste("La Desviación Estandar de los pesos de la semana 6 es", desviacion)## [1] "La Desviación Estandar de los pesos de la semana 6 es 0.409792075880617"
## [1] "La media de los pesos de la semana 6 es 4.0675"
## [1] "La mediana de los pesos de la semana 6 es 4.07"
## [1] "La moda de los pesos de la semana 6 es 4.25"
En esta semana 6 vemos que los datos se desalinearon, podemos ver que un estanque es atipico en el peso, creciendo mas que el resto, esto probablemente por la comida, mientras que los demas se notan entre una distancia favorable de la media sin embargo hay otros estanques que siguen estando muy ligeros
###Semana 7
datosSemana7 <- t(CAMARONES$PesoActual)
datosSemana7 <- as.vector(datosSemana7)
datosSemana7 <- datosSemana7[61:72]
#Variancia / que tanto varian entre los mismos datos
varianza <- var(datosSemana7)
paste("La varianza de los pesos de la semana 7 es", varianza)## [1] "La varianza de los pesos de la semana 7 es 0.180151515151515"
#Desviación Estandar / que tan lejos estan del medio
desviacion <- sd(datosSemana7)
paste("La Desviación Estandar de los pesos de la semana 7 es", desviacion)## [1] "La Desviación Estandar de los pesos de la semana 7 es 0.424442593469971"
## [1] "La media de los pesos de la semana es 4.63333333333333"
## [1] "La mediana de los pesos de la semana es 4.675"
## [1] "La moda de los pesos de la semana es 4.32"
En la Semana 7 el patron regular se perdio, y la comida se fue dando de manera desigual, lo que genero perdida en el peso, ya que aqui la media se ve que ya no sigue su crecimiento lineal de 1, sino que parece ser que subio poco menos que ese entero
###Semana 8
datosSemana8 <- t(CAMARONES$PesoActual)
datosSemana8 <- as.vector(datosSemana8)
datosSemana8 <- datosSemana8[73:84]
#Variancia / que tanto varian entre los mismos datos
varianza <- var(datosSemana8)
paste("La varianza de los pesos de la semana 8 es", varianza)## [1] "La varianza de los pesos de la semana 8 es 0.228187878787879"
#Desviación Estandar / que tan lejos estan del medio
desviacion <- sd(datosSemana8)
paste("La Desviación Estandar de los pesos de la semana 8 es", desviacion)## [1] "La Desviación Estandar de los pesos de la semana 8 es 0.47769014935194"
## [1] "La media de los pesos de la semana 8 es 5.81666666666667"
## [1] "La mediana de los pesos de la semana 8 es 5.765"
## [1] "La moda de los pesos de la semana 8 es 5.33"
En la semana vemos que hubo un crecimiento mayor en la media, sin embargo no fue suficiente ya que muchos estanques o la mayoria se encuentran en un mayor porcentaje debajo de la media
###Semana 9
datosSemana9 <- t(CAMARONES$PesoActual)
datosSemana9 <- as.vector(datosSemana9)
datosSemana9 <- datosSemana9[85:96]
#Variancia / que tanto varian entre los mismos datos
varianza <- var(datosSemana9)
paste("La varianza de los pesos de la semana 9 es", varianza)## [1] "La varianza de los pesos de la semana 9 es 0.231636363636364"
#Desviación Estandar / que tan lejos estan del medio
desviacion <- sd(datosSemana9)
paste("La Desviación Estandar de los pesos de la semana 9 es", desviacion)## [1] "La Desviación Estandar de los pesos de la semana 9 es 0.48128615566663"
## [1] "La media de los pesos de la semana 9 es 6.61"
## [1] "La mediana de los pesos de la semana 9 es 6.52"
## [1] "La moda de los pesos de la semana 9 es 7.64"
De nuevo un crecimiento desigual, con mas datos a favor de la media superior, viendo como estos se encuentran por ariba, con varios estanques pesando mayor a 6.7
###Semana 10
datosSemana10 <- t(CAMARONES$PesoActual)
datosSemana10 <- as.vector(datosSemana10)
datosSemana10 <- datosSemana10[97:108]
#Variancia / que tanto varian entre los mismos datos
varianza <- var(datosSemana10)
paste("La varianza de los pesos de la semana 10 es", varianza)## [1] "La varianza de los pesos de la semana 10 es 0.235099242424243"
#Desviación Estandar / que tan lejos estan del medio
desviacion <- sd(datosSemana10)
paste("La Desviación Estandar de los pesos de la semana 10 es", desviacion)## [1] "La Desviación Estandar de los pesos de la semana 10 es 0.484870335681863"
## [1] "La media de los pesos de la semana 10 es 8.32583333333333"
## [1] "La mediana de los pesos de la semana 10 es 8.17"
## [1] "La moda de los pesos de la semana 10 es 9.46"
Aqui vemos un crecimiento mayor a el resto de las semanas hasya ahora haciendo que la mayoria de los estanques llegaran a pesar bastante, aunque esto puede ser ocasionado por la comida servida de forma irregular
###Semana 11
datosSemana11 <- t(CAMARONES$PesoActual)
datosSemana11 <- as.vector(datosSemana11)
datosSemana11 <- datosSemana11[109:120]
#Variancia / que tanto varian entre los mismos datos
varianza <- var(datosSemana11)
paste("La varianza de los pesos de la semana 11 es", varianza)## [1] "La varianza de los pesos de la semana 11 es 0.216662878787879"
#Desviación Estandar / que tan lejos estan del medio
desviacion <- sd(datosSemana11)
paste("La Desviación Estandar de los pesos de la semana 11 es", desviacion)## [1] "La Desviación Estandar de los pesos de la semana 11 es 0.465470599273336"
## [1] "La media de los pesos de la semana 11 es 9.83083333333333"
## [1] "La mediana de los pesos de la semana 11 es 10.035"
## [1] "La moda de los pesos de la semana 11 es 10.36"
En esta penultima semana los estanques parecen cesar un poco al crecimiento del peso, sin embargo el crecimiento de peso que sufrieron no fue poco, ya que vemos como muchos estanques superaron los 9 gramos, siendo la media de casi 10
###Semana 12
datosSemana12 <- t(CAMARONES$PesoActual)
datosSemana12 <- as.vector(datosSemana12)
datosSemana12 <- datosSemana12[121:132]
#Variancia / que tanto varian entre los mismos datos
varianza <- var(datosSemana12)
paste("La varianza de los pesos de la semana 12 es", varianza)## [1] "La varianza de los pesos de la semana 12 es 0.230626515151515"
#Desviación Estandar / que tan lejos estan del medio
desviacion <- sd(datosSemana12)
paste("La Desviación Estandar de los pesos de la semana 12 es", desviacion)## [1] "La Desviación Estandar de los pesos de la semana 12 es 0.480235895317619"
## [1] "La media de los pesos de la semana 12 es 11.5441666666667"
## [1] "La mediana de los pesos de la semana 12 es 11.575"
## [1] "La moda de los pesos de la semana 12 es 12.18"
Lastimosamente podemos ver que la mayoria de los estanques no llegaron al peso deseado, siendo que solo 3 estanques de 12 llegaron a este peso deseado, esto nos deja con muchas incognitas de el porque, puede ser que la comida sea un factor importante para esto, ya que a partir de la semana 7 se empezo a dar comida de manera iregular
- ¿Qué tienen de diferentes los estanques que si llegaron a 12 gramos en la semana 12 con respecto a los que no?.
datosSemana9 <- t(CAMARONES$AlimentoSemana)
datosSemana9 <- as.vector(datosSemana9)
datosSemana9 <- datosSemana9[85:96]
datosSemana9## [1] 1095 1070 1130 1055 1005 1085 1105 1060 1140 1115 1045 1050
A partir de esta semana los encargados del alimento empezaron a dar comida desproporcionada y dispareja a como usualmente se estaba realizando
datosSemana10 <- t(CAMARONES$AlimentoSemana)
datosSemana10 <- as.vector(datosSemana10)
datosSemana10 <- datosSemana10[97:108]
datosSemana10## [1] 1305 1240 1375 1440 1415 1340 1370 1350 1350 1500 1450 1325
Podemos ver que siguieron el mismo comportamiento al no dar comida de manera precisa, sino que la sirvieron de manera inconforme o no uniforme a las anteriores semanas
datosSemana11 <- t(CAMARONES$AlimentoSemana)
datosSemana11 <- as.vector(datosSemana11)
datosSemana11 <- datosSemana11[109:120]
datosSemana11## [1] 1450 1225 1600 1825 1650 1600 1950 1975 1175 1975 1925 1350
Igualmente vemos que no sigue un patron, por lo que nuevamente la comida es incoonsistentemente distribuida en los estanques de camarones
datosSemana12 <- t(CAMARONES$AlimentoSemana)
datosSemana12 <- as.vector(datosSemana12)
datosSemana12 <- datosSemana12[121:132]
datosSemana12## [1] 1950 1900 1975 2000 1900 1975 1925 2050 2025 1900 2075 2075
Todos los estanques sufren de diferencias en como crecen, esto ya que no crecen de fomra lineal, ya que son seres vivos y varias condiciones se escapan de cierto control, esto da a lugar a que no se pueda predecir precisamente los que terminaran con un peso de 12 gramos aunque se les administren diferente cantidad de alimentos
- ¿Con que variables se relaciona el aumento de los camarones?(regresion lineal, residuos, confianza).
- Matríz de diagramas de dispersión
#Tomamos las columnas que necesitamos (En este caso se relacionan mas las del peso)
#pairs(CAMARONES[2:10])
filtro <- (CAMARONES[7:9])
pairs(filtro)Vemos que de alguna manera parece ser que el peso actual de los camarones esta relacionado con el alimento total que le dan en la semana
Coeficiente de relación
## PesoActual TamanioAlimento AlimentoSemana
## PesoActual 1.0000000 0.8805769 0.9514703
## TamanioAlimento 0.8805769 1.0000000 0.8484229
## AlimentoSemana 0.9514703 0.8484229 1.0000000
Podemos ver que en efecto, el porcentaje de relacion que tiene el peso actual con el alimento total de la semana es de: 95%
Recta de minímos cuadrados
##
## Call:
## lm(formula = AlimentoSemana ~ PesoActual, data = filtro)
##
## Residuals:
## Min 1Q Median 3Q Max
## -526.00 -89.86 9.59 90.77 380.46
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 285.864 24.864 11.50 <2e-16 ***
## PesoActual 139.697 3.963 35.25 <2e-16 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 153.7 on 130 degrees of freedom
## Multiple R-squared: 0.9053, Adjusted R-squared: 0.9046
## F-statistic: 1243 on 1 and 130 DF, p-value: < 2.2e-16
Con base a lo estimado en el análisis de regresión lineal, obtenemos la ecuacion de la recta de mínimos cuadrados
\[ y = 285.864 + 139.697x\] ### Gráfica de la recta de mínimos cuadrados
plot(filtro$PesoActual, filtro$AlimentoSemana, xlab = "Peso actual de camarones", ylab = "Alimento total de la semana")
abline(regresion)Inferencia en el modelo de regresion simple
- Suponemos ahora que los datos proceden de un modelo de regresion simple de la forma
\[ y_i = \beta_0 + \beta_1 x_i + \epsilon_i, \ \ \ \ i=1,\ldots,n, \]
Donde: * Los errores aleatorios \(\epsilon_i\) son independientes con distribucion normal 0 y varianza \(\sigma^2\)
- los errores tipicos de los stimadores de los parametros $ _0 y _1$ se encuentran en columna std. Error serían de manera correspondiente 24.864 y 3.963
Cálculo del nivel de confianza
- Intervalo de confianza para el 95% de los datos
## 2.5 % 97.5 %
## (Intercept) 236.6740 335.0544
## PesoActual 131.8572 147.5372
- Intervalo de confianza para el 90% de los datos
## 5 % 95 %
## (Intercept) 244.6733 327.0552
## PesoActual 133.1322 146.2623
Representación gráfica de los intervalos de confianza
nuevos.pesos <- data.frame(PesoActual = seq(2,12))
# Gráfico de dispersion y recta
plot(filtro$PesoActual, filtro$AlimentoSemana, xlab = "Peso Actual", ylab = "Alimento total de la semana")
abline(regresion)
# Intervalos de confianza de la respuesta media
# ip es una matriz con tres columnas
# La primera es la predicción y las otras son los extremos del intervalo
ic <- predict(regresion, nuevos.pesos, interval = "confidence")
lines(nuevos.pesos$PesoActual, ic[,2], lty=2, col = "blue")
lines(nuevos.pesos$PesoActual, ic[,3], lty=2, col = "blue")
#Intervalos de predicción
ip <- predict(regresion, nuevos.pesos, interval = "prediction")
lines(nuevos.pesos$PesoActual, ip[,2], lty=2, col = "red")
lines(nuevos.pesos$PesoActual, ip[,3], lty=2, col = "red")Vemos que el intervalo de confianza esta muy pegado a la recta, quiere decir que es muy confiable a los datos que estamos comparando, pero el de predicción, esta muy separado lo que nos dice que no acerto precisamente a los datos analizados
- ¿Los camarones que iniciaron con mayor peso (semana 2) son también los que terminaron en mayor peso? ¿Cómo varia el crecimiento?.
No, el crecimiento parece depender de la cantidad de comida, pero no es seguro debido a los diferentes factores no controlables de los camarones, ejemplo, su “actividad fisica”, que camarones comieron, digestion, enfermedades, etc.
- Realizar un ánalisis de regresión logística para determinar que hace que los camarones lleguen a 12 gramos.
- Frecuencias de valores
## Warning: The `i` argument of ``[.tbl_df`()` must lie in [0, rows] if positive, as of tibble 3.0.0.
## Use `NA_integer_` as row index to obtain a row full of `NA` values.
## This warning is displayed once every 8 hours.
## Call `lifecycle::last_warnings()` to see where this warning was generated.
##
## 0 1
## 9 3
Podemos ver que en la semana 12 de los 12 estanques solo 3 lograron el peso deseado
Representación gráfica de los valores y su relación con la comida
colores <-NULL
colores[filtro$PesoDeseado == 0] <- "red"
colores[filtro$PesoDeseado == 1] <- "green"
plot(filtro$AlimentoSemanaPrueba, filtro$PesoDeseado, pch = 21, bg = colores, xlab = "Alimento Total Semanal", ylab = "Estanques que consiguieron el peso deseado")
legend('topleft', c('No Logrado', 'Logrado'), pch = 21, col = c('red', 'green'))Podemos ver que a mayor cantidad de alimento, es mas probable que aumenten de peso, pero no esta cien porciento garantizado ya que no se toman en cuenta otros tipos de factores externos que escapan de nuestro control
- Modelo de regresión logística (familia binaria)
##
## Call:
## glm(formula = PesoDeseado ~ AlimentoSemanaPrueba, family = binomial,
## data = filtro)
##
## 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.12289 25.87759 -1.357 0.175
## AlimentoSemanaPrueba 0.01705 0.01287 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
## (1 observation deleted due to missingness)
## AIC: 15.311
##
## Number of Fisher Scoring iterations: 5
datos <- data.frame(AlimentoSemanaPrueba = seq(1800,2100))
probabilidades <- predict(reg,datos,type = "response")
plot(filtro$AlimentoSemanaPrueba, filtro$PesoDeseado, pch = 21, bg = colores, xlab = "Alimento Total Semanal", ylab = "Estanques que consiguieron el peso deseado")
legend('topleft', c('No Logrado', 'Logrado'), pch = 21, col = c('red', 'green'))
#originalmente era temp pero da error
lines(datos$AlimentoSemanaPrueba, probabilidades, col="red", lwd = 4)Según la linea de probabilidad, en efecto si se alimenta con mas cantidad de comida sube la probabilidad de que pesen mas los camarones alimentados