Description Usage Arguments Details Functions See Also Examples
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.
1 2 3 | present_value_stream(p0, r, t, d, n = 1)
present_value(p0, r, t, d)
|
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 |
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
present_value
: Estimate present value in final year
Other estimating revenue: compound_interest
,
wsfr_lifetime_yrs
, wsfr
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), ")"))
|
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.