Inversiones anuales
INVersion <- c(5000,0,0,0,0,0,0,0,0,0)
length(INVersion)
## [1] 10
para randomizar este vector lo repetiremos 10 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)
## Warning: replacing previous import 'lifecycle::last_warnings' by
## 'rlang::last_warnings' when loading 'tibble'
## Warning: replacing previous import 'lifecycle::last_warnings' by
## 'rlang::last_warnings' when loading 'pillar'
qplot(eje_X,Noise_IN, geom='smooth', span =1.3)
## `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: longitud de objeto mayor no es múltiplo de
## la longitud de uno menor
plot(FF)
Para realizar esta operación utilizaremos la biblioteca de matemática financiera FinCal.
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] 10125.43
Desvio estandar del VAN
VAN_Desvio <- sd(Vector_VANS)
VAN_Desvio
## [1] 1415.656
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 $64.000
(1 - pnorm(64000,VAN_Promedio,VAN_Desvio))*100
## [1] 0