present_value_stream: Estimate present value of a fund with annual interest...

Description Usage Arguments Details Functions See Also Examples

View source: R/revenue.R

Description

Reproduces calculation from Eric's Excel spreadsheet. Assumes that interest generated by the fund is withdrawn at the end of the year. The "_stream" version returns a data frame with 3 columns: year, value = discounted principal, cumulative_return = #' sum of fund withdrawals to given year.

Usage

1
2
3
present_value_stream(p0, r, t, d, n = 1)

present_value(p0, r, t, d)

Arguments

p0

original principal

r

rate of return over some period (e.g., year)

t

time the interest is applied (same units as r). Can be a scalar or a vector

d

discount rate (i.e., inflation)

n

compounding frequency. If NULL, will use continuous compounding

Details

Interesting that the CA lifetime license doesn't work this way, where the dept. receives an allocation equal to one license fee (which means the principal compounds less): https://www.wildlife.ca.gov/Licensing/Lifetime In CA sporspersons also need to pick up a lifetime license, so it sounds like they can directly track participation.

Also, I believe that OK and NC could be considered perpetuities: the funds pay interest every year to the agency, and the principal can never be spent. There is a simple equation for valuing perpetuities: PV = A / r https://en.wikipedia.org/wiki/Perpetuity

Functions

See Also

Other estimating revenue: compound_interest, wsfr_lifetime_yrs, wsfr

Examples

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
# Oklahoma fishing lifetimes
p0 = 225
r = 0.04914
d = 0.0219
life <- present_value_stream(p0, r, t = 0:49, d)
tail(life)
present_value(p0, r, 0:49, d)
present_value(c(250, 300, 350), r, 0:49, d)

# note that a perpetual annuity is valued higher using the same inputs
# $414 using 50-year equation above vs. $505 using perpetuity equation below
perpetuity <- r * p0 / d
perpetuity

# perpetuity convergest on the same result given a long enough time span
# (i.e., present_value_stream converges on perpetuity calculation)
library(dplyr)
library(ggplot2)
x <- present_value_stream(p0, r, t = 0:300, d)
x$return <- x$cumulative_return + x$value
ggplot(x, aes(year, return)) +
    geom_line() +
    geom_label(data = filter(x, year == 50),
               aes(label = paste("50-year =", round(return)))) +
    ggtitle(paste0("Net Present Value Stream converges on Perpetuity (",
                  round(perpetuity), ")"))

southwick-associates/lifetime documentation built on Feb. 24, 2020, 9:33 a.m.