Actuarial present value of a multi-life annuity (up to 3 independent lives)
Source:R/annuity_multi.R
annuity_multi.RdComputes the APV of a discrete annuity contingent on multiple independent lives using compact actuarial notation.
Arguments
- lt
A life table object (data frame or tibble) with column
xand at least one oflx,px, orqx. For different mortality assumptions by life, pass a list of life tables of the same length asages, for examplelist(lt_male, lt_female).- ages
Integer vector of actuarial ages for the lives at issue. Must have length 1, 2, or 3.
- i
Numeric scalar. Annual interest-rate input.
- i_type
Character string indicating the interest-rate type. Allowed values are
"effective","nominal_interest","nominal_discount", and"force".- m
Positive integer. Conversion frequency for nominal rates. Ignored for
i_type = "effective"andi_type = "force". Intidyactuarial,mis reserved for interest conversion frequency, not deferment.- n
Integer term in years after deferment. If
NULL, runs to the end of the available table horizon, conservatively based on the smallest omega across life tables.- h
Integer deferment period in years.
- k
Integer payments per year. If
k > 1, Woolhouse approximations may be applied.- annuity
Type of annuity logic:
"cohort"uses the status defined incohort;"reversionary"uses the \(\alpha\) fractional reduction.- cohort
Survival status:
"first"for joint-life, paying while all lives are alive, or"last"for last-survivor, paying while at least one life remains alive. Used only whenannuity = "cohort".- alpha
Reversionary fraction, typically \(0 \le \alpha \le 1\). Used only when
annuity = "reversionary". Note:alpha = 0matches joint-life;alpha = 1matches last-survivor.- timing
"immediate"or"due".- woolhouse
"none","first", or"second".- frac
Fractional-age assumption for exact payments:
"UDD"(default),"CF","CML"(alias of CF), or"Balducci".
Details
This implementation supports up to three lives, which covers the most common practical multi-life arrangements.
Supports status-based annuities (joint-life / last-survivor) and a joint-and-survivor style annuity (`"reversionary"`) that pays 1 while all lives are alive and then pays a fraction \(\alpha\) while at least one life remains alive.
This function follows the compact actuarial notation used throughout
tidyactuarial: i is the interest rate, i_type is the
interest-rate type, m is the conversion frequency for nominal rates,
n is the term, h is the deferment period, and k is the
payment frequency.
Under the assumption of independent future lifetimes, the survival probability for the status is calculated as:
Joint-life (first-death): \({}_t p_{x_1 x_2 \dots x_n} = \prod_{j=1}^n {}_t p_{x_j}\)
Last-survivor: \({}_t p_{\overline{x_1 x_2 \dots x_n}} = 1 - \prod_{j=1}^n (1 - {}_t p_{x_j})\)
For annuity = "reversionary", the APV is a weighted combination of
the two statuses:
$$APV = APV(\text{joint-life}) +
\alpha [APV(\text{last-survivor}) - APV(\text{joint-life})].$$
All values are measured at issue, conditional on the stated lives being
alive at issue. Ages identify lives within one policy, not policy scenarios.
A k-thly payment is \(1/k\) of an annual unit: exact valuation sums
\(F(h+j/k)/k\), with \(F(t)=e^{-\delta t}w(t)\) and the expected payment
weight \(w(t)\) defined above. Due uses \(j=0,\ldots,nk-1\); immediate
uses \(j=1,\ldots,nk\). The historical name "reversionary" means
joint-and-survivor payments; it does not mean payments only after a death.
For k > 1, woolhouse = "none" uses the actual fractional
payment grid. First-order Woolhouse subtracts
\((1-1/k)[F(h)-F(h+n)]/2\) from the annual due value. Second-order also
subtracts \((1-1/k^2)[(\delta+\eta_h)F(h)-
(\delta+\eta_{h+n})F(h+n)]/12\). Here
\(\eta_t=-\log(w(t+1)/w(t))\) is an annual forward estimate of the
logarithmic decay of the payment weight, not an exact instantaneous force.
Positive supported weights at both borders and the following year are
required for second-order approximation. This is a smoothness approximation,
not exact fractional valuation under frac; negative approximations
produce a warning. Immediate subtracts \([F(h)-F(h+n)]/k\) from due.
Exact valuation requires consecutive annual ages and retains the documented
conservative common-age horizon; it does not extrapolate unobserved lives.
See also
annuity_x for single-life annuities,
t_px for survival probabilities.
Other life-contingencies:
add_insurance(),
add_premium_schedule(),
annuity_x(),
annuity_xy(),
insurance_variable_k(),
insurance_x(),
insurance_xy(),
life_contract(),
premium_gross(),
premium_x(),
premium_xy(),
reserve_x(),
reserve_xy(),
simulate_annuity_x(),
simulate_insurance_x()
Examples
lt <- data.frame(
x = 60:90,
lx = seq(100000, 0, length.out = 31)
)
annuity_multi(
lt = lt,
ages = c(60, 62),
i = 0.05,
n = 5,
cohort = "first",
timing = "due"
)
#> [1] 3.979153
# Half-yearly payments, each equal to half an annual unit, under UDD
annuity_multi(lt, ages = c(60, 62), i = 0.05, n = 5, k = 2,
timing = "due", frac = "UDD")
#> [1] 3.860308
annuity_multi(
lt = lt,
ages = c(60, 62),
i = 0.05,
n = 5,
cohort = "last",
timing = "due"
)
#> [1] 4.515572