---
title: "MBA - Casos Método Montecarlo"
date: "`r Sys.Date()`"
output:
  rmdformats::readthedown:
    highlight: kate
---


```{r setup, echo=FALSE, cache=FALSE}
library(knitr)
library(rmdformats)

## Global options
options(max.print="75")
opts_chunk$set(echo=FALSE,
	             cache=TRUE,
               prompt=FALSE,
               tidy=TRUE,
               comment=NA,
               message=FALSE,
               warning=FALSE)
opts_knit$set(width=75)
```

# Simulación con Modelos Determinísticos


**Minicaso 3  Freight Forwarder **

Un caso de emprendedora exitoso en la región vitı́cola de Mednoza Argentina
está ligado a una egresada de la carrera de ingenierı́a industrial que a comienzos de la década de 1990, ante la incertidumbre de las crisis económicas decidió, sin capital alguno, lanzarse como free lance en el negocio de mover containers con vino a los puertos de Valparaı́so y San Antonio - Chile. Su empresa actuaba como intgradora de servicios entre transportistas, despachantes de aduana, bodegas, navieras y clientes de brokers en el extranjero.
<br>
Un factor clave de éxito ( KPI ) era el tamaño de lote óptimo a transportar
en cada envı́o.
Es bien conocido el modelo de Wilson que data de la década de 1920, pero que
hoy resulta casi una garantı́a al fracaso si se utiliza en contextos tan turbulentos como los que nos toca vivir.
A pesar de ello el modelo aún se estudia y no es descartado, pués sirve de
base para ser mejorado. El modelo tiene tres variables independientes y una
dependiente, a saber:


<h1> El modelo de Wilson </h1>

<h2> Variables Independientes</h2>

- Demanda Media Anual *D* (en Containers por año)

- Costo de almacenamiento unitario *Ca* (\$ por mes)

- Costo de emisión o gestión *Ce* (\$ por orden)

<h2> Variable Dependiente</h2>




- Tamaño de Lote Mensual *EOQ*

<hr>

<h2>Modelo Mateático</h2>

$$ {EOQ} = \sqrt {(\frac  {2*D * Ce} {Ca} )}$$

<h2>El caso de la Bodega Torrenti operada por el Freight Forwarder</h2>

Esta bodega tiene tres destinos principales de exportación. 

- Estados Unidos demanda 500 TEUs al año
- Brasil demanda 53 TEUs al año
- Cadandá demand 28 TEUs al año

<hr>


- Costo de Almacenamiento U\$D 2.500 

- Costo de Gestión U\$D 750

<h2>Modelado numérico en R-CRAN</h2>

```{r echo=TRUE}
D1 <-500
D2 <-52
D3 <-28

D<- D1+D2+D3

Ca <- 2500
Ce <- 750

EOQ <- sqrt(2*D*Ce/Ca)

EOQ


```


## Inventarios Estocásticos con Simulación Montecarlo

** Simulación con modelos Estocásticos **

<h2>Cálculo del EOQ por Montecarlo</h2>

Este método no concibe a las variables independientes como fijas, sino que las considera variables aleatorias e introduce Ruido en el modelo matemático.
En esta parte deberíaos analizar el comportamento de cada variable y asociarle una distribución (función paramétrica) de probabilidad. Por sencillez supondremos en este ejemplo que las varaibles siguen una distribución normal.
<br>
En rigor deberíamos estudiar que distribución siguen los datos con los que alimentaremos el modelo.
<bR
R-Cran tiene por defecto definidas las siguientes distribuciones de probabilidad.

- Normal
- Logística
- Uniforme
- Gamma
- Lognormal
- Weibull
- Cauchy
- Exponencial
- Chi-cuadrado
- F
- T-Student.

<br>

Puede explorar el paquete rriskDistributions que le dará una idea más clara.
Generaremos una muestra al azar de 47 valores con media 40 y desvio standard 5

%```{r, echo=TRUE}
    library(rriskDistributions)
    muestra=rnorm(47,40,5)
    muestra
    fit.cont(muestra)
%```




<h2>Estocatización de Variables</h2>



- Estados Unidos demanda promedio 500 TEUs al año con una varianza de 90

- Cadandá demanda promedio 28 TEUs con una varianza de 6 al año

- Brasil demanda promedio 93 TEUs al año con una varianza de 8


<hr>



- Costo de Almacenamiento U\$D 2.500 Varianza 1.000

- Costo de Gestión U\$D 750 varianza 250

<h2>Cálculo del EOQ Montecarlo</h2>


```{r, echo=TRUE}
#Genero tres variables aleatorias normales con 
#una cantidad de muestras m igual a tres veces #el tamaño de la media 

m1 <- 500*3
D1 <- rnorm(m1,500,90)
m2 <- 93*3
D2 <- rnorm(m2,93,8)
m3 <- 28*3
D3 <- rnorm(m3,28,6)
D <- c(D1,D2,D3)
# m_d muestras de demanda
m_d <- length(D)

#Generamos las variables aleatorias de costos igual a la cantidad de muestras de demanda que tenemos.

Ca <- rnorm(m_d,2500,1000)

Ce <- rnorm (m_d,750,250)

# Preparo área de graficos 3 filas 1 columna
#par(mfcol=c(1,3))

#Grafico 1
plot(density(D), 
xlab="Demanda TEU", #Change the x-axis label
ylab="Densidad", #y-axis label
main="Muestras de Demanda 5 años")#Main title


#Grafico 2
plot(density(Ca),
xlab="Costo Almacenamiento", #x-axis label
ylab="% eventos registrados", # y label
main="Población Costos Almacenamiento")     


#Grafico 3
plot(density(Ce),
xlab="Costo Gestión Inventario", #x-axis label
ylab="% eventos registrados", # y label
main="Población Costos Emisión")     
     


```


   
     



<h2>Cálculo de muestras de lote Económico EOQ</h2>

En este caso realizaremos las mismas operaciones que antes, pero las variables independientes ahora serán matrices y el resultado será un conjunto de valores con su propia distribución de probabilidades.


```{r, echo=TRUE}
EOQ <- sqrt(2*D*Ce/Ca)
#Media del Lote Económico
mean(EOQ, na.rm=TRUE)
#Varianza del Lote Económico
var(EOQ, na.rm=TRUE)
#Desvio Estandard del Lote Económico
sd(EOQ, na.rm=TRUE)

plot(density(EOQ,na.rm=TRUE))
```


Hallaremos los valores máximos y mínimos de las variables dependientes e independientes

```{r}
#Índice Mínimos
which.min(Ca)
which.min(Ce)

which.min(EOQ)

```

Valores Mínimos
```{r}
Ca[which.min(Ca)]
Ce[which.min(Ce)]
EOQ[which.min(EOQ)]
#Máximos
which.max(Ca)
which.max(Ce)
#Atención excuiremos los NA
which.max(EOQ)

```







# VAN y TIR por el método Montecarlo

Recurriremos al uso de una biblioteca llamada FinCal, para repetir el proceso que ya ensayamos con el modelo del lote económico EOQ.
Es decir veremos como usar R-CRAN para operar sobre un vector que tiene los flujos de fondos descontados e un proyecto utilizando una biblioteca específicamente diseñada para ello. Luego alimentaremos al modelo no con un vector de datos sino con un vector que contiene dos filas. La primera será el flujo de fondo tal como se usó en el primer caso y la segunda es una componente que representa la volatilidad.
Este concepto de "volatilidad" hace referencia al riesgo que sumimos en pronosticar ingresos y egresos a futuro. Nuestra certeza sobre los flujos de hace menos confiable conforme transcurre más tiempo en el desarrollo del proyecto. Por lo tanto la segundo componente del nuevo vector tiene algo así como la varianza creciente por la que afectaremos a los pronósticos de fondos futuros.

## Repaso de Matemática Financiera

### Uso de la biblioteca FinCal

Tal como se señalo más arriba deberemos instalar la biblioteca usanso el comando respectivo solo la primera vez que deseemos instalar en unestro computador.
Ejecuteremos entonces:

        install.packages("FinCal")
        
A partir de este momento podemos invocar a la biblioteca como ya sabemos.

```{r, echo=TRUE}
library(FinCal)

```
Esta biblioteca ha agregado 62 comandos de matemática financiera a nuestra computadora.
para saber cuales son ejecutamos la siguiente línea. 

```{r, echo=TRUE}
ls("package:FinCal")

```

Si necesito conocer que hace cada comando nuevo puedo usar el signo de pregunta para ver la página de ayuda interna.
Asi:

        ?npv

Esto debería darle información sobre cada comando nuevo.
Veremos algunos ejemplos simples para que tome experiencia en el caso de simulación determinística de flujo de fondos.

### Minicaso Van y TIR
Un inversionista coloca \$100 durante un año a una tasa de
interés simple de 1.5\% mensual pagadera mensualmente<br>
¿Qué retribución obtiene durante el año?

```{r, echo=TRUE}
I= 100*0.015*12
F=100 + I
F

```

### Minicaso Reinversión de Dividendos

Considere el caso del inversionista del ejemplo anterior, pero
suponiendo que recibe los intereses al final de cada mes y que
los reinvierte inmediatamente en las mismas condiciones de la
inversión inicial.<br>
¿Qué cantidad de dinero recibirá al cabo de un
año ?

```{r, echo=TRUE}
fv.simple(r = 0.015, n=12, pv = -100)

```

<h2>Convertir de tasa Anual a Mensual</h2>
¿Cuál es la tasa de interés nominal anual de una inversión que
ofrece el 1.5% de interés pagado al final de cada mes?

```{r, echo=TRUE}
r.norminal(r = 0.015, 12) * 12


```

<h2>Plazo fijo</h2>
¿Cuál es la tasa efectiva anual de rendimiento de una inversión que ofrece un interés nominal anual del 8%, pagadero cada semestre vencido, pero que el interesado procede a reinvertirlo?

```{r, echo=TRUE}
ear(r = 0.08, 2)


```

### Minicaso flujo de fondos

Crearemo un flujo de fondos consolidado de un proyecto hipotético de la creación de una bodega boutique con destino enoturístico que compite contra otro proyecto similar pero del terreno de la cervezería artesanal.
Cada uno de estos proyectos será identificado por los flujos totales FFN1 y FFN2.
El proyecto comienza en 2019 y se puede recuperar la inversión hasta 2028



<hr>
Crearemos el primer flujo de fondos:

```{r, echo=TRUE}
#Enoturismo
año<-
c(2019,2020,2021,2022,2023,2024,2025,2026,2027,2028)
FFN1<-c(-940693, 186255, 186255, 186255,
37323,37323,37323,37323, 116482, 280651)
plot(año,FFN1,pch=19,cex=3,col="dark red",type="b")
abline(0,0)

```

Ahora crearemos el flujo de fondo correspondientes a la actividad de la cerveza. Este proyecto tiene equipos de frío que no sirven más a partir del año 2024.

```{r, echo=TRUE}
#Cerveza artesanal
FFN2<-c(-19132841, 5691206, -14230711,
16387818, 24645898)
plot(año[2:6],FFN2,pch=19,cex=3,col=rgb(.25,
0.5, .3), type="b")
abline(0,0)


```

<h2> Selección de proyecto más conveniente </h2>

Comparemos los VAN de ambos proyectos

*VAN Enoturismo*
```{r, echo=TRUE}
# Enoturismo
FinCal::pv.uneven(0.03339,-FFN1)


```

Este proyecto se realiza en un país riesgoso de modo que lo castigo con una tasa más alta.

*VAN Cerveza Artesanal*
```{r, echo=TRUE}
# Creveza artesanal
FinCal::pv.uneven(0.018,-FFN2)


```

<h2>Selección de mejor proyecto</h2>
        
        Proyecto del Enoturismo

<h2> Comparación por TIR </h2>

```{r, echo=TRUE}
TIR1 = irr(FFN1)
TIR2 = irr(FFN2)
TIR1


```

```{r, echo = TRUE}
TIR2

```

Según el TIR el proyecto más conveniente es:

      Proyecto de creveza artesanal.
      
<h2> ¿Que proyecto elegirías tu?</h2>

<h1> TIR y VAN con Montecarlo </h1>

Determinaremos cuantos períodos tiene cada proyecto y le asignaremos una varianza creciente a sus flujos de fondos.
Esto podría hacerse con la distribución de probalilidades F se Snedecor (Senedorv o Snedecorf). Pero por sencillez tomaremos valores estimados por nosotros.





<strong>Vector de Volatilidad</strong>

```{r, echo=TRUE}
length(FFN1)


Volatilidad <- c( 0.01 ,0.02, 0.03, 0.04, 0.05,
0.06, 0.07, 0.08, 0.09, 0.10)


```

## Flujo de Fondos Estocástico 

### VAN con Montecarlo 

Al parecer el uso de matemática financiera nos dice que el proyecto de la cerveza artesanal es el mejor, pero ¿que tan cierto es esto si consideramos la volatilidad creciente o incertidumbre a futuro?

Las funciones de FinCal pueden aplicarse a una variable sola (que en realidad es una matriz de uno por uno), pero también a una matriz de mayores dimensiones. 
En lugar de darnos un valor nos dará una campana de Gauss de valores de salida.

Para ello crearemos un dataset.
En lugar de tomas 

Generaremos 144 (12x12) valores aleatorios con una media igual al flujo de fondos que usamos antes (FFN1 como valor promedio), pero ahora usaremos la volatilidad como varianza para este dataset

```{r, echo=TRUE}
FFN_S <- matrix(rnorm(144,FFN1,Volatilidad),
ncol=12, nrow=12, byrow=TRUE )
# FFN_S[ ,1] <- rnorm(12, FFN1[1],0.1*Volatilidad[1])


```

En este caso FFN_S representa el flujo de fondos Estocástico de 12 alternativas tomadas aleatoriamente usando la volatilidad como generador estocástico.


# ¿Por qué el proyecto de enoturismo es tan riesgoso?

<h2> Histograma del VAN Enoturismo</h2>

```{r, echo=TRUE}
#creo una variable auxiliar

VAN_S <- c(0,0,0,0,0,0,0,0,0,0,0,0)

# cargo en esa variable los valores de flujos aleatorios 
for (i in 1:12) { (VAN_S[i] <-
# calculo para cada uno de los 12 fondos un VAN
                     FinCal::npv(18,FFN_S[i,] ))}
# imprimo el histograma
hist(VAN_S, breaks = 20)


```

Que opinas de la posibilidad de éxito de este proyecto


<h2> Densidad de valores en el VAN Montecarlo </h2>

```{r, echo=TRUE}
density(VAN_S)

```

<h2> Gráfica de densidad del VAN Montecarlo </h2>

```{r, echo=TRUE}

plot(density(VAN_S))

```




