Definciónes
El valor actual neto de un proyecto de inversión (VAN) es un criterio de selección de inversiones. Este representa el valor actual de los flujos de fondos netos (ingresos menos egresos periódicos) valor actual de los flujos de fondos netos (ingresos menos egresos periódicos) que puede generar la inversión en un determinado tiempo..
Si el VAN es mayor a cero, es decir positivo, se dice que el proyecto crea riqueza para los inversionistas.
Para hallar el valor presente neto hay que descontar sus flujos de efectivo futuros a una tasa de descuento aceptable, conocida también como costo de de capital; es decir aquella tasa de rendimiento estándar de otros activos de riesgo similar o la dispuesta por el Banco Central. Por ejemplo, si el flujo de efectivo futuro es seguro, entonces la tasa de descuento a que se puede tomar como referencia es la tasa de interés sobre títulos de deuda sin riesgo (por ejemplo: bonos de deuda pública de un país).
Según expertos financieros, los flujos de efectivos se descuentan por 2 motivos:
Porque un dólar hoy vale más que un dólar mañana (se puede re invertir hoy para empezar a recibir intereses de inmediato).
Porque un dólar seguro vale más que uno con riesgo.
La fórmula para calcular el VAN es la siguiente:
\(VAN = -I_0 + \sum_{t=1}^{n} \frac{F_t}{(1+k)^n}\)
\(VAN = -i_0 + \frac{F_1}{(1+k)^1} +...+\frac{F_t}{(1+k)^n}\)
Donde:
El modelo que construiremos tiene dos variables sobre las que tenemos que tomar dos decisiones. Una es arbitraria, corresponde al lapso de tiempo durante el que analizaremos la inversión. En general para evitar incertidumbre y tener puntos de vistas comparables, utilizamos 10 años.
El segundo parámetro es la tasa de interés, que por definición corresponde a períodos del futuro, es decir que aún no está calculada. Esto nos abre la posiblidad de utilizar la estadística para predecirla.
Inversiones anuales
Armaremos un vector de inversiones que represente en cada componente la inversión en cada año de vida del proyecto.
INVersion <- c(5000,0,0,0,0,0,0,0,0,0)
length(INVersion)
## [1] 10
como sabemos este vector de inversiones podemos importarlo de una table csv, xls, SAP, e incluso de la Bolda de Valores.
para randomizar este vector lo repetiremos 14 veces a efectos de poder aplicar Montecarlo.
INVersion <- c(INVersion,INVersion ,INVersion,INVersion,INVersion,INVersion,INVersion,INVersion,INVersion,INVersion,INVersion,INVersion,INVersion,INVersion)
length(INVersion)
## [1] 140
Costos operativos
Supondremos que los costos durante los 3 primeros años serán de $700 y luego de $1350. Admás de ello tenemos una certeza que la variabilidad entre el año 1 al 3 iniciará en 2% y terminará 4%. En tanto que para el periodo del 4to al 10mo año se invermentará en 0.015%.
Generación de flujo de costos
CO <- c(700,700,700,1350,1350,1350,1350,1350,1350,1350)
plot(CO)
Intervalo de incertidumbre
V4inicial <- 0.04
V1_al_3 <- c(0.02,0.03,0.04)
V4_al_10 <- c(0,0,0,0,0,0)
incremento <- 0.015
for (i in 1:7) {
V4_al_10[i] <- V4inicial *(1+incremento)
incremento <- incremento + incremento
}
V1_al_3
## [1] 0.02 0.03 0.04
V4_al_10
## [1] 0.0406 0.0412 0.0424 0.0448 0.0496 0.0592 0.0784
Concatenar dos vectores
Noise_CO <- c(V1_al_3 ,V4_al_10)
Noise_CO
## [1] 0.0200 0.0300 0.0400 0.0406 0.0412 0.0424 0.0448 0.0496 0.0592 0.0784
plot(Noise_CO, main="incremento de la incertidumbre", ylab= "% de ruido",xlab="año")
Como podemos observar en el gráfico tenémos una hipótesis de incremente inicial constante durante los años 1 al 3 y luego suponemos una estabilidad política económica (cambio de gobierno), y luego presagiamos nuevamente inestabilidad sumada a incertidumbre más por desconocimiento del futuro que por falta de certeza de lo que puede ocurrir.
Generaremos 12 flujos anuales de fondos aleatorios (equivalen a 144 muestras) en los que la incertidumbre será tomada como varianza de los costos esperados para cada año.
COAleatorios <- rnorm(144,CO[1:10],Noise_CO[1:10]*10000)
# Flujos recortados para imprimir
COArecortados <- rnorm(144,CO[1:12],Noise_CO[1:12]*10000)
## Warning in rnorm(144, CO[1:12], Noise_CO[1:12] * 10000): NAs produced
plot(COArecortados,type="l")
Repetiremos ahora este trabajo para los ingresos, utilizando la misma incertidumbre.
Nuevamente utilizaremos valores sencillo para familiarizarnos con el método. Recomendamos que estos valores los ajustes con los datos de tu caso particular. A efectos de ver las posibilidades, agregaremos al comando plot que utilizamos antes, una opción que es para trazar una línea (roja) que representa un valor de alguna cantidad que nos interese tener como referencia. Se podría implementar una línea que represente el punto de equilibri, la media de impuestos previstos, o como en este caso, una media de las cuentas a pagar (crédito de proveedores) que deberíamos cubrir y que están conteplandos en los costos que ya hemos calculado.
INcome <- c(2700,1700,2700,4350,4350,4350,4350,4350,4350,4350)
plot(INcome,type="l")
# Línea roja indica promedio de cuentas por pagar
abline(a=3000, b=0, col="red", lty=2)
Procederemos a generar el ruido de entrada que demanda Montecarlo
V4inicial <- 0.045
V1_al_3 <- c(0.025,0.035,0.045)
V4_al_10 <- c(0,0,0,0,0,0)
incremento <- 0.025
for (i in 1:7) {
V4_al_10[i] <- V4inicial *(1+incremento)
incremento <- incremento + incremento
}
V1_al_3
## [1] 0.025 0.035 0.045
V4_al_10
## [1] 0.046125 0.047250 0.049500 0.054000 0.063000 0.081000 0.117000
Concatenar dos vectores de ingresos
Noise_IN <- c(V1_al_3 ,V4_al_10)
Noise_IN
## [1] 0.025000 0.035000 0.045000 0.046125 0.047250 0.049500 0.054000 0.063000
## [9] 0.081000 0.117000
eje_X <- seq(1:10)
# genereremos una curva de suavizaso exponencial para superponer a los datos
lo <- loess(Noise_IN~eje_X)
plot(Noise_IN, main="incremento de la incertidumbre", ylab= "% de ruido",xlab="año")
lines(predict(lo),col="red")
Ejemplo de otro suavizado exponencial
scatter.smooth(eje_X, Noise_IN)
Banda de flotación al 30%
library(ggplot2)
qplot(eje_X,Noise_IN, geom='smooth', span =1.3)
## Warning: `qplot()` was deprecated in ggplot2 3.4.0.
## This warning is displayed once every 8 hours.
## Call `lifecycle::last_lifecycle_warnings()` to see where this warning was
## generated.
## `geom_smooth()` using method = 'loess' and formula = 'y ~ x'
INAleatorios <- rnorm(144,INcome[1:10],Noise_IN[1:10]*10000)
## Flujo recortado para imprimir
INArecortado <- rnorm(144,INcome[1:12],Noise_IN[1:12]*10000)
## Warning in rnorm(144, INcome[1:12], Noise_IN[1:12] * 10000): NAs produced
plot(INArecortado,type="l", xlab="Año")
length(INAleatorios)
## [1] 144
length(INVersion)
## [1] 140
length(COAleatorios)
## [1] 144
FF <- INAleatorios -INVersion -COAleatorios
## Warning in INAleatorios - INVersion: longer object length is not a multiple of
## shorter object length
plot(FF)
Para realizar esta operación utilizaremos la biblioteca de matemática financiera FinCal.
El comando ls(“nombre de la biblioteca”) nos muestra los nuevos comandos que una biblioteca nos agrega a R.
library(FinCal)
ls("package:FinCal")
## [1] "bdy" "bdy2mmy" "candlestickChart"
## [4] "cash.ratio" "coefficient.variation" "cogs"
## [7] "current.ratio" "ddb" "debt.ratio"
## [10] "diluted.EPS" "discount.rate" "ear"
## [13] "ear.continuous" "ear2bey" "ear2hpr"
## [16] "EIR" "EPS" "financial.leverage"
## [19] "fv" "fv.annuity" "fv.simple"
## [22] "fv.uneven" "geometric.mean" "get.ohlc.google"
## [25] "get.ohlc.yahoo" "get.ohlcs.google" "get.ohlcs.yahoo"
## [28] "gpm" "harmonic.mean" "hpr"
## [31] "hpr2bey" "hpr2ear" "hpr2mmy"
## [34] "irr" "irr2" "iss"
## [37] "lineChart" "lineChartMult" "lt.d2e"
## [40] "mmy2hpr" "n.period" "npm"
## [43] "npv" "pmt" "pv"
## [46] "pv.annuity" "pv.perpetuity" "pv.simple"
## [49] "pv.uneven" "quick.ratio" "r.continuous"
## [52] "r.norminal" "r.perpetuity" "sampling.error"
## [55] "SFRatio" "Sharpe.ratio" "slde"
## [58] "total.d2e" "twrr" "volumeChart"
## [61] "was" "wpr"
Esta biblioteca tiene una enorme cantidad de comandos que te serán de suma utilidad, incluso puedes capturar datos en tiempo real de la cotización de bonos y acciones, precio del oro, etc.
En este caso de estudio trabajaremos con la función npv Utiliza este comando para ver la ayuda de la síntaxis.
?npv
Por el momento utilizaremos la misma tasa de descuento, aún cuando para realizar el análisis Montecralo también deberíamos aleatorizar este valor. Supondremos una tasa del 12%.
Construiremos los 12 flujos de fondos
CF1 <- FF[1:10]
CF2 <- FF[11:20]
CF3 <- FF[21:30]
CF4 <- FF[31:40]
CF5 <- FF[41:50]
CF5 <- FF[51:60]
CF6 <- FF[61:70]
CF7 <- FF[71:80]
CF8 <- FF[81:90]
CF9 <- FF[91:100]
CF10<- FF[101:110]
CF11<- FF[111:120]
CF12<- FF[121:130]
Vector_VANS <- c(0,0,0,0,0,0,0,0,0,0,0,0)
Vector_VANS[1] <- npv(0.12,CF1)
Vector_VANS[2] <- npv(0.12,CF2)
Vector_VANS[3] <- npv(0.12,CF3)
Vector_VANS[4] <- npv(0.12,CF4)
Vector_VANS[5] <- npv(0.12,CF5)
Vector_VANS[6] <- npv(0.12,CF6)
Vector_VANS[7] <- npv(0.12,CF7)
Vector_VANS[8] <- npv(0.12,CF8)
Vector_VANS[9] <- npv(0.12,CF9)
Vector_VANS[10] <- npv(0.12,CF10)
Vector_VANS[11] <- npv(0.12,CF11)
Vector_VANS[12] <- npv(0.12,CF12)
boxplot(Vector_VANS)
Calcularemos el VAN promedio del experimento
VAN_Promedio <- mean(Vector_VANS)
VAN_Promedio
## [1] 10309.97
Desvio estandar del VAN
VAN_Desvio <- sd(Vector_VANS)
VAN_Desvio
## [1] 1830.214
Generaremos una muestra de 500 valores con media VAN_Promedio y Desvio Standard VAN_Desvio
muestra <- rnorm(500,VAN_Promedio,VAN_Desvio)
plot(density(muestra))
Probabilidad de cubrir la inversión de $84.000
(1 - pnorm(8400,VAN_Promedio,VAN_Desvio))*100
## [1] 85.16596