U1A10. Caso de Estudio de Apicultura parte 2

EQUIPO 2. Cielo Aholiva Higuera Gutierrez, Mariana Pompa Rivera, Saul Lopez Lopez y Cristina Arguelles Lema

26/2/2021

Análisis de Apicultura en México

Acerca de este documento

Este es un documento basado en el análisis de las abejas y todo lo que se le relacione, a través de gráficas y tablas que representan los datos dados en la contribución de la abeja al ecosistema, así mismo factores realizados por humanos que pueden llegar a la extinción, esto representado en datos de diferentes variables.

Las abejas son fundamentales para un equilibrio del medio ambiente ya que al obtener el alimento de las flores fomentan en las plantas la capacidad de fecundarse, actividad llamada polinización cruzada, con ésta, las plantas generan el oxígeno suficiente para la vida y además, aumentan el rendimiento en los cultivos, lo que favorece un incremento en alimentos de origen vegetal, materia prima textil, e insumos agropecuarios.

Para la descarga de este código

Para fines de reproducibilidad inmediata se incluye todo el código para su descarga

xfun::embed_file("U1A10.Rmd")

Download U1A10.Rmd ## Introduccion

La apicultura se describe como la actividad dedicada a la crianza de las abejas, brindándoles los cuidados necesarios con el objetivo de obtener y consumir los productos que son capaces de elaborar y recolectar. El principal producto que se obtiene de esta actividad es la miel, sin embargo también se procesan productos no menos importantes como el polen, jalea real, propóleos y veneno de abejas.

“Alrededor del 70% de la agricultura mundial es posible por las abejas, que favorecen la polinización y reproducción de las plantas, lo cual equivale al 35% de la producción de alimentos.”

Preguntas

1.¿Por qué las abejas importan tanto a la humanidad?

La agricultura es la primera y auténtica beneficiaria de los servicios prestados por las abejas. Su contribución en términos económicos es realmente significativa, hasta tal punto que la renta directa de la apicultura (miel, cera, polen y otros productos) pasa a un segundo término. Setenta de los 100 principales cultivos alimentarios que se cultivan en todo el mundo dependen de polinizadores, lo que equivale al 90 por ciento de la nutrición mundial. Sin la existencia de las abejas abría una escasez de alimentos.

Las abejas son mucho más que un pequeño insecto con el que los seres humanos compartimos el planeta, pues son las encargadas de polinizar vegetales en parcelas cercanas a sus colmenas, lo que contribuye a mejorar la biodiversidad, para que después, los polinizadores como pájaros, mariposas y murciélagos transporten el polen de flor en flor para fertilizar a las plantas. Este proceso permite la germinación de semillas y el crecimiento de frutos, es decir, sin abejas no habría alimentos. También existiriían consecuencias económicas ya que las abejas contribuyen alrededor de 3,250 pesos a la producción de cultivos por hectárea al año. Para poner eso en contexto, la Organización de las Naciones Unidas para la Agricultura y la Alimentación estima que 1.400 millones de hectáreas de tierra en todo el mundo se cultivan actualmente para cultivos. Eso equivale a agregar alrededor de $4.2 billones a la economía global.

2.¿Por qué las abejas están desapareciendo tan rápidamente?

La cantidad de abejas y otros polinizadores se está reduciendo en muchas partes del mundo debido, en buena parte, a las prácticas agrícolas intensivas, el monocultivo, el uso excesivo de productos químicos agrícolas y a unas temperaturas más altas asociadas al cambio climático, que afectan no solo a los rendimientos de los cultivos sino también la nutrición. Si esta tendencia continúa, cada vez con más frecuencias los cultivos nutritivos como frutas, nueces y muchas verduras serán sustituidos por cultivos básicos como el arroz, el maíz y las patatas, lo que podría derivar en una dieta desequilibrada.

En México la proliferación de cultivos de maíz ha presentado un grave problema para estos polinizadores, ya que quitan espacio para flores con polen, de las que se alimentan. Por otro lado, su hábitat natural está desapareciendo poco a poco; el campo se ve cada vez más reducido por la deforestación, según la SEMARNAT en los últimos 20 años el país ha perdido entre 155 mil y 776 mil hectáreas de bosques y selvas.

3.¿Cómo podemos responder estas preguntas?

library(pacman) #Para importar la biblioteca "pacman"
p_load("base64enc", "htmltools", "mime", "xfun", "prettydoc","readr", "knitr","DT","dplyr", "ggplot2","plotly", "gganimate","gifski","scales")

Gráfica de linea acerca las Colmenas a traves de años México

library(readxl)
library(ggplot2)
library(DT)
colmenass <- read_excel("Colmenas.xlsx")
datatable(colmenass)

Gráfica de linea acerca las Colmenas a traves de años México

colmenas <- ggplot(data = colmenass) + 
  geom_line(aes(Fecha, Colmenas, colour="Colmenas")) + 
  xlab("Año") +
  ylab("Cantidad de Colmenas") +
  ggtitle("Colmenas a través de los años") 
library(plotly)
ggplotly(colmenas)

Grafica de Pastel acerca de las Unidades de Producción por entidad y municipio de Sonora

library(readxl)
Unidades <- read_excel("Unidades.xlsx") 
ggplot(Unidades, aes(x=0, y= Produccion, fill=Municipio)) +
  geom_bar(stat ="identity",color="white")+
  geom_text(aes(label=percent(Produccion/281)), 
  position=position_stack(vjust=0.5),color="Black",size=2,)+
  coord_polar(theta="y")

Gráfica de Barra acerca de Existencias de Colmenas por Entidad y Municipio de Sonora

colmena <- read_excel("COLMSON.xlsx") 
Mpio <- colmena$MUNICIPIO
num <- colmena$Ncolmenas
datos <- data.frame(num, Mpio)
colme <- ggplot(colmena, aes( y=num, x=Mpio)) +
  geom_bar(position="dodge", stat="identity", fill= "pink")+
  labs(x="Municipio", y="Cantidad de colmenas", title="Número de colmenas por municipio en Sonora") +
  theme(axis.text.x = element_text(angle=90, hjust=1),axis.text.y =element_text(size = 8))
 
library(plotly)
ggplotly(colme)

Gráfica de la Relación del uso de Plaguicida

Pest <- ggplot(data = colmenass) +
  geom_line(aes(Fecha, Toneladas, colour="Toneladas de plaguicidas")) + 
  xlab("Año") +
  ylab("Toneladas") +
  ggtitle("Plaguicidas uso (1990-2018)") +
 theme_linedraw()
  geom_point
## function (mapping = NULL, data = NULL, stat = "identity", position = "identity", 
##     ..., na.rm = FALSE, show.legend = NA, inherit.aes = TRUE) 
## {
##     layer(data = data, mapping = mapping, stat = stat, geom = GeomPoint, 
##         position = position, show.legend = show.legend, inherit.aes = inherit.aes, 
##         params = list(na.rm = na.rm, ...))
## }
## <bytecode: 0x0000000020980370>
## <environment: namespace:ggplot2>
ggplotly(Pest)
  • Gráfico: Pesticidas uso.
rel <- ggplot(data = colmenass) +
  geom_line(aes(Fecha, Toneladas, colour="Toneladas de pesticidas")) + 
  geom_line(aes(Fecha, Colmenas, colour="Colmenas (escala)")) +
  xlab("Año") +
  ylab("Comportamiento") +
  ggtitle("Relación entre el uso de pesticidas y las colmenas de abeja (1990-2018)") +
 theme_linedraw()
  geom_point
## function (mapping = NULL, data = NULL, stat = "identity", position = "identity", 
##     ..., na.rm = FALSE, show.legend = NA, inherit.aes = TRUE) 
## {
##     layer(data = data, mapping = mapping, stat = stat, geom = GeomPoint, 
##         position = position, show.legend = show.legend, inherit.aes = inherit.aes, 
##         params = list(na.rm = na.rm, ...))
## }
## <bytecode: 0x0000000020980370>
## <environment: namespace:ggplot2>
ggplotly(rel)

Distribución de unidades de distribución (SONORA).

cmuni <- read_excel("cmuni.xlsx") 

ggplot(cmuni, aes(x=1, y= Municipio, fill=Distribución)) +
  geom_bar(stat="identity", width=1) +
  coord_polar("y", start=0)

# Parte II ## Clasificación no supervisada K-means

ipak <- function(pkg){
  new.pkg <- pkg[!(pkg %in% installed.packages()[, "Package"])]
  if (length(new.pkg)) 
    install.packages(new.pkg, dependencies = TRUE)
  sapply(pkg, require, character.only = TRUE)
}
packages <- c("tidyverse","cluster", "factoextra","NbClust","tidyr")
ipak(packages)
## Loading required package: tidyverse
## -- Attaching packages --------------------------------------- tidyverse 1.3.0 --
## v tibble  3.0.6     v stringr 1.4.0
## v tidyr   1.1.2     v forcats 0.5.1
## v purrr   0.3.4
## -- Conflicts ------------------------------------------ tidyverse_conflicts() --
## x scales::col_factor() masks readr::col_factor()
## x purrr::discard()     masks scales::discard()
## x plotly::filter()     masks dplyr::filter(), stats::filter()
## x dplyr::lag()         masks stats::lag()
## Loading required package: cluster
## Loading required package: factoextra
## Welcome! Want to learn more? See two factoextra-related books at https://goo.gl/ve3WBa
## Loading required package: NbClust
##  tidyverse    cluster factoextra    NbClust      tidyr 
##       TRUE       TRUE       TRUE       TRUE       TRUE
library(readxl)
df <- read_excel("Colmenas2.xlsx")
df
## # A tibble: 29 x 2
##    Colmenas Toneladas
##       <dbl>     <dbl>
##  1  2114489     26625
##  2  2088315     26625
##  3  2107618     26625
##  4  2293733     26625
##  5  2292428     26625
##  6  2053761     26625
##  7  1919938     26625
##  8  1715948     26625
##  9  1791111     26625
## 10  1944573     26625
## # ... with 19 more rows
#normalizar las puntuaciones
df <- scale(df)
head(df)
##       Colmenas  Toneladas
## [1,] 1.2015898 -0.6981002
## [2,] 1.0445024 -0.6981002
## [3,] 1.1603524 -0.6981002
## [4,] 2.2773509 -0.6981002
## [5,] 2.2695187 -0.6981002
## [6,] 0.8371211 -0.6981002

Cálculo de matriz de distancias.

#calcular la matriz de distacias
m.distancia <- get_dist(df, method = "euclidean") #el método aceptado también puede ser: "maximum", "manhattan", "canberra", "binary", "minkowski", "pearson", "spearman" o "kendall"
fviz_dist(m.distancia, gradient = list(low = "blue", mid = "orange", high = "red"))

## Estimación del número de clústers.

#estimar el número de clústers
#Elbow, silhouette o gap_stat  method
fviz_nbclust(df, kmeans, method = "wss")

fviz_nbclust(df, kmeans, method = "silhouette")

fviz_nbclust(df, kmeans, method = "gap_stat")

#con esta función se pueden calcular:
#the index to be calculated. This should be one of : "kl", "ch", "hartigan", "ccc", "scott",
#"marriot", "trcovw", "tracew", "friedman", "rubin", "cindex", "db", "silhouette", "duda",
#"pseudot2", "beale", "ratkowsky", "ball", "ptbiserial", "gap", "frey", "mcclain", "gamma",
#"gplus", "tau", "dunn", "hubert", "sdindex", "dindex", "sdbw", "all" (all indices except GAP,
#Gamma, Gplus and Tau), "alllong" (all indices with Gap, Gamma, Gplus and Tau included).
resnumclust<-NbClust(df, distance = "euclidean", min.nc=2, max.nc=15, method = "kmeans", index = "alllong")
## Warning in pf(beale, pp, df2): NaNs produced

## *** : The Hubert index is a graphical method of determining the number of clusters.
##                 In the plot of Hubert index, we seek a significant knee that corresponds to a 
##                 significant increase of the value of the measure i.e the significant peak in Hubert
##                 index second differences plot. 
## 

## *** : The D index is a graphical method of determining the number of clusters. 
##                 In the plot of D index, we seek a significant knee (the significant peak in Dindex
##                 second differences plot) that corresponds to a significant increase of the value of
##                 the measure. 
##  
## ******************************************************************* 
## * Among all indices:                                                
## * 4 proposed 2 as the best number of clusters 
## * 10 proposed 3 as the best number of clusters 
## * 1 proposed 4 as the best number of clusters 
## * 1 proposed 6 as the best number of clusters 
## * 1 proposed 10 as the best number of clusters 
## * 3 proposed 11 as the best number of clusters 
## * 1 proposed 13 as the best number of clusters 
## * 3 proposed 14 as the best number of clusters 
## * 3 proposed 15 as the best number of clusters 
## 
##                    ***** Conclusion *****                            
##  
## * According to the majority rule, the best number of clusters is  3 
##  
##  
## *******************************************************************
fviz_nbclust(resnumclust)
## Warning in if (class(best_nc) == "numeric") print(best_nc) else if
## (class(best_nc) == : la condición tiene longitud > 1 y sólo el primer elemento
## será usado
## Warning in if (class(best_nc) == "matrix") .viz_NbClust(x, print.summary, : la
## condición tiene longitud > 1 y sólo el primer elemento será usado
## Warning in if (class(best_nc) == "numeric") print(best_nc) else if
## (class(best_nc) == : la condición tiene longitud > 1 y sólo el primer elemento
## será usado
## Warning in if (class(best_nc) == "matrix") {: la condición tiene longitud > 1 y
## sólo el primer elemento será usado
## Among all indices: 
## ===================
## * 2 proposed  0 as the best number of clusters
## * 1 proposed  1 as the best number of clusters
## * 4 proposed  2 as the best number of clusters
## * 10 proposed  3 as the best number of clusters
## * 1 proposed  4 as the best number of clusters
## * 1 proposed  6 as the best number of clusters
## * 1 proposed  10 as the best number of clusters
## * 3 proposed  11 as the best number of clusters
## * 1 proposed  13 as the best number of clusters
## * 3 proposed  14 as the best number of clusters
## * 3 proposed  15 as the best number of clusters
## 
## Conclusion
## =========================
## * According to the majority rule, the best number of clusters is  3 .

#calculamos los tres clústers
k2 <- kmeans(df, centers = 3, nstart = 25) #center es 2 porque tengo 2 clústers
k2
## K-means clustering with 3 clusters of sizes 13, 9, 7
## 
## Cluster means:
##     Colmenas  Toneladas
## 1 -0.3969498  0.9197530
## 2 -0.5752756 -1.0111962
## 3  1.4768326 -0.4080034
## 
## Clustering vector:
##  [1] 3 3 3 3 3 3 2 2 2 2 2 2 2 2 2 1 1 1 1 1 1 1 1 1 1 1 1 1 3
## 
## Within cluster sum of squares by cluster:
## [1] 5.158095 3.601788 5.580778
##  (between_SS / total_SS =  74.4 %)
## 
## Available components:
## 
## [1] "cluster"      "centers"      "totss"        "withinss"     "tot.withinss"
## [6] "betweenss"    "size"         "iter"         "ifault"
str(k2)
## List of 9
##  $ cluster     : int [1:29] 3 3 3 3 3 3 2 2 2 2 ...
##  $ centers     : num [1:3, 1:2] -0.397 -0.575 1.477 0.92 -1.011 ...
##   ..- attr(*, "dimnames")=List of 2
##   .. ..$ : chr [1:3] "1" "2" "3"
##   .. ..$ : chr [1:2] "Colmenas" "Toneladas"
##  $ totss       : num 56
##  $ withinss    : num [1:3] 5.16 3.6 5.58
##  $ tot.withinss: num 14.3
##  $ betweenss   : num 41.7
##  $ size        : int [1:3] 13 9 7
##  $ iter        : int 2
##  $ ifault      : int 0
##  - attr(*, "class")= chr "kmeans"

Gráfico de clústers.

#plotear los cluster
fviz_cluster(k2, data = df)

fviz_cluster(k2, data = df, ellipse.type = "euclid",repel = TRUE,star.plot = TRUE) #ellipse.type= "t", "norm", "euclid"

fviz_cluster(k2, data = df, ellipse.type = "norm")

fviz_cluster(k2, data = df, ellipse.type = "norm",palette = "Set2", ggtheme = theme_minimal())

Dendrograma.

res2 <- hcut(df, k = 3, stand = TRUE)
fviz_dend(res2, rect = TRUE, cex = 0.5,
          k_colors = c("red","#2E9FDF", "purple", "green"))
## Warning in get_col(col, k): Length of color vector was longer than the number of
## clusters - first k elements are used

library(readxl)
df <- read_excel("Colmenas2.xlsx")
df %>%
  mutate(Cluster = k2$cluster) %>%
  group_by(Cluster) %>%
  summarise_all("mean")
## # A tibble: 3 x 3
##   Cluster Colmenas Toneladas
## *   <int>    <dbl>     <dbl>
## 1       1 1848139.    47753.
## 2       2 1818427.    22536.
## 3       3 2160350.    30413.
library(readxl)
df <- read_excel("Colmenas2.xlsx")
df$clus<-as.factor(k2$cluster)
df <- read_excel("Colmenas2.xlsx")
df <- scale(df)
df<- as.data.frame(df)
df$clus<-as.factor(k2$cluster)
df
##       Colmenas  Toneladas clus
## 1   1.20158977 -0.6981002    3
## 2   1.04450239 -0.6981002    3
## 3   1.16035238 -0.6981002    3
## 4   2.27735086 -0.6981002    3
## 5   2.26951870 -0.6981002    3
## 6   0.83712112 -0.6981002    3
## 7   0.03396131 -0.6981002    2
## 8  -1.19031680 -0.6981002    2
## 9  -0.73921422 -0.6981002    2
## 10  0.18181214 -0.6981002    2
## 11 -0.23135396 -0.6981002    2
## 12 -0.31153010 -0.9471969    2
## 13 -0.78276824 -1.8535321    2
## 14 -1.12258209 -1.4898801    2
## 15 -1.01548851 -1.3196551    2
## 16 -1.09330601  0.2626794    1
## 17 -1.00375527  0.2037937    1
## 18 -1.03972321  1.1602851    1
## 19 -0.70100166  1.1036966    1
## 20 -0.83736532  1.1169440    1
## 21 -0.43301565  1.2683317    1
## 22 -0.39978448  1.3383973    1
## 23 -0.09626866  1.0316401    1
## 24  0.11298513  0.9042968    1
## 25  0.40140679  0.5580271    1
## 26  0.62208173  0.9611150    1
## 27 -0.32966711  0.8943421    1
## 28 -0.36293430  1.1532403    1
## 29  1.54739327  1.3325777    3
df$clus<-factor(df$clus)
data_long <- gather(df, Caracteristica, Valor, Colmenas:Toneladas, factor_key=TRUE)
data_long
##    clus Caracteristica       Valor
## 1     3       Colmenas  1.20158977
## 2     3       Colmenas  1.04450239
## 3     3       Colmenas  1.16035238
## 4     3       Colmenas  2.27735086
## 5     3       Colmenas  2.26951870
## 6     3       Colmenas  0.83712112
## 7     2       Colmenas  0.03396131
## 8     2       Colmenas -1.19031680
## 9     2       Colmenas -0.73921422
## 10    2       Colmenas  0.18181214
## 11    2       Colmenas -0.23135396
## 12    2       Colmenas -0.31153010
## 13    2       Colmenas -0.78276824
## 14    2       Colmenas -1.12258209
## 15    2       Colmenas -1.01548851
## 16    1       Colmenas -1.09330601
## 17    1       Colmenas -1.00375527
## 18    1       Colmenas -1.03972321
## 19    1       Colmenas -0.70100166
## 20    1       Colmenas -0.83736532
## 21    1       Colmenas -0.43301565
## 22    1       Colmenas -0.39978448
## 23    1       Colmenas -0.09626866
## 24    1       Colmenas  0.11298513
## 25    1       Colmenas  0.40140679
## 26    1       Colmenas  0.62208173
## 27    1       Colmenas -0.32966711
## 28    1       Colmenas -0.36293430
## 29    3       Colmenas  1.54739327
## 30    3      Toneladas -0.69810024
## 31    3      Toneladas -0.69810024
## 32    3      Toneladas -0.69810024
## 33    3      Toneladas -0.69810024
## 34    3      Toneladas -0.69810024
## 35    3      Toneladas -0.69810024
## 36    2      Toneladas -0.69810024
## 37    2      Toneladas -0.69810024
## 38    2      Toneladas -0.69810024
## 39    2      Toneladas -0.69810024
## 40    2      Toneladas -0.69810024
## 41    2      Toneladas -0.94719693
## 42    2      Toneladas -1.85353215
## 43    2      Toneladas -1.48988007
## 44    2      Toneladas -1.31965507
## 45    1      Toneladas  0.26267942
## 46    1      Toneladas  0.20379366
## 47    1      Toneladas  1.16028515
## 48    1      Toneladas  1.10369663
## 49    1      Toneladas  1.11694401
## 50    1      Toneladas  1.26833170
## 51    1      Toneladas  1.33839732
## 52    1      Toneladas  1.03164007
## 53    1      Toneladas  0.90429675
## 54    1      Toneladas  0.55802708
## 55    1      Toneladas  0.96111500
## 56    1      Toneladas  0.89434207
## 57    1      Toneladas  1.15324030
## 58    3      Toneladas  1.33257767

Relación de clústers.

ggplot(data_long, aes(as.factor(x = Caracteristica), y = Valor,group=clus, colour = clus)) + 
  stat_summary(fun = mean, geom="pointrange", size = 1)+
  stat_summary(geom="line")
## No summary function supplied, defaulting to `mean_se()`
## Warning: Removed 6 rows containing missing values (geom_segment).

  #geom_point(aes(shape=clus))

Conclusión.

  • (Pendiente)

Bibliografía.