---
title: "Diagrama Aluvial (Snadkey)"
author: "Ricardo R. Palma"
date: "`r Sys.Date()`"
output: html_document
---

```{r setup, include=FALSE}
knitr::opts_chunk$set(echo = TRUE)
```



## Diagramas Aluviales \(Sandkey\) con R-CRAN\large \\Maestría en Energía}

**authores:** 
* PALMA Ricardo R. - Facultad de Ingeniería <rpalma@uncu.edu.ar>  
MASERA Gustavo A. - Facutad de Filosofía y Letras <gustavo.masera@fing.uncu.edu.ar> 
**Universidad Nacional de Cuyo}**


## ¿Que es un diagrama aluvial?

El diagrama aluvial es una variante de un gráfico de coordenadas paralelas (PCP), pero para variables categóricas. Las variables se asignan a ejes verticales que son paralelos. Los valores se representan con bloques en cada eje. Las observaciones se representan con aluviones (del inglés, “alluvium”) que se extienden a lo largo de todos los ejes.

Los diagramas aluviales se crean con la función alluvial() de las bibliotecas para matlab, R-Cran y Pythin (NimPY) . Este es un ejemplo que utiliza el conjunto de datos (Se4Al)<https://www.seforall.org/> quienes son los autores de la biblioteca junto a Naciones Unidas. Vamos a convertirlo en un marco de datos el conjunto de información que se utiliza para el caso de Argentina de LEAP.


## Marco Teórico 
Se basa en el siguiente sistema de ecuaciones, que no es más que una generalización de la matriz Insumo/Producto de Vassily Leonitef



$\frac{\partial(F_1,F_2)}{\partial(c,\omega)}_{(c_0,\omega_0)} = \left|
\begin{array}{ll}
\frac{\partial F_1}{\partial c} &\frac{\partial F_1}{\partial \omega} \\\noalign{\vskip3pt}
\frac{\partial F_2}{\partial c}&\frac{\partial F_2}{\partial \omega}
\end{array}\right|_{(c_0,\omega_0)}\\
\quad=-4c_0q\omega_0 -4c_0\omega_0p^2 =-4c_0\omega_0(q+p^2)>0.$


### Invocando la biblioteca 

Se4All UNO Sustainable Energy for All program

```{r}
library(readr)
# APPncia <- read_delim("c:agencia_leap.csv",
#";", escape_double = FALSE, trim_ws = TRUE)

APPncia <- read_delim("agencia_leap.csv", 
                      ";", escape_double = FALSE, trim_ws = TRUE)
tit <- as.data.frame(APPncia, stringsAsFactors = FALSE)

head(tit)
```


## Creando el Diagrama}

Procederemos a invocar la biblioteca alluvial

Este es un ejemplo muy cargado de atributos, no mires del código los descriptores gráficos y de color de los objetos.
El objtivo es que se pueda ver que esperamos de esta biblioteca.

Uso más simple

```{r}
library(alluvial)
alluvial(tit[ ,1:4], freq=tit$Casos)

```



### Uso Avanzado, marcar un camino con color



```{r}
alluvial(tit[,1:4], freq=tit$Casos,
         col = ifelse(tit$Supply_Chain == "Perdidas primarias", "red", "grey"),
         border = ifelse(tit$`Energia-GWAño` == "Perdidas Evitables", "blue", "black"),
         hide = tit$Fuente == 0,
         cex = 0.7
)
```



Ya hemos armado el dataframe y acomodado los datos para que puedan ser impresos veremos el más simple de los diagramas que podemos hacer.
Por defecto alluvial nos imprime los gráficos en color gris y usa transparencias.


```{r}
# Survival status and Class
library(dplyr)
#esta biblioteca habilita la funcion %>%
# Survival status and Class
tit %>% group_by(Supply_Chain, Uso ) %>%   summarise(n = sum(Casos)) -> tit2d  

tit %>% group_by(Supply_Chain, Uso) %>% summarise(n= sum(Casos)) -> tit3d                                                     
alluvial(tit2d[,1:2], freq=tit2d$n)
```



<<aluvial_0,echo=TRUE,fig=TRUE>>=
# Survival status and Class
library(dplyr)
#esta biblioteca habilita la funcion %>%
# Survival status and Class
tit %>% group_by(APP, Exito) %>%
  summarise(n = sum(Freq)) -> tit2d

alluvial(tit2d[,1:2], freq=tit2d$n)

@

En este caso utilizamos a la salida las categorías "Si Sobrevive" / "No Sobrevive" con sólo dos niveles de filtro.

<<aluvial_3, echo=TRUE,fig=TRUE>>=
# Survival status, Sex, and Class
tit %>% group_by(Sexo, Organismo, APP) %>%
  summarise(n = sum(Freq)) -> tit3d

alluvial(tit3d[,1:3], freq=tit3d$n)
@

En este ejemplo hemos realizado el mismo ejemplo anterior pero en tres niveles. Hemos clasificado por sexo antes de las categorías anteriores.

<<inverso,echo=TRUE>>=
tit %>% group_by(Sexo, APP, Organismo) %>%
  summarise( n= sum(Freq)) -> x

tit %>% group_by(Organismo, APP, Sexo) %>%
  summarise( n= sum(Freq)) -> y
@

Para graficar en orden inverso es necesario que consideremos armar nuevas categorías x e y que nos permitan partie de lo que antes era nuestro punto de llegada.


<<inverso_2,echo=TRUE,fig=TRUE>>=


alluvial(y[,1:3], freq=y$n, 
   # col = RColorBrewer::brewer.pal(8, "Set1"),
         col = ifelse(y$Sexo == "Generado", "Yellow", "Green"),
         alpha = 0.8,
         blocks = FALSE,
         ordering = list(
           order(y$Organismo, y$Sexo == "Red"),
           order(y$APP, y$Sexo == "Blue"),
           NULL
         )
)

@




