Annuities#

A life annuity is a regular sequence of payments as long as the annuitant is alive on the payment date.

Present value of life annuity r.v. \(Y\)#

Valuation functions for the present value of annuity benefits, denoted by Y, are based on the continuous future lifetime random variable, \(T_x\), or the curtate future lifetime random variable, \(K_x\). The expected present value of annuity benefits is denoted and solved by EPV(Y). A useful formula from interest theory is that for a \(T\)-year continuous annuity-certain and annual annuity-due – \(\overline{a}_{\overline{T|}} = \dfrac{1 - v^{T}}{\delta}\) and \(\ddot{a}_{\overline{T|}} = \dfrac{1 - v^{T}}{d}\) – which are used to calculate the actuarial present value of life annuities.

Whole life annuity#

A whole life annuity pays a level benefit until the death of the annuitant

\(Y = ~ \overline{a}_{\overline{T_x|}} = \dfrac{1 - v^{T_x}}{\delta}\)

  • present value random variable for continuous life annuity that pays at a rate of 1 per year until the moment of death \(T_x\)

\(\overline{a}_x = EPV[\overline{a}_{\overline{T_x|}}] = \int_{t=0}^{\infty} ~ v^t ~ _tp_x ~ dt\)

  • expected present value of continuous whole life annuity

\(\overline{a}_x = \overset{\circ}{e}_x\)

  • special case when interest rate is 0

\(Y = \ddot{a}_{\overline{K_x + 1|}} = \dfrac{1 - v^{K_x + 1}}{d}\)

  • present value random variable for annual life annuity due that pays 1 up to the beginning of the year of death

\(\ddot{a}_x = EPV[\ddot{a}_{\overline{K_x+1|}}] = \sum_{k=0}^{\infty} ~ v^k ~ _{k}p_x\)

  • expected present value of annual whole life annuity due

\(\ddot{a}_x = 1 + e_x\)

  • special case when interest rate is 0

Temporary annuity#

A \(t\)-year temporary life year annuity pays a level benefit until the earlier of death and year \(t\)

\(Y = ~ \overline{a}_{\overline{t|}}\) when or \(T_x > t\), else \(Y = \overline{a}_{\overline{T_x|}}\)

  • present value random variable for continuous temporary life annuity that pays at a rate of 1 until the moment of death, or \(t\) if earlier

\(\overline{a}_{x:\overline{t|}} = \int_{s=0}^{t} ~ v^s ~ _sp_x ~ ds = \overline{a}_x - ~_tE_x ~ \overline{a}_{x+t}\)

  • expected present value of continuous temporary life annuity

\(\overline{a}_{x:\overline{t|}} = \overset{\circ}{e}_{x:\overline{t|}}\)

  • when interest rate is 0

\(Y = \ddot{a}_{\overline{t|}}\) when \(K_x \ge t\), else \(Y = \ddot{a}_{\overline{K_x+1|}}\)

  • present value random variable for annual life annuity that pays 1 at the beginning of the year until the moment of death, or \(t\) if earlier.

\(\ddot{a}_{x:\overline{t|}} = \sum_{k=0}^{t-1} ~ v^k ~ _{k|}p_x = \ddot{a}_x - ~_tE_x ~ \ddot{a}_{x+t}\)

  • expected present value of annual temporary life annuity due

\(\ddot{a}_{x:\overline{t|}} = 1 + e_{x:\overline{t|}} -~ _tp_x\)

  • when interest rate is 0

Deferred whole life annuity#

A \(n\)-year deferred life annuity pays a level benefit starting at time \(n\) and continuing until death.

\(_{u|}\overline{a}_{x} = \overline{a}_{x} - \overline{a}_{x+u}\)

  • continuous deferred life annuity as the difference of whole life annuities

\(_{u|}\ddot{a}_{x} = \ddot{a}_{x} - \ddot{a}_{x+u}\)

  • annual deferred annuity due as the difference of annual whole life annuities due

Certain and life annuity#

A common feature of pension benefits is that the pension annuity is guaranteed to be paid for some period even if the annuitant dies before the end of the period.

\(Y = ~ \overline{a}_{\overline{n|}}\) when \(T_x \le n\), else \(\overline{a}_{\overline{T_x|}}\)

  • present value random variable for continuous certain and life annuity

\(\overline{a}_{\overline{x:\overline{n|}}} = \overline{a}_{\overline{n|}} + ~_{n|}\overline{a}_{x}\)

  • can be computed as a continuous temporary certain annuity plus a deferred continuous whole life annuity

\(Y = \ddot{a}_{\overline{n|}}\) when \(K_x < n\), else \(\ddot{a}_{\overline{K_x+1|}}\)

  • present value random variable for annual certain and life annuity due

\(\ddot{a}_{\overline{x:\overline{n|}}} = \ddot{a}_{\overline{n|}} + ~_{n|}\ddot{a}_{x}\)

  • can be computed as an annual temporary certain annuity due, plus a deferred annual life annuity due

Life insurance twin#

Whole and Temporary Life Annuities (and Whole Life and Endowment Insurance) ONLY:

\(\overline{a}_x = \dfrac{1 - \overline{A}_x}{\delta}\)

\(\overline{A}_x = 1 - \delta ~ \overline{a}_x\)

  • continuous whole life insurance twin for continuous whole life annuity

\(\ddot{a}_x = \dfrac{1 - A_x}{d}\)

\(A_x = 1 - d ~ \ddot{a}_x\)

  • annual whole life insurance twin for annual life annuity due

\(\overline{a}_{x:\overline{t|}} = \dfrac{1 - \overline{A}_{x:\overline{t|}}}{\delta}\)

\(\overline{A}_{x:\overline{t|}} = 1 - \delta ~ \overline{a}_{x:\overline{t|}}\)

  • continuous endowment insurance twin for continuous temporary life annuity

\(\ddot{a}_{x:\overline{t|}} = \dfrac{1 - A_{x:\overline{t|}}}{d}\)

\(A_{x:\overline{t|}} = 1 - d ~ \ddot{a}_{x:\overline{t|}}\)

  • annual endowment insurance twin for annual temporary life annuity due

Variances#

The second moment of a life annuity is not easy to compute directly. However, for whole life and temporary life annuities, the variance can be calculated directly using the insurance twin equations.

Whole life annuity

\({^2}\overline{a}_x = \dfrac{1 - {^2}\overline{A}_x}{2 \delta}\)

\({^2}\overline{A}_x = 1 - (2 \delta) ~ {^2}\overline{a}_x\)

\(Var(\overline{a}_{x}) = \dfrac{{^2}\overline{A}_{x} - (\overline{A}_{x})^2}{\delta^2}\)

  • from doubling the force of interest of continuous whole life insurance

\({^2}\ddot{a}_x = \dfrac{1 - {^2}A_x}{2d - d^2}\)

\({^2}A_x = 1 - (2d - d^2) ~ {^2}\ddot{a}_x\)

\(Var(\ddot{a}_{x}) = \dfrac{{^2}\ddot{A}_{x} - ~(A_{x})^2}{d^2}\)

  • from doubling the force of interest of annual whole life insurance

Temporary life annuity

\({^2}\overline{a}_{x:\overline{t|}} = \dfrac{1 - {^2}\overline{A}_{x:\overline{t|}}}{2 \delta}\)

\({^2}\overline{A}_{x:\overline{t|}} = 1 - (2 \delta) ~ {^2}\overline{a}_{x:\overline{t|}}\)

\(Var(\overline{a}_{x:\overline{t|}}) = \dfrac{{^2}\overline{A}_{x:\overline{t|}} - (\overline{A}_{x:\overline{t|}})^2}{\delta^2}\)

  • from doubling the force of interest of continuous endowment insurance

\({^2}\ddot{a}_{x:\overline{t|}} = \dfrac{1 - {^2}A_{x:\overline{t|}}}{2d - d^2}\)

\({^2}A_{x:\overline{t|}} = 1 - (2d - d^2) ~ {^2}\ddot{a}_{x:\overline{t|}}\)

\(Var(\ddot{a}_{x:\overline{t|}}) = \dfrac{{^2}A_{x:\overline{t|}} - ~(A_{x:\overline{t|}})^2}{d^2}\)

  • from doubling the force of interest of annual endowment insurance

Immediate life annuity#

Benefit is paid at the end of the year, as long as the annuitant is alive, and can be related to the value of an annual life annuity due:

\(a_x = \ddot{a}_x - 1\)

  • whole life annuities

\(a_{x:\overline{t|}} = \ddot{a}_{x:\overline{t|}} - 1 + ~_tE_x\)

  • temporary life annuities

Varying life annuities#

Increasing annuity:

The amount of the annuity payment increases arithmetically with time.

\((\overline{Ia})_{x} = \int_{t=0}^{\infty} ~ t ~ v^t ~ _tp_x ~ dt\)

  • EPV of continuously increasing whole life annuity

\((I\ddot{a})_{x} = \sum_{k=0}^{\infty} ~ (k+1) ~ v^{k+1} ~ _{k}p_x\)

  • EPV of annual increasing whole life annuity due

\((\overline{Ia})_{x:\overline{t|}} = \int_{s=0}^{t} ~ s ~ v^s ~ _sp_x ~ ds\)

  • EPV of continuously increasing temporary life annuity

\((I\ddot{a})_{x:\overline{t|}} = \sum_{k=0}^{t-1} ~ (k+1) ~ v^{k+1} ~ _{k}p_x\)

  • EPV of annual increasing temporary life annuity due

Decreasing annuity:

The amount of the annuity payment decreases arithmetically with time. There are no decreasing whole life annuities.

\((\overline{Da})_{x:\overline{t|}} = \int_{s=0}^{t} ~ (t-s) ~ v^s ~ _sp_x ~ ds\)

  • EPV of continuously decreasing temporary life annuity (not defined for whole life)

\((D\ddot{a})_{x:\overline{t|}} = \sum_{k=0}^{t-1} ~ (t-k) ~ v^{k+1} ~ _{k}p_x\)

  • EPV of annual decreasing temporary life annuity due (not defined for whole life)

Identity relationships:

\((\overline{Da})_{x:\overline{t|}} + (\overline{Ia})_{x:\overline{t|}} = t ~ \overline{a}_{x:\overline{t|}}\)

  • the sum of continuous \(t\)-year decreasing and increasing life annuities is \(t\) times a \(t\)-year temporary annuity

\((D\ddot{a})_{x:\overline{t|}} + (I\ddot{a})_{x:\overline{t|}} = (t+1) ~ \ddot{a}_{x:\overline{t|}} \)

  • the sum of \(t\)-year annual decreasing and increasing life annuities due is \(t+1\) times a \(t\)-year temporary annuity

Probabilities and percentiles#

The value of annuity random variables always increases as a function of survival time. Hence calculating a percentile of a life annuity simply requires calculating the percentile of \(T\), then calculating the value of a temporary annuity.

Percentile of \(Y\):

\(t_{\pi} = S^{-1}(1 - \pi)\)

  • the \(100p\)-th percentile of the lifetime variable for whole life annuity can be obtained from looking up the inverse of the survival function at probability \(p\).

\(Y_{\pi} = b~\overline{a}_{\overline{t_{\pi}|}} = b~\dfrac{1 - v^{t_{\pi}}}{\delta}\)

  • the PV of the annuity r.v. that pays level benefit \(b\) up to time \(t_{\pi}\)

Probability of \(Y\):

Since annuity values monotonically increases with survaval time, to calculate he probability that the present value of an annuity is greater than some value \(Pr(Y \ge Y_{\pi})\), calculate the time \(t_{\pi}\) for which \(\overline{a}_{\overline{t_{\pi}|}}\) has the required value, then calculate the probability that time of death \(T_x\) is in that range.

Methods#

The Annuity class implements methods to compute the expected present value of life annuities

from actuarialmath import Annuity
import math
import describe
describe.methods(Annuity)
class Annuity - Compute present values and relationships of life annuities

    Methods:
    --------

    a_x(x, s, t, u, benefit, discrete):
      Compute EPV of life annuity from survival function

    immediate_annuity(x, s, t, b, variance):
      Compute EPV of immediate life annuity

    annuity_twin(A, discrete):
      Returns annuity from its WL or Endowment Insurance twin"

    insurance_twin(a, moment, discrete):
      Returns WL or Endowment Insurance twin from annuity

    annuity_variance(A2, A1, b, discrete):
      Compute variance from WL or endowment insurance twin

    whole_life_annuity(x, s, b, variance, discrete):
      Whole life annuity: a_x

    temporary_annuity(x, s, t, b, variance, discrete):
      Temporary life annuity: a_x:t

    deferred_annuity(x, s, u, t, b, discrete):
      Deferred life annuity n|t_a_x =  n+t_a_x - n_a_x

    certain_life_annuity(x, s, u, t, b, discrete):
      Certain and life annuity = certain + deferred

    increasing_annuity(x, s, t, b, discrete):
      Increasing annuity

    decreasing_annuity(x, s, t, b, discrete):
      Identity (Da)_x:n + (Ia)_x:n = (n+1) a_x:n temporary annuity

    Y_x(x, s, t, discrete):
      EPV of year t annuity benefit for life aged [x]+s: b_x[s]+s(t)

    Y_t(x, prob, discrete):
      T_x given percentile of the r.v. Y = PV of WL or Temporary Annuity

    Y_from_t(t, discrete):
      PV of insurance payment Y(t), given T_x

    Y_from_prob(x, prob, discrete):
      Percentile of annual or continuous WL annuity PV r.v. Y, given probability

    Y_plot(x, s, stop, benefit, T, discrete, ax, dual, title, color, alpha):
      Plot PV of annuity r.v. Y vs T

Examples#

Given a survival model, the a_x class method computes the EPV for arbitrary life annuity benefits, discount functions, and terms using numerical integration or summation. Common life annuity EPV’s are computed by calling the class methods whole_life_annuity, temporary_annuity, deferred_annuity, certain_life_annuity, increasing_insurance, decreasing insurance, or immediate_annuity. The examples below confirm the numerical relationships of

  • whole life immediate annuity with annuity-due

  • whole life with temporary and deferred annuities

  • certain-and-life annuity with deferred life annuity and annuity-certain

  • temporary life annuity with increasing and decreasing life annuities

def S(x, s, t):  # define a survival function
    return math.exp(-.00022*t - (.0000027*1.124**(x+s)*(1.124**t-1))/math.log(1.124))
life = Annuity().set_survival(S=S, minage=20, maxage=130)\
                .set_interest(i=0.05)
x, t = 50, 10
print(f"whole life annuity due for ({x}):          ", life.whole_life_annuity(x))
print(f"immediate whole life annuity for ({x}):    ", life.immediate_annuity(x))
print(f"{t}-year certain-and-life annuity for ({x}):", life.certain_life_annuity(x, u=t))
print(f"{t}-year deferred life annuity for ({x}):   ", life.deferred_annuity(x, u=t))
print(f"{t}-year annuity-certain for ({x}):         ", life.interest.annuity(t=t))
print(f"{t}-year increasing insurance for ({x}):    ", life.increasing_annuity(x, t=t))
print(f"{t}-year decreasing insurance for ({x}):    ", life.decreasing_annuity(x, t=t))
print(f"{t}-year temporary annuity for ({x}):       ", life.temporary_annuity(x, t=t))
print(f"{t//2}-year temporary annuity for ({x}):        ", life.temporary_annuity(x, t=t//2))
print(f"{t//2}-year deferred {t//2}-year temporary for ({x}):", 
      life.a_x(x, u=t//2, t=t//2))
whole life annuity for (50):               17.024534933684702
immediate whole life annuity for (50):     16.024534933684702
10-year certain-and-life annuity for (50): 17.077353318594994
10-year deferred annuity for (50):         8.96953164295094
10-year annuity-certain for (50):          8.107821675644052
10-year increasing insurance for (50):     40.9536356665489
10-year decreasing insurance for (50):     47.65140053152248
10-year temporary annuity for (50):        8.055003290733762
5-year temporary annuity for (50):         4.534416095954249
5-year deferred 5-year temporary for (50): 3.520587194779506

The Y_t class method returns the \(100p\)-th percentile of the survival function, then Y_from_t can be called to discount the benefits up to that time. The Y_from_prob class method performs both steps with one call. `Y_plot plots the annuity present value r.v. as a function of time.

def S(x, s, t):  # define a survival function
    return math.exp(-.00022*t - (.0000027*1.124**(x+s)*(1.124**t-1))/math.log(1.124))
life = Annuity().set_survival(S=S, minage=20, maxage=130)\
                .set_interest(i=0.05)
P = 0.75  # to find the 75-th percentile of Y
T = life.Y_t(x=20, prob=P, discrete=False)  # corresponding percentile of lifetime
life.Y_plot(x=20, stop=80, T=T, discrete=False)  # plot Y vs t, and annotate at time T
print('T:', T)   # call methods and compare results
print('p:', P, life.q_x(x=20, t=T))
print('Y:', life.Y_from_prob(x=20, prob=P, discrete=False), life.Y_from_t(t=T, discrete=False))
T: 74.02351166727799
p: 0.75 0.7499999999997666
Y: 19.94237852945247 19.94237852945247
_images/d12b61bbeda9b712d004d6dc4dab1b36bd62ce9d1d18f745912cd3a8efe98f02.png

By setting the `dual`` argument to True, the survival probability of (x) can be simultaneously plotted to annotate, say, the median survival lifetime.

def S(x, s, t):  # define a survival function
    return math.exp(-.00022*t - (.0000027*1.124**(x+s)*(1.124**t-1))/math.log(1.124))
life = Annuity().set_survival(S=S, minage=20, maxage=130)\
                .set_interest(i=0.05)
T = life.Y_t(x=20, prob=0.5, discrete=False)  # compute the median lifetime
K = life.Y_t(x=20, prob=0.5, discrete=True)   # plot using discrete approximation
life.Y_plot(x=20, stop=80, T=K, discrete=True, dual=True, title="median Z(K)")
print(f"S(K={K:.4f}):", life.p_x(x=20, t=K))  # survival function at integer age
print(f"S(T={T:.4f}):", life.p_r(x=20, t=T))  # survival function at fractional age
S(K=69.0000): 0.45995640909219604
S(T=68.0097): 0.49999343308443683
_images/6d4aed1b8d90465f5fe778c38a620f654769829108b548a2804168a62e7b28b7.png

SOA Question 5.6

For a group of 100 lives age x with independent future lifetimes, you are given:

  • Each life is to be paid 1 at the beginning of each year, if alive

  • \(A_x = 0.45\)

  • \(^2A_x = 0.22\)

  • \(i = 0.05\)

  • \(Y\) is the present value random variable of the aggregate payments.

Using the normal approximation to \(Y\), calculate the initial size of the fund needed to be 95% certain of being able to make the payments for these life annuities.

print("SOA Question 5.6:  (D) 1200")
life = Annuity().set_interest(i=0.05)
var = life.annuity_variance(A2=0.22, A1=0.45)
mean = life.annuity_twin(A=0.45)
print(life.portfolio_percentile(mean=mean, variance=var, prob=.95, N=100))
SOA Question 5.6:  (D) 1200
1200.6946732201702