1. A one year financial model: sales - variable costs - fixed costs - taxes = net result
# Turn off scientific notation
options(scipen=999)
# Define starting values
t <- 0
sales <- 1000000
varcosts <- sales * 0.7
fixcosts <- 50000
gresult <- sales - varcosts - fixcosts
taxes <- gresult * 0.25
nresult <- gresult - taxes
finres <- data.frame(t, sales, varcosts, fixcosts, gresult, taxes, nresult)
finres

  1. A 10 year projection with growth rate
# Define a function for calculating growing end values
growthcalc <- function(startvalue, rate) {
  
  endvalue <- startvalue * (1 + rate)
  return(endvalue)
  
}
# Calculate a growing independent series and combine them in data frame
growth <- 0.15
inflation <- 0.012
for (s in c(1:10)) {
  
  t <- c(t, s)
  sales <- c(sales,
             growthcalc(sales[s],
                        growth)
             )
  fixcosts <- c(fixcosts,
                growthcalc(fixcosts[s],
                           inflation)
                )
  
}
finres <- data.frame(t, sales, fixcosts)
# Calculate dependent series
library(dplyr)
finres <- mutate(finres,
                 varcosts = sales * 0.7,
                 gresult = sales - varcosts - fixcosts,
                 taxes = gresult * 0.25,
                 nresult = gresult - taxes
                 )
# Plot series
library(ggplot2)
ggplot(finres, aes(x = t, y = nresult)) +
  geom_col(fill = rainbow(max(t)+1)) +
  theme(legend.position="none")


  1. A 10 year projection with risky growth rates
# Define starting values
t <- 0
sales <- 1000000
fixcosts <- 50000
# Calculate a growing independent series and combine them in data frame with uncertainty
stdevg <- 0.20
stdevi <- 0.005
for (s in c(1:10)) {
  
  t <- c(t, s)
  sales <- c(sales,
             growthcalc(sales[s],
                        rnorm(1, mean = growth, sd = stdevg)
                        )
             )
  fixcosts <- c(fixcosts,
                growthcalc(fixcosts[s],
                           rnorm(1, mean = inflation, sd = stdevi)
                           )
                )
  
}
finres.uncertain <- data.frame(t, sales, fixcosts)
# Calculate dependent series
finres.uncertain <- mutate(finres.uncertain,
                 varcosts = sales * 0.7,
                 gresult = sales - varcosts - fixcosts,
                 taxes = gresult * 0.25,
                 nresult = gresult - taxes
                 )
# Plot series
ggplot(finres.uncertain, aes(x = t, y = nresult)) +
  geom_col(fill = heat.colors(max(t)+1)) +
  theme(legend.position="none")


  1. Net present value calculations
# Function for calculating present values
presval <- function(futurevalue, discountrate, nperiods) {
  
  presentvalue <- futurevalue / (1 + discountrate)^nperiods
  
}
# Calculate present values of net results and add to data frame
discrate <- 0.05
finres.uncertain <- mutate(finres.uncertain,
                 nresult.pres = presval(nresult, discrate, t)
                 )
finres.uncertain
investment <- 4000000
netpresval <- -investment + sum(finres.uncertain$nresult.pres[-1])

The resulting Net Present Value equals: -8924


Question

Go back to part 2 and build a model that assumes a growth rate of 15% p.a. for the first eight years and zero for the remaining two years.
HINT: make two adjustments.

LS0tCnRpdGxlOiAiRmluYW5jZSB3aXRoIFIiCmF1dGhvcjogIldpdGVrIHRlbiBIb3ZlIgpvdXRwdXQ6IGh0bWxfbm90ZWJvb2sKLS0tCgo8aHI+CjEuIEEgb25lIHllYXIgZmluYW5jaWFsIG1vZGVsOiAqc2FsZXMgLSB2YXJpYWJsZSBjb3N0cyAtIGZpeGVkIGNvc3RzIC0gdGF4ZXMgPSBuZXQgcmVzdWx0KgoKYGBge3J9CiMgVHVybiBvZmYgc2NpZW50aWZpYyBub3RhdGlvbgpvcHRpb25zKHNjaXBlbj05OTkpCgojIERlZmluZSBzdGFydGluZyB2YWx1ZXMKdCA8LSAwCnNhbGVzIDwtIDEwMDAwMDAKdmFyY29zdHMgPC0gc2FsZXMgKiAwLjcKZml4Y29zdHMgPC0gNTAwMDAKZ3Jlc3VsdCA8LSBzYWxlcyAtIHZhcmNvc3RzIC0gZml4Y29zdHMKdGF4ZXMgPC0gZ3Jlc3VsdCAqIDAuMjUKbnJlc3VsdCA8LSBncmVzdWx0IC0gdGF4ZXMKCmZpbnJlcyA8LSBkYXRhLmZyYW1lKHQsIHNhbGVzLCB2YXJjb3N0cywgZml4Y29zdHMsIGdyZXN1bHQsIHRheGVzLCBucmVzdWx0KQpmaW5yZXMKYGBgCgo8aHI+CjIuIEEgMTAgeWVhciBwcm9qZWN0aW9uIHdpdGggZ3Jvd3RoIHJhdGUKCmBgYHtyLCBtZXNzYWdlPUZBTFNFLCB3YXJuaW5nPUZBTFNFfQojIERlZmluZSBhIGZ1bmN0aW9uIGZvciBjYWxjdWxhdGluZyBncm93aW5nIGVuZCB2YWx1ZXMKZ3Jvd3RoY2FsYyA8LSBmdW5jdGlvbihzdGFydHZhbHVlLCByYXRlKSB7CiAgCiAgZW5kdmFsdWUgPC0gc3RhcnR2YWx1ZSAqICgxICsgcmF0ZSkKICByZXR1cm4oZW5kdmFsdWUpCiAgCn0KCiMgQ2FsY3VsYXRlIGEgZ3Jvd2luZyBpbmRlcGVuZGVudCBzZXJpZXMgYW5kIGNvbWJpbmUgdGhlbSBpbiBkYXRhIGZyYW1lCmdyb3d0aCA8LSAwLjE1CmluZmxhdGlvbiA8LSAwLjAxMgoKZm9yIChzIGluIGMoMToxMCkpIHsKICAKICB0IDwtIGModCwgcykKICBzYWxlcyA8LSBjKHNhbGVzLAogICAgICAgICAgICAgZ3Jvd3RoY2FsYyhzYWxlc1tzXSwKICAgICAgICAgICAgICAgICAgICAgICAgZ3Jvd3RoKQogICAgICAgICAgICAgKQogIGZpeGNvc3RzIDwtIGMoZml4Y29zdHMsCiAgICAgICAgICAgICAgICBncm93dGhjYWxjKGZpeGNvc3RzW3NdLAogICAgICAgICAgICAgICAgICAgICAgICAgICBpbmZsYXRpb24pCiAgICAgICAgICAgICAgICApCiAgCn0KCmZpbnJlcyA8LSBkYXRhLmZyYW1lKHQsIHNhbGVzLCBmaXhjb3N0cykKCiMgQ2FsY3VsYXRlIGRlcGVuZGVudCBzZXJpZXMKbGlicmFyeShkcGx5cikKZmlucmVzIDwtIG11dGF0ZShmaW5yZXMsCiAgICAgICAgICAgICAgICAgdmFyY29zdHMgPSBzYWxlcyAqIDAuNywKICAgICAgICAgICAgICAgICBncmVzdWx0ID0gc2FsZXMgLSB2YXJjb3N0cyAtIGZpeGNvc3RzLAogICAgICAgICAgICAgICAgIHRheGVzID0gZ3Jlc3VsdCAqIDAuMjUsCiAgICAgICAgICAgICAgICAgbnJlc3VsdCA9IGdyZXN1bHQgLSB0YXhlcwogICAgICAgICAgICAgICAgICkKCiMgUGxvdCBzZXJpZXMKbGlicmFyeShnZ3Bsb3QyKQpnZ3Bsb3QoZmlucmVzLCBhZXMoeCA9IHQsIHkgPSBucmVzdWx0KSkgKwogIGdlb21fY29sKGZpbGwgPSByYWluYm93KG1heCh0KSsxKSkgKwogIHRoZW1lKGxlZ2VuZC5wb3NpdGlvbj0ibm9uZSIpCmBgYAoKPGhyPgozLiBBIDEwIHllYXIgcHJvamVjdGlvbiB3aXRoIHJpc2t5IGdyb3d0aCByYXRlcwoKYGBge3J9CiMgRGVmaW5lIHN0YXJ0aW5nIHZhbHVlcwp0IDwtIDAKc2FsZXMgPC0gMTAwMDAwMApmaXhjb3N0cyA8LSA1MDAwMAoKIyBDYWxjdWxhdGUgYSBncm93aW5nIGluZGVwZW5kZW50IHNlcmllcyBhbmQgY29tYmluZSB0aGVtIGluIGRhdGEgZnJhbWUgd2l0aCB1bmNlcnRhaW50eQpzdGRldmcgPC0gMC4yMApzdGRldmkgPC0gMC4wMDUKCmZvciAocyBpbiBjKDE6MTApKSB7CiAgCiAgdCA8LSBjKHQsIHMpCiAgc2FsZXMgPC0gYyhzYWxlcywKICAgICAgICAgICAgIGdyb3d0aGNhbGMoc2FsZXNbc10sCiAgICAgICAgICAgICAgICAgICAgICAgIHJub3JtKDEsIG1lYW4gPSBncm93dGgsIHNkID0gc3RkZXZnKQogICAgICAgICAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICApCiAgZml4Y29zdHMgPC0gYyhmaXhjb3N0cywKICAgICAgICAgICAgICAgIGdyb3d0aGNhbGMoZml4Y29zdHNbc10sCiAgICAgICAgICAgICAgICAgICAgICAgICAgIHJub3JtKDEsIG1lYW4gPSBpbmZsYXRpb24sIHNkID0gc3RkZXZpKQogICAgICAgICAgICAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICApCiAgCn0KCmZpbnJlcy51bmNlcnRhaW4gPC0gZGF0YS5mcmFtZSh0LCBzYWxlcywgZml4Y29zdHMpCgojIENhbGN1bGF0ZSBkZXBlbmRlbnQgc2VyaWVzCmZpbnJlcy51bmNlcnRhaW4gPC0gbXV0YXRlKGZpbnJlcy51bmNlcnRhaW4sCiAgICAgICAgICAgICAgICAgdmFyY29zdHMgPSBzYWxlcyAqIDAuNywKICAgICAgICAgICAgICAgICBncmVzdWx0ID0gc2FsZXMgLSB2YXJjb3N0cyAtIGZpeGNvc3RzLAogICAgICAgICAgICAgICAgIHRheGVzID0gZ3Jlc3VsdCAqIDAuMjUsCiAgICAgICAgICAgICAgICAgbnJlc3VsdCA9IGdyZXN1bHQgLSB0YXhlcwogICAgICAgICAgICAgICAgICkKCiMgUGxvdCBzZXJpZXMKZ2dwbG90KGZpbnJlcy51bmNlcnRhaW4sIGFlcyh4ID0gdCwgeSA9IG5yZXN1bHQpKSArCiAgZ2VvbV9jb2woZmlsbCA9IGhlYXQuY29sb3JzKG1heCh0KSsxKSkgKwogIHRoZW1lKGxlZ2VuZC5wb3NpdGlvbj0ibm9uZSIpCgpgYGAKCjxocj4KNC4gTmV0IHByZXNlbnQgdmFsdWUgY2FsY3VsYXRpb25zCgpgYGB7cn0KIyBGdW5jdGlvbiBmb3IgY2FsY3VsYXRpbmcgcHJlc2VudCB2YWx1ZXMKcHJlc3ZhbCA8LSBmdW5jdGlvbihmdXR1cmV2YWx1ZSwgZGlzY291bnRyYXRlLCBucGVyaW9kcykgewogIAogIHByZXNlbnR2YWx1ZSA8LSBmdXR1cmV2YWx1ZSAvICgxICsgZGlzY291bnRyYXRlKV5ucGVyaW9kcwogIAp9CgojIENhbGN1bGF0ZSBwcmVzZW50IHZhbHVlcyBvZiBuZXQgcmVzdWx0cyBhbmQgYWRkIHRvIGRhdGEgZnJhbWUKZGlzY3JhdGUgPC0gMC4wNQpmaW5yZXMudW5jZXJ0YWluIDwtIG11dGF0ZShmaW5yZXMudW5jZXJ0YWluLAogICAgICAgICAgICAgICAgIG5yZXN1bHQucHJlcyA9IHByZXN2YWwobnJlc3VsdCwgZGlzY3JhdGUsIHQpCiAgICAgICAgICAgICAgICAgKQoKZmlucmVzLnVuY2VydGFpbgoKaW52ZXN0bWVudCA8LSA0MDAwMDAwCm5ldHByZXN2YWwgPC0gLWludmVzdG1lbnQgKyBzdW0oZmlucmVzLnVuY2VydGFpbiRucmVzdWx0LnByZXNbLTFdKQoKYGBgCgpUaGUgcmVzdWx0aW5nIE5ldCBQcmVzZW50IFZhbHVlIGVxdWFsczogKipgciByb3VuZChuZXRwcmVzdmFsKWAqKgoKPGhyPgojIyMgUXVlc3Rpb24KKkdvIGJhY2sgdG8gcGFydCAyIGFuZCBidWlsZCBhIG1vZGVsIHRoYXQgYXNzdW1lcyBhIGdyb3d0aCByYXRlIG9mIDE1JSBwLmEuIGZvciB0aGUgZmlyc3QgZWlnaHQgeWVhcnMgYW5kIHplcm8gZm9yIHRoZSByZW1haW5pbmcgdHdvIHllYXJzLio8YnI+CipISU5UOiBtYWtlIHR3byBhZGp1c3RtZW50cy4qCg==