Nothing
## ----include = FALSE----------------------------------------------------------
knitr::opts_chunk$set(
collapse = TRUE,
comment = "#>"
)
# Numeric notation in this document
# With thanks to https://stackoverflow.com/questions/18965637/set-global-thousand-separator-on-knitr/18967590#18967590
knitr::knit_hooks$set(
inline = function(x) {
if(!is.numeric(x)){
x
} else if(x<100) {
prettyNum(round(x, 3), big.mark=",")
} else {
prettyNum(round(x, 0), big.mark=",")
}
}
)
## ----setup--------------------------------------------------------------------
library(dynamicpv)
## ----assume1------------------------------------------------------------------
# A simple cashflow
cashflow <- c(110, 120, 130, 140, 150)
# (Real) discount rate of 3\% per timestep (year)
disc <- 0.03
vt1 <- (1 + disc)^(-1 * (0:4))
## ----demo1--------------------------------------------------------------------
# Run dynpv calculation with full output
pv1 <- dynpv(payoffs=cashflow, discrate=disc)
summary(pv1)
## ----simpler------------------------------------------------------------------
sum(vt1 * cashflow)
## ----calc2a-------------------------------------------------------------------
# Set up price index
pinfl <- 0.01
pindex <- (1+pinfl)^(0:4)
pindex
# Nominal discount rate
nomdisc <- (1+disc)*1.025-1
# Calculate present value
pv2 <- dynpv(payoffs=cashflow, prices=pindex, discrate=nomdisc)
summary(pv2)
## ----calc2b-------------------------------------------------------------------
# Compare with more base calculations
vt2 <- (1+nomdisc)^(-1 * (0:4))
sum(vt2 * cashflow * pindex)
## ----calc3a-------------------------------------------------------------------
# Revise the price index to be 0.5 from year 4
pindex[4:5] <- 0.5
pindex
# Calculate present value
pv3 <- dynpv(payoffs=cashflow, prices=pindex, discrate=nomdisc)
summary(pv3)
## ----calc3b-------------------------------------------------------------------
# Compare with more base calculations
sum(vt2 * cashflow * pindex)
## ----uptake2------------------------------------------------------------------
# Uptake vector is (1, 1, 1, 1, 1)
uptakes1 <- rep(1, 5)
# NPV calculation
pv4 <- dynpv(payoffs=cashflow, uptakes=uptakes1, discrate=disc)
summary(pv4)
## ----verify2------------------------------------------------------------------
sum(vt1 * cumsum(cashflow))
## ----uptake3------------------------------------------------------------------
# Uptake vector is (1, 2, 3, 4, 5)
uptakes2 <- 1:5
# NPV calculation
pv5 <- dynpv(payoffs=cashflow, uptakes=uptakes2, discrate=disc)
summary(pv5)
## ----verify3------------------------------------------------------------------
# Verifying total NPV is now more complicated
checkpv <- rep(0, 5)
for (i in 1:5) {
checkpv[i] <- sum(cashflow[1:i] * uptakes2[i:1] * vt1[i])
}
sum(checkpv)
## ----uptake4------------------------------------------------------------------
# NPV calculation
pv6 <- dynpv(payoffs=cashflow, uptakes=uptakes2, prices=pindex, discrate=nomdisc)
# Calculation results
pv6
# Total present value = sum of the pv column
sum(pv6$pv)
summary(pv6)
Any scripts or data that you put into this service are public.
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.