Description Usage Format Value Methods References Examples
Class providing a variable annuity pricing engine with the underlying
reference risk neutral fund modeled as a Geometric Brownian Motion and the
intensity of mortality modeled by the Makeham intensity of mortality.
The value of the VA contract is estimated by means of the Monte Carlo
method if the policyholder cannot surrender (the so called "static"
approach), and by means of Least Squares Monte Carlo in case the
policyholder can surrender the contract (the "mixed" approach).
See References -[BMOP2011]
for a description of the mixed
and static approaches and the algorithm implemented by this class,
[LS2001]
for Least Squares Monte Carlo.
1 |
R6Class
object.
Object of R6Class
new
Constructor method with arguments:
product
va_product
object
interest
constant_parameters
object
with the interest rate
A
numeric
scalar argument of the intensity
of mortality function makeham
B
numeric
scalar argument of the intensity
of mortality function makeham
spot
numeric
scalar with the initial fund price
volatility
constant_parameters
object with
the volatility
dividends
constant_parameters
object with
the dividend rate
c
numeric
scalar argument of the intensity
of mortality function makeham
death_time
Returns the time of death index. If the death doesn't occur during the product time-line it returns the last index of the product time-line
simulate_financial_paths
Simulates npaths
paths
of the underlying fund of the VA contract and the discount factors
(interest rate) and saves them into private fields for later use.
simulate_mortality_paths
Simulates npaths
paths
of the intensity of mortality and saves them into private fields
for later use.
get_fund
Gets the i
-th path of the underlying fund
where i
goes from 1 to npaths
do_static
Estimates the VA contract value by means of the static approach (Monte Carlo), see References. It takes as arguments:
the_gatherer
gatherer
object to hold
the point estimates
npaths
positive integer with the number of paths to simulate
simulate
boolean to specify if the paths should be simulated from scratch, default is TRUE.
do_mixed
Estimates the VA contract by means of the mixed approach (Least Squares Monte Carlo), see References. It takes as arguments:
the_gatherer
gatherer
object to hold
the point estimates
npaths
positive integer with the number of paths to simulate
degree
positive integer with the maximum degree of the weighted Laguerre polynomials used in the least squares by LSMC
freq
string which contains the frequency of the surrender
decision. The default is "3m"
which corresponds to deciding
every three months if surrendering the contract or not.
simulate
boolean to specify if the paths should be simulated from scratch, default is TRUE.
get_discount
Arguments are i,j
.
Gets the j
-th discount factor corresponding to the i
-th
simulated path of the discount factors. This method must be implemented
by sub-classes.
fair_fee
Calculates the fair fee for a contract using the bisection method. Arguments are:
fee_gatherer
data_gatherer
object to hold
the point estimates
npaths
numeric
scalar with the number of MC
simulations to run
lower
numeric
scalar with the lower fee corresponding
to positive end of the bisection interval
upper
numeric
scalar with the upper fee corresponding
to the negative end of the bisection interval
mixed
boolean
specifying if the mixed method has
to be used. The default is FALSE
tol
numeric
scalar with the tolerance of the
bisection algorithm. Default is 1e-4
nmax
positive integer
with the maximum number of
iterations of the bisection algorithm
simulate
boolean specifying if financial and mortality paths should be simulated.
[BMOP2011] Bacinello A.R., Millossovich P., Olivieri A. ,Pitacco E., "Variable annuities: a unifying valuation approach." In: Insurance: Mathematics and Economics 49 (2011), pp. 285-297.
[LS2001] Longstaff F.A. e Schwartz E.S. Valuing american options by simulation: a simple least-squares approach. In: Review of Financial studies 14 (2001), pp. 113-147
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 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 | #Sets up the payoff as a roll-up of premiums with roll-up rate 1%
rate <- constant_parameters$new(0.01)
premium <- 100
rollup <- payoff_rollup$new(premium, rate)
#Ten years time-line
begin <- timeDate::timeDate("2016-01-01")
end <- timeDate::timeDate("2025-12-31")
#Age of the policyholder.
age <- 60
# A constant fee of 4% per year (365 days)
fee <- constant_parameters$new(0.04)
#Barrier for a state-dependent fee. The fee will be applied only if
#the value of the account is below the barrier
barrier <- Inf
#Withdrawal penalty applied in case the insured surrenders the contract
#It is a constant penalty in this case
penalty <- penalty_class$new(type = 1, 0.01)
#Sets up the contract with GMAB guarantee
contract <- GMAB$new(rollup, t0 = begin, t = end, age = age, fee = fee,
barrier = barrier, penalty = penalty)
#Interest rate
r <- constant_parameters$new(0.03)
#Initial value of the underlying fund
spot <- 100
#Volatility
vol <- constant_parameters$new(0.2)
#Dividend rate
div <- constant_parameters$new(0.0)
#Gatherer for the MC point estimates
the_gatherer <- mc_gatherer$new()
#Number of paths to simulate
no_of_paths <- 1e2
#Sets up the pricing engine specifying the va_contract, the interest rate
#the parameters of the Makeham intensity of mortality, the initial fund
#value, the volatility and dividends rate
engine <- va_mkh_engine$new(contract, r, A = 0.0001, B = 0.00035, spot,
volatility = vol, dividends = div, c = 1.075)
#Estimates the contract value by means of the static approach.
engine$do_static(the_gatherer, no_of_paths)
the_gatherer$get_results()
#Estimates the contract value by means of the mixed approach.
#To compare with the static approach we won't simulate the underlying
#fund paths again.
the_gatherer_2 <- mc_gatherer$new()
engine$do_mixed(the_gatherer_2, no_of_paths, degree = 3,
freq = "3m", simulate = FALSE)
the_gatherer_2$get_results()
|
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.