#Se desarrolla un ejercicio de modelación con covariables cuyo objetivo principal de la práctica es analizar la incidencia de las plagas en los cultivos de frutos. En el set de datos se puede ver la cantidad de frutos dañados por árbol, cada un registro cuenta la información de la ubicación e información climatológica de temperatura, humedad relativa, velocidad del viento, presión barométrica las cuales están asociadas a con la presencia de los insectos en el cultivo.

Caso de Estudio Modelo para Daño en Frutos

load("D:/ESPECIALIZACION/SEMESTRE_2/Model_Dinamica_Espacial/Clase10_asincronica/datos_fresno3.RData")
#datos_fresno3

require(ggplot2)
## Loading required package: ggplot2
require(plotly)
## Loading required package: plotly
## 
## Attaching package: 'plotly'
## The following object is masked from 'package:ggplot2':
## 
##     last_plot
## The following object is masked from 'package:stats':
## 
##     filter
## The following object is masked from 'package:graphics':
## 
##     layout
##Explorar la zona de estudio
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)
##Comportamiento del Daño
#fig1=ggplot(datos_fresno3,aes(x=Fruto_Total_Dano))+geom_bar()+theme_bw()
#ggplotly(fig1)

##Relacionar Daño vs Temperatura
fig2=ggplot(datos_fresno3,aes(x=Temperature,y=Fruto_Total_Dano))+geom_smooth(se = FALSE)+theme_bw()
ggplotly(fig2)
## `geom_smooth()` using method = 'loess' and formula 'y ~ x'
##Relacionar Daño vs Humedad Relativa
fig3=ggplot(datos_fresno3,aes(x=Relative_Humidity,y=Fruto_Total_Dano))+geom_smooth(se = FALSE)+theme_bw()
ggplotly(fig3)
## `geom_smooth()` using method = 'loess' and formula 'y ~ x'
#Realizando una representación de la distribución de los árboles de la zona se encuentra que en la mayoría de los casos los cultivos ubicados en la parte bajan se presenta mayor afectación en sus frutos debido las condiciones del clima en dicho sector. 

#Al analizar la temperatura vs el daño del fruto se puede visualizar la presencia del insecto a temperaturas alrededor entre los 28° y 30°C. De igual manera al realizar el análisis con la humedad relativa se visualiza un comportamiento opuesto a la temperatura representando una concavidad inversa.

Estimar Modelo GAM

require(mgcv)
## Loading required package: mgcv
## Loading required package: nlme
## This is mgcv 1.8-34. For overview type 'help("mgcv-package")'.
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")

summary(mod1)
## 
## 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  < 2e-16 ***
## s(Relative_Humidity)   8.286  8.856  64.898  < 2e-16 ***
## s(Altitude)            6.552  7.365  10.930    0.164    
## s(Wind_Speed)          7.719  7.837  61.222  < 2e-16 ***
## s(Latitude)            8.613  8.957 204.481  < 2e-16 ***
## s(Longitude)           8.565  8.944  87.070  < 2e-16 ***
## s(Barometric_Pressure) 6.572  7.364   8.553    0.347    
## s(Crosswind)           5.400  5.579  31.322 2.55e-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
##Poder predictivo del modelo
modelo=round(predict(mod1,newdata = datos_fresno3[,-c(1:2)],type = "response"))
real=datos_fresno3$Fruto_Total_Dano
MAE=round(mean(abs(modelo-real)),1)
RMSE=round(sqrt(mean((modelo-real)^2)),1)
MAE
## [1] 0.8
RMSE
## [1] 2.2
datos_fresno3$Fruto_Total_Dano_modelo=modelo
datos_fresno3
## # A tibble: 788 x 11
##    Monitoreo  Fruto_Total_Dano Temperature Relative_Humidity 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>
##Mapa de predicción de Daño en Frutos
map2=ggplot(datos_fresno3,aes(x=Longitude,y=Latitude,color=Fruto_Total_Dano_modelo,size=Fruto_Total_Dano_modelo))+geom_point()+theme_bw()+ggtitle("Modelo GAM")
ggplotly(map2)
#require(gridExtra)
#gridExtra::grid.arrange(map1, map2, ncol = 1)
#Dado que se realiza un modelo de regresión para la variable de respuesta que es el daño en frutos en función de las covariables las cuales no tienen un modelo lineal entonces se usa el modelo GAM, el cual ajusta una función suave utilizando un spline, en donde se muestra que los factores ambientales tales como la temperatura, la humedad relativa y velocidad del viento suavizados son variables que influyen en la presencia de la plaga a diferencia de la presión barométrica y de la altitud.

#Así para identificar cuánto se está equivocando el modelo frente al valor real se hace el cálculo del MAE en donde muestra qué el modelo tiene un error de predicción de 0.8 frutos dañados.

Estimar Modelo Arbol de Regresión

require(rpart)
## Loading required package: 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)

modelo2=predict(mod2)

datos_fresno3$Fruto_Total_Dano_modelo2=modelo2
datos_fresno3
## # A tibble: 788 x 12
##    Monitoreo  Fruto_Total_Dano Temperature Relative_Humidity 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>
##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)
#require(gridExtra)
#gridExtra::grid.arrange(map1,map2, map3, ncol = 1)
# La anteriror es una metodología flexible en la cual se construye unas reglas de decisión con las variables que influyen en la aparición de plagas como lo son la latitud y la unidad relativa la temperatura la velocidad del viento y para cada una de ellas asignada un valor clasificando así los "rangos" para determinar el daño del fruto. En esta clasificación se puede ver qué no realiza la clasificación de la variable altura, quién no tendría relación con la aparición de plagas. Este modelo identifica al igual que el modelo GAM los nichos al sur de la parcelación, sin embargo los de la zona norte los omite 

Entrenar Maquina de Soporte Vectorial

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_Humidity 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)
#Enfoque basado en hiperplanos que a partir de kernel realiza una transformación de los datos para realizar clasificaciones mucho más eficientes. El kernel usado para el ejercicio es de orden polinomial de orden 10, el cual no reconoce exactitud los mismos nichos que se identificaron los dos anteriores modelos. 

Entrenar Red Neuronal

#Las redes neuronales es una simulación del funcionamiento de las neuronas del cerebro humano. Para ello es necesario escalar los datos o estandarizarlos para obtener valores de 0 y 1. Una red neuronal la conforman las capas de entrada, ocultas y de salida. Dentro de los parámetros de entrada están las variables de temperatura humedad relativa altitud velocidad del viento latitud longitud precipitación barométrica. Luego en la capa oculta o de procedimiento se establece una neurona de (1*1) por efectos de capacidad computacional con una capa de salida. 
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)
# CONCLUSION: Al obtener todos los modelos se descartan la red neuronal y la máquina de soporte vectorial dado que éstas se usan para predecir o clasificar más no para interpretar. En este sentido, al representar el modelo gam se puede observar que éste nos permite espacializar correctamente los nichos, además de evaluar las covariables, identificando los valores asociados al fenómeno.