Se requiere evaluar el riesgo del VPN de un proyecto de inversión en una empresa perteneciente al sector alimenticio, con las siguientes características: * Inversión inicial: $5.000.000.000.
* Precio de venta unitario inicial: $8.000.
* Unidades vendidas para el primer mes: 20.000.
* Los costos totales para el primer mes se supone que siguen una distribución normal con media de $65.000.000 y una desviación estándar de $15.000.000.
* tasa de crecimiento de costos: Según la proyección de la inflación (usar regresión lineal con datos históricos).
* tasa de crecimiento de las ventas: Se proporciona muestra para estimar elcrecimiento. Realice un ajuste de los datos históricos del crecimiento porcentual mensual, utilizando la herramienta de ajuste de distribuciones de @Risk: Con los parámetros encontrados, defina la distribución y los parámetros para tasa de crecimiento de las ventas.
* El 40% de la inversión se financia con un banco al 20% EA.
* Para el calculo del costo del patrimonio, utilice el modelo del CAPM. Se espera que el mercado rente al 8% anual. Se proporcionan datos para la estimación del Beta de mercado de la inversión.

  1. Estime el valor esperado del VPN del proyecto.
  2. ¿Cual es la desviación estándar del proyecto?
  3. ¿Cuál es la probabilidad de que el VPN sea un 30% mas que la inversión inicial?
  4. Estime un intervalo de confianza del 90% para el VPN.
  5. Estime la máxima perdida esperada del VPN con un 95% de confianza.

1 Parámetros del modelo.

Numero_meses=60
Inversion_inicial=5000000000
precio_unit_ini=8000
Und_ini=20000
Ingreso_inicial=precio_unit_ini*Und_ini

mu_costos_ini=65000000
sigma_costos_ini=15000000

tasa_crecimiento_costos=0.015 #según IPC
tasa_crecimiento_ventas=0.01

#infomación Wacc
ratio_deuda_activo=0.4
ratio_patrimonio_activo=0.6
costo_deuda=0.2
Rtos_mercado=0.08

2 Esrtimación de la tasa de descuento (Wacc)

Para estimar la tasa de descuento, se utilza el modelo del Wacc.

El costo del patrimonio se calcula con el modelo del CAPM. La tasa libre de riesgo puede ser extraida de la curva cero de los TES, publicada en la siguiente pagina:

https://www.grupoaval.com/wps/portal/grupo-aval/aval/portal-financiero/renta-fija/tes/curva-rentabilidad

Se debe de tomar un punto de la curva con tiempo de maduración aproximado al tiempo de duración del proyecto.

\[E[R_i]=rf-B*[E[R_m]-rf]\]

2.1 Estimación del beta del CAPM

Para estimar el beta de mercado, se estima una regresión lineal entre los rendimientos diarios de Nutresa y el COLCAP.

Se toma una muestra diaria desde 2018-05-02, hasta 2018-10-18 con un total de 114 datos.

Los datos pueden ser obtenidos de la pagina de la Bolsa de Valores de Colombia

library(readxl)
historico_precios_nutresa <- read_excel("historico_precios_nutresa.xls")
Historico_Indice_colcap <- read_excel("Indices_colcap.xls")

Historico_Indice_colcap=Historico_Indice_colcap[-115,] #le sobra el ultimo dato

plot(historico_precios_nutresa,type="l", main="precio historico Nutresa")
## Warning in as.POSIXlt.POSIXct(z): unknown timezone 'zone/tz/2018f.1.0/
## zoneinfo/America/Bogota'

plot(Historico_Indice_colcap$`Valor Hoy`,type="l", main="valor historico COLCAP")

Modelo Lineal para la estimación del Beta

Rtos_nutrsa=diff(log(historico_precios_nutresa$`Precio Cierre`))
Rtos_COLCAP=diff(log(Historico_Indice_colcap$`Valor Hoy`))

plot(Rtos_nutrsa,type = "l", main = "rendimientos mutresa")

plot(Rtos_COLCAP,type = "l", main = "rendimientos Colcap")

capm=lm(Rtos_nutrsa~Rtos_COLCAP)
resultados_capm=summary(capm)

print(resultados_capm)
## 
## Call:
## lm(formula = Rtos_nutrsa ~ Rtos_COLCAP)
## 
## Residuals:
##        Min         1Q     Median         3Q        Max 
## -0.0249762 -0.0052414  0.0004468  0.0050328  0.0226412 
## 
## Coefficients:
##               Estimate Std. Error t value Pr(>|t|)    
## (Intercept) -0.0008898  0.0008246  -1.079 0.282927    
## Rtos_COLCAP  0.4198414  0.1195152   3.513 0.000642 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 0.008731 on 111 degrees of freedom
## Multiple R-squared:  0.1001, Adjusted R-squared:  0.09194 
## F-statistic: 12.34 on 1 and 111 DF,  p-value: 0.0006423
beta=capm$coefficients[2]

error_std_beta=resultados_capm$coefficients[2,2]

El Beta sigue una distribución t-student con 112 grados de libertad (se aproxima a la normal) con media de \(0.4198414\) y un error estándar de \(0.1195152\).

Para la estimación deterministica del CAPM, se utilizará la media estimada del Beta (\(0.4198414\) )

Cálculo de la tasa de descuento deterministica

rf=0.0648 #rentabilidad de los TES 2024 obtenida de la curva cero
beta=capm$coefficients[2]
costo_oport_patrim=rf+beta*(Rtos_mercado-rf)
Tasa_descuento_EA=ratio_deuda_activo*costo_deuda+ratio_patrimonio_activo*costo_oport_patrim
######3

print(Tasa_descuento_EA)
## Rtos_COLCAP 
##    0.122709

La tasa de descuento del proyecto es del 12.27% Efectivo Anual.

3 Evaluación Financiera Deterministica del proyecto.

En esta sección se realiza la evaulación del proyecto bajo el modelo deterministico. Las variables aleatorias como los costos iniciales y las tasas de crecimiento, se asumen deterministicas y se proyecta según su media (Valor esperado).

3.1 Calculo del VPN deterministico

# Se crean vectores vacios para almacenar los ingresos, los egresos y el Factor de descuento
ingresos=vector() 
egresos=vector()
Factor_descuento=vector()

#Se asignan los valores iniciales a los vectores
ingresos[1]=Ingreso_inicial
egresos[1]=mu_costos_ini 
Factor_descuento[1]=(1+Tasa_descuento_EA)^(1/12)

#Se calulan los  ingresos, los egresos y el Factor de descuento para el resto de los periódos

for (j in 2:Numero_meses) {
  ingresos[j]=ingresos[j-1]*(1+tasa_crecimiento_ventas)
  egresos[j]=egresos[j-1]*(1+tasa_crecimiento_costos)
  Factor_descuento[j]=Factor_descuento[j-1]*(1+Tasa_descuento_EA)^(1/12)
}

Flujo_neto=ingresos-egresos


plot(ingresos,type = "l",main = "flujos Mensuales", xlab = "mes",ylab = "ingresos", ylim = c(0,287793536+10),lwd=2,lty=2) 
lines(egresos,type = "l", col="blue")
lines(Flujo_neto, type = "l", col="red",lty=3,lwd=3)
legend("topleft",legend = c("ingresos","egresos","flujo neto"),col = c("black","blue","red"),lty = c(2,1,3),bty = "n",lwd = c(2,1,3))

Valor_presente_flujos=Flujo_neto/Factor_descuento

VPN=sum(Valor_presente_flujos)-Inversion_inicial

Valor Presente Neto

## [1] 66603414

El VPN deterministico es negativo, por lo tanto no es viable el proyecto.

4 Evaluación del proyecto bajo riesgo.

Para evaluar el proyecto bajo riesgo, es necesario tener en cuenta la aleatoriedad de las variables de entrada. En este caso, las variables aleatorias son:

\(\sim N(\$65000000,\$15000000^2)\)

4.1 Tasa de crecimiento de las ventas.

Se requiere hacer un ajuste que aproxime la distribución de frecuencias de la muestra, con una distribución teórica.

Lectura de datos históricos de las ventas mensuales en excel

Se cargan los datos de una hoja de excel, utilizando la libreria readxl y la función read_excel

library(readxl)
historico_ventas_mensuales <- read_excel("historico ventas mensuales.xlsx")

plot(historico_ventas_mensuales$ventas,type = "l", main = "ventas mensuales",xlab = "mes",ylab="ventas en pesos")

plot(historico_ventas_mensuales$`crecimiento porcentual`,type = "l",main = "crecimiento porcentual ventas", xlab = "mes",ylab="porcentaje de cambio mensual")

Comparación del histograma de los crecimientos mensuales con una distribución normal

Se sobre pone al histograma de frecuencias de los crecimientos mensuales, una curva normal, en donde la media se estima como el promedio de la muestra y La varianza como la diferencia al cuadrado promedio entre cada observación y el promedio de la muestra

  • Estimador de la media

\[\bar{x}=\frac{\sum_{i=1}^{n} x_i}{n}\]

  • Estimador de la varianza.

\[\sigma^2=\frac{\sum_{i=1}^{n} (x_i-\bar{x})^2}{n}\]

promedio_ventas=mean(is.na(historico_ventas_mensuales$`crecimiento porcentual`))
sd_ventas=sd(is.na(historico_ventas_mensuales$`crecimiento porcentual`))
  
hist(historico_ventas_mensuales$`crecimiento porcentual`,breaks = 20,col = "gray",main = "histograma de crecimiento porcentual mensual de ventas",freq = FALSE,xlim = c(-0.3,0.3))
curve(dnorm(x,mean=promedio_ventas,sd=sd_ventas),-0.3,0.3,add = T,col="blue")

print(promedio_ventas)
## [1] 0.00990099
print(sd_ventas)
## [1] 0.09950372

La cantidad de datos no es suficiente para hacer una buena comparación gráfica, pero no se descarta que se pueda asumir una distribución normal.

Se realiza una comparación entre los cuantiles teóricos de la distribución normal de la gráfica anterior, con los cuantiles del histograma de la muestra, a través de un plano cartesiano llamado QQ-plot. Cuando el cuantil teórico coincide con el observado, los puntos se ubican sobre una recta con pendiente de 45 grados. Entre mmas se alejen los puntos de esta recta, mas será la diferencia entre el cuantil teórico y el observado.

qqnorm((historico_ventas_mensuales$`crecimiento porcentual`))
qqline((historico_ventas_mensuales$`crecimiento porcentual`))

Se observa que los cuantiles centrales tienden a estar sobre la recta de 45 grados, pero que en las colas de la distribución, se presentan diferencias entre los cuantiles observados y los cuantiles teóricos.

Para tener mejores argumentos para asumir que las tasa ce crecimienrto de las ventas siguen una distribución normal, realizaremos 2 pruebas de hipótesis que tienen como hipótesis nula:

Ho: los crecimientos porcentuales mensuales de las ventas siguen una distribución normal

Para probar esta hipótesis, existen diferentes pruebas con diferentes enfoques. para ampliar la información, consultar el siguiente link https://rpubs.com/MSiguenas/122473

Se aplica la prueba de Shapiro.test.

shapiro.test(historico_ventas_mensuales$`crecimiento porcentual`)
## 
##  Shapiro-Wilk normality test
## 
## data:  historico_ventas_mensuales$`crecimiento porcentual`
## W = 0.98042, p-value = 0.1433

El valor P de la prueba es mayor al 10%, por lo tanto no se rechaza que la muestra se apoxime a una distribución normal.

Se aplica la prueba de Kolmogorov-Smirnov

#install.packages("nortest")
library(nortest)

lillie.test(historico_ventas_mensuales$`crecimiento porcentual`)
## 
##  Lilliefors (Kolmogorov-Smirnov) normality test
## 
## data:  historico_ventas_mensuales$`crecimiento porcentual`
## D = 0.072182, p-value = 0.2255

El valor P de la prueba es mayor al 10%, por lo tanto no se rechaza que la muestra se apoxime a una distribución normal.

Con la evidencia de las pruebas de hipotesis, se puede asumir que la muestra evaluada se aproxima a la distribución normal con la que se está comparando.

4.2 Tasa de crecimiento de los costos.

Para la tasa de crecimiento de los costos, se supondrá que estos distribuyen normal con una media mensual del 1.5% y una desviación del 0.8%

4.3 Beta de mercado

El Beta sigue una distribución t-student con 112 grados de libertad (se aproxima a la normal) con media de \(0.4198414\) y un error estándar de \(0.1195152\).

4.4 Simulación de Montecarlo

numero_iteraciones=1000

ingresos_Monte_carlo=matrix(,Numero_meses,numero_iteraciones)
egresos_Monte_carlo=ingresos_Monte_carlo
Tasa_descuento_EA=ingresos_Monte_carlo

ingresos_Monte_carlo[1,]=Ingreso_inicial

for (i in 1:numero_iteraciones)
  {
  egresos_Monte_carlo[1,]=rnorm(1,mu_costos_ini,sigma_costos_ini)
  for (j in 2:Numero_meses) {
    ingresos_Monte_carlo[j,i]=ingresos_Monte_carlo[j-1,i]*(1+rnorm(1,mean(is.na(historico_ventas_mensuales$`crecimiento porcentual`)),sd(is.na(historico_ventas_mensuales$`crecimiento porcentual`))))
    egresos_Monte_carlo[j,i]=egresos_Monte_carlo[j-1,i]*(1+rnorm(1,tasa_crecimiento_costos,0.008))
    costo_oport_patrim=rf+rnorm(1,beta,error_std_beta)*(Rtos_mercado-rf)
Tasa_descuento_EA[j,i]=ratio_deuda_activo*costo_deuda+ratio_patrimonio_activo*costo_oport_patrim

  }
}


matplot(ingresos_Monte_carlo,type = "l", main="ingresos")

matplot(egresos_Monte_carlo,type = "l", main="egresos")

Flujo_neto_Monte_Carlo=ingresos_Monte_carlo-egresos_Monte_carlo
matplot(Flujo_neto_Monte_Carlo,type = "l", main="Flujo neto")

Valor_presente_flujos_Monte_carlo=Flujo_neto_Monte_Carlo/Factor_descuento
matplot(Valor_presente_flujos_Monte_carlo,type = "l", col = "gray", main="valor presente de los flujos netos")

VPN=colSums(Valor_presente_flujos_Monte_carlo)-Inversion_inicial

hist(VPN,breaks = 50, col="gray")

El Histograma resultante tiene

Estimación del promedio, la desviación estandar y un intervalo de estimación del 90%

mean(VPN) # promedio
## [1] -74449189
sd(VPN) #desviacion estandar
## [1] 4521388491
quantile(VPN,c(0.05,0.95))
##          5%         95% 
## -5503733743  8896421194

Para estimar la probabilidad de que el VPN sea un 30% superior a la inversión inicial se requiere contar el número de casos entre \(\$5.000.000.000*(1+30\%)\) y el máximo valor obtenido con el los VPN simulados, el resultado de este conteo, se divide por el número de casos totales que corresponde al número de iteraciones de la simulación.

# Se toma de  los datos  simulados del VPN que están entre Inversion_inicial*(1+30%) y el maximo valor del VPN
corte=cut(VPN,breaks = c(Inversion_inicial*(1.3),max(VPN)),right = FALSE)

probabilidad de que el VPN esté un 30% por encima de la inversión inicial

# Se cuentan el numero de casos favorables con la función table

(table(corte)/numero_iteraciones)
## corte
## [6.5e+09,3.11e+10) 
##              0.089