Se realiza la importación de los datos de frutas dañadas de una finca objeto de estudio, con la medición de variables meteorológicas como temperatura, humedad relativa, altura, velocidad del viento, latitud, longitud, presión barométrica y dirección del viento.
load("D:/Posgrado/2. Segundo semestre/1. Modelación dinÔmica espacial/10. Clase 27-04-2021/YDRAY-datos_fresno3.RData") # Datos de la fincha
head(datos_fresno3) #Solo los primeros 5 registros de cada variable
## Monitoreo Fruto_Total_Dano Temperature Relative_Humidity Altitude Wind_Speed
## 1 0021-08-20 0 25.7 33.6 1.896 0.8
## 2 0021-08-20 3 20.8 36.8 1.895 5.1
## 3 0021-08-20 0 23.7 31.5 1.889 0.8
## 4 0021-08-20 0 25.0 33.2 1.890 0.9
## 5 0021-08-20 1 25.0 34.3 1.894 0.6
## 6 0021-08-20 0 25.0 33.8 1.900 0.5
## Latitude Longitude Barometric_Pressure Crosswind
## 1 2.381290 -76.61264 805.0 0.2
## 2 2.381320 -76.61259 805.2 3.6
## 3 2.381353 -76.61254 805.7 0.4
## 4 2.381374 -76.61261 805.7 0.6
## 5 2.381335 -76.61266 805.2 0.4
## 6 2.381313 -76.61271 804.7 0.5
Los datos de estudio se representan el en siguiente mapa, en Colombia, en una finca ubicada cerca de PopayĆ”n. Para la representación se hace uso de la librerĆa leaflet.
require(leaflet)
## Loading required package: leaflet
leaflet() %>% addTiles() %>% addCircles(lng =datos_fresno3[,8],lat = datos_fresno3[,7] ,radius = 1,color = "#1ABC9C")
En el siguiente apartado, se observa el comportamiento de las variables, en función de las frutas dañadas.
# Se cargan las librerias ggplot2 y plotly
require(ggplot2)
require(plotly)
# Representacón de los datos de la finca mediante ggplot en relación a las frutas dañadas
map1=ggplot(datos_fresno3,aes(x=Longitude,y=Latitude,color=Fruto_Total_Dano,size=Fruto_Total_Dano))+geom_point()+theme_bw()+ggtitle("DaƱo de Frutos")
ggplotly(map1)
Se observa que las variables no presentan un comportamiento lineal en comparación a la variable de respuesta que son los frutos dañados, por lo cual, no es pertinente aplicar un modelo lineal. Igual manera en muchos casos las variables no se ajustan a una función en particular para tenerla en cuenta en el modelo, por tal motivo se requiere métodos no paramétricos que se ajusten a los datos, mediante funciona es de suavizado.
Los modelos aditivos generalizados para posición, escala y forma GAMLSS (Generalized Additive Models for Location, Scale and Shape), son modelos de regresión semi-paramĆ©tricos. ParamĆ©tricos en cuanto a que requieren asumir que la variable respuesta sigue una determinada distribución paramĆ©trica (normal, beta, gammaā¦) y semi porque los parĆ”metros de esta distribución pueden ser modelados, cada uno de forma independiente, siguiendo funciones no paramĆ©tricas: lineales, aditivas o no lineales (JoaquĆn Amat Rodrigo, 2020).
El modelo GAM, en cuanto a la estructura de R es similar, en la cual se relaciona una variable de respuesta con covariables, las cuales se le aplica una suavización representado por s() en el modelo.
require(mgcv)
mod1= gam(Fruto_Total_Dano~s(Temperature)+s(Relative_Humidity)+s(Altitude)+s(Wind_Speed)+s(Latitude)+s(Longitude)+s(Barometric_Pressure)+s(Crosswind),data=datos_fresno3,family = "poisson")
En el resumen del modelo, se observa los parĆ”metros con su respectivo nivel de significancia a diferentes alfas. En el cual, los parĆ”metros significativos con un p-valor menor a 0.0001 son la temperatura, humedad relativa, velocidad del viento, longitud, latitud y dirección del viento. La altura y la presión baromĆ©trica, los cuales entre ellos estĆ”n directamente correlacionados, no aportan significativamente el modelo, y se podrĆa pensar en excluirlos de este y volver a realizar el anĆ”lisis.
##
## Family: poisson
## Link function: log
##
## Formula:
## Fruto_Total_Dano ~ s(Temperature) + s(Relative_Humidity) + s(Altitude) +
## s(Wind_Speed) + s(Latitude) + s(Longitude) + s(Barometric_Pressure) +
## s(Crosswind)
##
## Parametric coefficients:
## Estimate Std. Error z value Pr(>|z|)
## (Intercept) -2.904 1.046 -2.776 0.0055 **
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Approximate significance of smooth terms:
## edf Ref.df Chi.sq p-value
## s(Temperature) 8.902 8.995 69.907 1.26e-11 ***
## s(Relative_Humidity) 8.286 8.856 64.898 1.21e-10 ***
## s(Altitude) 6.552 7.365 10.930 0.164
## s(Wind_Speed) 7.719 7.837 61.222 4.33e-08 ***
## s(Latitude) 8.613 8.957 204.481 < 2e-16 ***
## s(Longitude) 8.565 8.944 87.070 1.01e-14 ***
## s(Barometric_Pressure) 6.572 7.364 8.553 0.347
## s(Crosswind) 5.400 5.579 31.322 2.38e-05 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## R-sq.(adj) = 0.181 Deviance explained = 37.1%
## UBRE = 1.0986 Scale est. = 1 n = 788
El poder predictivo del modelo se evalúa mediante el Error Absoluto Medio o MAE por sus siglas en inglés y mediante el Error CuadrÔtico Medio de los residuales o RMSE. Aunque se puede interpretar como el margen de error del modelo, su mejor bondad es comparativa entre los modelos propuestos.
Error Absoluto Medio (MAE): 0.8
Error CuadrƔtico Medio (RMSE): 2.2
## # A tibble: 788 x 11
## Monitoreo Fruto_Total_Dano Temperature Relative_Humidi~ Altitude Wind_Speed
## <date> <dbl> <dbl> <dbl> <dbl> <dbl>
## 1 0021-08-20 0 25.7 33.6 1.90 0.8
## 2 0021-08-20 3 20.8 36.8 1.90 5.1
## 3 0021-08-20 0 23.7 31.5 1.89 0.8
## 4 0021-08-20 0 25 33.2 1.89 0.9
## 5 0021-08-20 1 25 34.3 1.89 0.6
## 6 0021-08-20 0 25 33.8 1.9 0.5
## 7 0021-08-20 0 24.9 34.9 1.9 0.6
## 8 0021-08-20 0 22.9 34.2 1.90 3.7
## 9 0021-08-20 0 26.2 33.6 1.90 0.5
## 10 0021-08-20 21 24.6 34 1.89 1
## # ... with 778 more rows, and 5 more variables: Latitude <dbl>,
## # Longitude <dbl>, Barometric_Pressure <dbl>, Crosswind <dbl>,
## # Fruto_Total_Dano_modelo <dbl>
Las predicciones del modelo GAM se puede observar en la siguiente grÔfica, en la cual, las predicciones de zonas con mayor cantidad de fruta dañada se concentra en la zona norte y sur de la finca, algo similar a los datos originales, sin embargo, la cantidad de frutos si difiere, llegando a una estimación mÔxima de 7.5 frutas en mal estado mientras que los datos originales llegan a los 25 frutos.
Los Ôrboles de regresión/clasificación fueron propuestos por Leo Breiman en el libro (Breiman et al. 1984) y son Ôrboles de decisión que tienen como objetivo predecir la variable respuesta Y en función de covariables.
El Ć”rbol presenta dos ramas, la primera involucra las variables de posicionamiento mĆ”s la velocidad del viento, lo cual puede indicar aquel patrón que representa la forma de dispersión de la enfermedad o plaga de los frutos, que pueden contagiarse por la cercanĆa y el impacto de los vientos como medio aerobio de transporte. La segunda ramificación, expresa las condiciones climatológicas en las que la enfermedad o plaga sobreviven, siendo las altas humedades relativas las de mayor injerencia.
require(rpart)
mod2= rpart(Fruto_Total_Dano~Temperature+Relative_Humidity+Altitude+Wind_Speed+Latitude+Longitude+Barometric_Pressure+Crosswind,data=datos_fresno3)
plot(mod2)
text(mod2, use.n = TRUE)
## # A tibble: 788 x 12
## Monitoreo Fruto_Total_Dano Temperature Relative_Humidi~ Altitude Wind_Speed
## <date> <dbl> <dbl> <dbl> <dbl> <dbl>
## 1 0021-08-20 0 25.7 33.6 1.90 0.8
## 2 0021-08-20 3 20.8 36.8 1.90 5.1
## 3 0021-08-20 0 23.7 31.5 1.89 0.8
## 4 0021-08-20 0 25 33.2 1.89 0.9
## 5 0021-08-20 1 25 34.3 1.89 0.6
## 6 0021-08-20 0 25 33.8 1.9 0.5
## 7 0021-08-20 0 24.9 34.9 1.9 0.6
## 8 0021-08-20 0 22.9 34.2 1.90 3.7
## 9 0021-08-20 0 26.2 33.6 1.90 0.5
## 10 0021-08-20 21 24.6 34 1.89 1
## # ... with 778 more rows, and 6 more variables: Latitude <dbl>,
## # Longitude <dbl>, Barometric_Pressure <dbl>, Crosswind <dbl>,
## # Fruto_Total_Dano_modelo <dbl>, Fruto_Total_Dano_modelo2 <dbl>
las estimaciones de este modelo, no son muy representativas del fenómeno, debido a que solo presenta como zona de contagio el norte de la finca, donde como se observaron en los casos reales, una parte del suroriente de la finca se vea impactado por las plagas o enfermedades a los frutos. Se observa algo que se veĆa representado en el Ć”rbol y es la presencia de frutos daƱados en el mismo sitio, por lo cual la representatividad de las variables latitud y longitud.
##Mapa de predicción de Daño en Frutos
map3=ggplot(datos_fresno3,aes(x=Longitude,y=Latitude,color=Fruto_Total_Dano_modelo2,size=Fruto_Total_Dano_modelo2))+geom_point()+theme_bw()+ggtitle("Arbol de Regresión")
ggplotly(map3)
#gridExtra::grid.arrange(map1,map2, map3, ncol = 1)
El proceso de clasificación mediante una MÔquina de Soporte Vectorial consta de 2 pasos: entrenamiento y clasificación donde en el primero se reconocen los patrones del conjunto de datos de entrenamiento con el fin de crear un modelo que luego serÔ empleado en la clasificación de nuevos datos.
Para este caso de anÔlisis, y bajo los parÔmetros de entrada al modelo brindados, no se presentan estimaciones precisas del fenómeno de estudio, en el cual el modelo solo identifica unas plantas en la zona norte y nororiente como dañadas.
require(e1071)
## Loading required package: e1071
mod3= svm(Fruto_Total_Dano~Temperature+Relative_Humidity+Altitude+Wind_Speed+Latitude+Longitude+Barometric_Pressure+Crosswind,data=datos_fresno3,kernel="polynomial",degree=10)
modelo3=predict(mod3)
datos_fresno3$Fruto_Total_Dano_modelo3=modelo3
datos_fresno3
## # A tibble: 788 x 13
## Monitoreo Fruto_Total_Dano Temperature Relative_Humidi~ Altitude Wind_Speed
## <date> <dbl> <dbl> <dbl> <dbl> <dbl>
## 1 0021-08-20 0 25.7 33.6 1.90 0.8
## 2 0021-08-20 3 20.8 36.8 1.90 5.1
## 3 0021-08-20 0 23.7 31.5 1.89 0.8
## 4 0021-08-20 0 25 33.2 1.89 0.9
## 5 0021-08-20 1 25 34.3 1.89 0.6
## 6 0021-08-20 0 25 33.8 1.9 0.5
## 7 0021-08-20 0 24.9 34.9 1.9 0.6
## 8 0021-08-20 0 22.9 34.2 1.90 3.7
## 9 0021-08-20 0 26.2 33.6 1.90 0.5
## 10 0021-08-20 21 24.6 34 1.89 1
## # ... with 778 more rows, and 7 more variables: Latitude <dbl>,
## # Longitude <dbl>, Barometric_Pressure <dbl>, Crosswind <dbl>,
## # Fruto_Total_Dano_modelo <dbl>, Fruto_Total_Dano_modelo2 <dbl>,
## # Fruto_Total_Dano_modelo3 <dbl>
##Mapa de predicción de Daño en Frutos
map4=ggplot(datos_fresno3,aes(x=Longitude,y=Latitude,color=Fruto_Total_Dano_modelo3,size=Fruto_Total_Dano_modelo3))+geom_point()+theme_bw()+ggtitle("Maquina de Soporte Vectorial")
ggplotly(map4)
#require(gridExtra)
#gridExtra::grid.arrange(map1,map2, map3,map4, ncol = 2)
Las Redes Neuronales son un campo muy importante dentro de la Inteligencia Artificial. InspirĆ”ndose en el comportamiento conocido del cerebro humano (principalmente el referido a las neuronas y sus conexiones), trata de crear modelos artificiales que solucionen problemas difĆciles de resolver mediante tĆ©cnicas algorĆtmicas convencionales.
require(neuralnet)
## Loading required package: neuralnet
datos_fresno4=datos_fresno3
datos_fresno4[,3:10]=scale(datos_fresno4[,3:10])
datos_fresno4=data.frame(datos_fresno4)
mod4= neuralnet(Fruto_Total_Dano~Temperature+Relative_Humidity+Altitude+Wind_Speed+Latitude+Longitude+Barometric_Pressure+Crosswind,hidden = c(1),data=datos_fresno4)
plot(mod4)
modelo4=predict(mod4,datos_fresno4)
datos_fresno4$Fruto_Total_Dano_modelo4=modelo4
##Mapa de predicción de Daño en Frutos
map5=ggplot(datos_fresno4,aes(x=Longitude,y=Latitude,color=Fruto_Total_Dano_modelo4,size=Fruto_Total_Dano_modelo4))+geom_point()+theme_bw()+ggtitle("Red Neuronal")
ggplotly(map5)
La red neuronal tiene mejores estiamciones que la maquina vectorial, estimando almenos, en la identificación de dos zoans de impacto por la enfermedad o plaga en los frutos, que son la zona norte y sur de la finca. Sin embargo, nos limiamos a la elecciónd e parametros de entrada no ajustados ala necesidad del problema y por ende, la poca eficiencia en sus estimaciones.
Los 4 modelos GAM, Arbol de regresión, Maquina de soporte vectorial, Red neuronal, se crean con la finalidad de poder predecir los frutos dañados por una enfermedad o plaga, basados en variables de posicionamiento y meteorológicas, donde el modelo GAM es el que mejor resultados presenta, en comparación a los datos originales. Los modelos de predicciones mas imprecisas son el MSV y la Red Neuronal, pero esto debido al poco desarrollo del modelo y sus parÔmetros de entrada. Aunque el modelo GAM tiene mejores estimaciones en cuanta a ubicación, en la magnitud de cantidad de furtos dañados, el único modelo que se acerca a la realidad es el modelo de maquina vectorial, llegando al orden de los 20 frutos dañados, cinco menos que los datos reales.
ggplotly(map1)
require(gridExtra)
gridExtra::grid.arrange(map2,map3,map4,map5, ncol = 2)