From 5126bda5369f666a09c76e6476ed0160eb5e9c45 Mon Sep 17 00:00:00 2001 From: Kainhofer Reinhold <reinhold.kainhofer@generali.com> Date: Wed, 26 Feb 2020 17:37:59 +0100 Subject: [PATCH] Dynamics step 1: Implement blockStart argument -) All cashflows and present values will start at time 'start' rather than at 0. This can be used to implement dynmics, etc. -) What is not yet implemented is to combine multiple tariff blocks into one single contract --- Auswertungen/2019-02-27_Bestimmung_Datum.xlsx | Bin 0 -> 15172 bytes R/HelperFunctions.R | 103 ++-- R/InsuranceContract.R | 201 ++++--- R/InsuranceParameters.R | 3 +- R/InsuranceTarif.R | 507 +++++++++--------- R/exportInsuranceContract_xlsx.R | 71 +-- .../Endowment_Dynamic_From0_Baseline.xlsx | Bin 0 -> 58713 bytes inst/Beispiele/Endowment_Dynamic_From5.xlsx | Bin 0 -> 70452 bytes inst/Beispiele/Example_Endowment.R | 152 ++++++ 9 files changed, 653 insertions(+), 384 deletions(-) create mode 100644 Auswertungen/2019-02-27_Bestimmung_Datum.xlsx create mode 100644 inst/Beispiele/Endowment_Dynamic_From0_Baseline.xlsx create mode 100644 inst/Beispiele/Endowment_Dynamic_From5.xlsx create mode 100644 inst/Beispiele/Example_Endowment.R diff --git a/Auswertungen/2019-02-27_Bestimmung_Datum.xlsx b/Auswertungen/2019-02-27_Bestimmung_Datum.xlsx new file mode 100644 index 0000000000000000000000000000000000000000..98f294c02b38517e8c41e5e81d06805aa4093286 GIT binary patch literal 15172 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 literal 0 HcmV?d00001 diff --git a/R/HelperFunctions.R b/R/HelperFunctions.R index 249c30a..b33d073 100644 --- a/R/HelperFunctions.R +++ b/R/HelperFunctions.R @@ -59,13 +59,31 @@ deathBenefit.annuityDecreasing = function(interest) { } mergeValues = function(starting, ending, t) { - rbind(starting[1:t,], ending[-1:-t,]) + # if either starting or ending is missing, always use the other, irrespective of t: + if (missing(ending) || is.null(ending)) { + starting + } else if (missing(starting) || is.null(starting)) { + ending + } else if (t == 0) { + ending + } else { + rbind(starting[1:t,], ending[-1:-t,]) + } } mergeValues3D = function(starting, ending, t) { - abind(starting[1:t,,], ending[-1:-t,,], along = 1) + # if either starting or ending is missing, always use the other, irrespective of t: + if (missing(ending) || is.null(ending)) { + starting + } else if (missing(starting) || is.null(starting)) { + ending + } else if (t == 0) { + ending + } else { + abind(starting[1:t,,], ending[-1:-t,,], along = 1) + } } # Caution: px is not neccessarily 1-qx, because we might also have dread diseases so that px=1-qx-ix! However, the ix is not used for the survival present value -calculatePVSurvival = function(px=1-qx, qx=1-px, advance, arrears=c(0), ..., m=1, mCorrection = list(alpha=1, beta=0), v=1) { +calculatePVSurvival = function(px = 1 - qx, qx = 1 - px, advance, arrears = c(0), ..., m = 1, mCorrection = list(alpha = 1, beta = 0), v = 1, start = 0) { # assuming advance and arrears have the same dimensions... init = advance[1]*0; l = max(length(qx), length(advance), length(arrears)); @@ -76,7 +94,7 @@ calculatePVSurvival = function(px=1-qx, qx=1-px, advance, arrears=c(0), ..., m=1 # TODO: Make this work for matrices (i.e. currently advance and arrears are assumed to be one-dimensional vectors) # TODO: Replace loop by better way (using Reduce?) res = rep(0, l+1); - for (i in l:1) { + for (i in l:(start + 1)) { # coefficients for the payments (including corrections for payments during the year (using the alpha(m) and beta(m)): advcoeff = mCorrection$alpha - mCorrection$beta*(1-p[i]*v); arrcoeff = mCorrection$alpha - (mCorrection$beta + 1/m)*(1-p[i]*v); @@ -87,64 +105,64 @@ calculatePVSurvival = function(px=1-qx, qx=1-px, advance, arrears=c(0), ..., m=1 } -calculatePVGuaranteed = function(advance, arrears=c(0), ..., m=1, mCorrection = list(alpha=1, beta=0), v=1) { +calculatePVGuaranteed = function(advance, arrears = c(0), ..., m = 1, mCorrection = list(alpha = 1, beta = 0), v = 1, start = 0) { # assuming advance and arrears have the same dimensions... init = advance[1]*0; l = max(length(advance), length(arrears)); - advance = pad0(advance, l, value=init); - arrears = pad0(arrears, l, value=init); + advance = pad0(advance, l, value = init); + arrears = pad0(arrears, l, value = init); # TODO: Make this work for matrices (i.e. currently advance and arrears are assumed to be one-dimensional vectors) # TODO: Replace loop by better way (using Reduce?) - res = rep(0, l+1); - for (i in l:1) { + res = rep(0, l + 1); + for (i in l:(start + 1)) { # coefficients for the payments (including corrections for payments during the year (using the alpha(m) and beta(m)): - advcoeff = mCorrection$alpha - mCorrection$beta*(1-v); - arrcoeff = mCorrection$alpha - (mCorrection$beta + 1/m)*(1-v); + advcoeff = mCorrection$alpha - mCorrection$beta * (1 - v); + arrcoeff = mCorrection$alpha - (mCorrection$beta + 1 / m) * (1 - v); # The actual recursion: - res[i] = advance[i]*advcoeff + arrears[i]*arrcoeff + v*res[i+1]; + res[i] = advance[i]*advcoeff + arrears[i]*arrcoeff + v*res[i + 1]; } res[1:l] } # TODO: So far, we are assuming, the costs array has sufficient time steps and does not need to be padded! -calculatePVCosts = function(px=1-qx, qx=1-px, costs, ..., v=1) { +calculatePVCosts = function(px = 1 - qx, qx = 1 - px, costs, ..., v = 1, start = 0) { l = max(length(qx), dim(costs)[1]); - p = pad0(px, l, value=0); + p = pad0(px, l, value = 0); costs = costs[1:l,,]; # Take the array structure from the cash flow array and initialize it with 0 res = costs*0; prev = res[1,,]*0; # Backward recursion starting from the last time: - for (i in l:1) { + for (i in l:(start + 1)) { # cat("values at iteration ", i, ": ", v, q[i], costs[i,,], prev); res[i,,] = costs[i,,] + v*p[i]*prev; - prev=res[i,,]; + prev = res[i,,]; } res } -calculatePVDeath = function(px, qx, benefits, ..., v=1) { +calculatePVDeath = function(px, qx, benefits, ..., v = 1, start = 0) { init = benefits[1]*0; # Preserve the possible array structure of the benefits -> vectorized calculations possible! l = max(length(qx), length(benefits)); - q = pad0(qx, l, value=1); - p = pad0(px, l, value=0); - benefits = pad0(benefits, l, value=init); + q = pad0(qx, l, value = 1); + p = pad0(px, l, value = 0); + benefits = pad0(benefits, l, value = init); # TODO: Make this work for matrices (i.e. currently benefits are assumed to be one-dimensional vectors) # TODO: Replace loop by better way (using Reduce?) - res = rep(init, l+1); - for (i in l:1) { + res = rep(init, l + 1); + for (i in l:(start + 1)) { # Caution: p_x is not neccessarily 1-q_x, because we might also have dread diseases, so that px=1-qx-ix! - res[i] = v*q[i]*benefits[i] + v*p[i]*res[i+1]; + res[i] = v * q[i] * benefits[i] + v * p[i] * res[i + 1]; } res[1:l] } -calculatePVDisease = function(px = 1 - qx - ix, qx = 1 - ix - px, ix = 1 - px - qx, benefits, ..., v = 1) { - init = benefits[1]*0; +calculatePVDisease = function(px = 1 - qx - ix, qx = 1 - ix - px, ix = 1 - px - qx, benefits, ..., v = 1, start = 0) { + init = benefits[1] * 0; l = min(length(ix), length(qx), length(benefits)); qx = pad0(qx, l, value = 1); ix = pad0(ix, l, value = 0); @@ -154,7 +172,7 @@ calculatePVDisease = function(px = 1 - qx - ix, qx = 1 - ix - px, ix = 1 - px - # TODO: Make this work for matrices (i.e. currently benefits are assumed to be one-dimensional vectors) # TODO: Replace loop by better way (using Reduce?) res = rep(init, l + 1); - for (i in l:1) { + for (i in l:(start + 1)) { res[i] = v * ix[i] * benefits[i] + v * px[i] * res[i + 1]; } res[1:l] @@ -195,16 +213,33 @@ correctionPaymentFrequency = function(i, m = 1, order = 0) { } #' @export -pad0 = function(v, l, value=0) { - if (l >= length(v)) { - c(v, rep(value, l - length(v))) - } else { - v[0:l] - } +pad0 = function(v, l, value = 0, start = 0) { + # 3 cases: desired length<=start => only 0 + # desired length within start+v => cut v + # desired length longer than start+v => pad with 0/value + if (l <= start) { + rep(0, l) + } else if (start <= l && l <= start + length(v)) { + c(rep(0, start), v[0:(l - start)]) + } else { + # Need padding + c(rep(0, start), v, rep(value, l - length(v) - start)) + } +} + +#' Set all entries of the given vector to 0 up until index 'start' +#' @export +head0 = function(v, start = 0) { + if (start == 0) { + v + } else { + c(rep(0, start), tail(v, -start)) + } } + #' @export -padLast = function(v, l) { - pad0(v, l, tail(v, n = 1)) +padLast = function(v, l, start = 0) { + pad0(v, l, value = tail(v, n = 1), start = start) } #' Taken from the R Cookbook: diff --git a/R/InsuranceContract.R b/R/InsuranceContract.R index 6137a45..09afc3a 100644 --- a/R/InsuranceContract.R +++ b/R/InsuranceContract.R @@ -28,6 +28,9 @@ InsuranceContract = R6Class( #### Caching values for this contract, initialized/calculated when the object is created Values = InsuranceContract.Values, + #### List of all tariff blocks (independently calculated, but combined to one contract, e.g. dynamic/sum increases) + blocks = list(), + #### Keeping the history of all contract changes during its lifetime history = list(), @@ -60,8 +63,7 @@ InsuranceContract = R6Class( } self$consolidateContractData(tarif = tarif, ...); -# browser(); - self$calculateContract(calculate = calculate); + self$calculateContract(calculate = calculate, start = self$Parameters$ContractData$blockStart); }, addHistorySnapshot = function(time = 0, comment = "Initial contract values", type = "Contract", params = self$Parameters, values = self$Values) { @@ -81,36 +83,36 @@ InsuranceContract = R6Class( consolidateContractData = function(...) { args = list(...); - + # Calculate YOB, age, contract closing etc. from each other # 1. Contract date (if not given) is NOW, unless age + YOB is given => Then year is derived as YOB+age if (is.null(self$Parameters$ContractData$contractClosing)) { if (!is.null(self$Parameters$ContractData$age) && !is.null(self$Parameters$ContractData$YOB)) { # Use current day, but determine year from YOB and age - self$Parameters$ContractData$contractClosing = Sys.Date() %>% + self$Parameters$ContractData$contractClosing = Sys.Date() %>% 'year<-'(self$Parameters$ContractData$YOB + self$Parameters$ContractData$age); } } - - # 2. Current age: If YOB is given, calculate from contract closing and YOB, otherwise assume 40 + + # 2. Current age: If YOB is given, calculate from contract closing and YOB, otherwise assume 40 if (is.null(self$Parameters$ContractData$age)) { if (is.null(self$Parameters$ContractData$YOB)) { self$Parameters$ContractData$age = 40; # No information to derive age => Assume 40 warning("InsuranceContract: Missing age, no information to derive age from YOB and contractClosing => Assuming default age 40. Tariff: ", self$tarif$name) } else { - self$Parameters$ContractData$age = year(self$Parameters$ContractData$contractClosing) - + self$Parameters$ContractData$age = year(self$Parameters$ContractData$contractClosing) - self$Parameters$ContractData$YOB; } } if (is.null(self$Parameters$ContractData$YOB)) { self$Parameters$ContractData$YOB = year(self$Parameters$ContractData$contractClosing) - self$Parameters$ContractData$age; } - + # Evaluate policy period, i.e. if a function is used, calculate its numeric value self$Parameters$ContractData$policyPeriod = valueOrFunction( self$Parameters$ContractData$policyPeriod, params = self$Parameters, values = self$Values); - + #### # # PREMIUM PAYMENT PERIOD (default: policyPeriod, can be given as function or numeric value) #### # @@ -127,7 +129,7 @@ InsuranceContract = R6Class( self$Parameters$ContractData$deferralPeriod = valueOrFunction( self$Parameters$ContractData$deferralPeriod, params = self$Parameters, values = self$Values); - + #### # # COSTS PARAMETERS: can be a function => evaluate it to get the real costs #### # @@ -178,50 +180,105 @@ InsuranceContract = R6Class( }, - calculateContract = function(calculate = "all") { - self$Values$transitionProbabilities = self$determineTransitionProbabilities(); + + + + calculateContract = function(calculate = "all", start = 0, preservePastPV = TRUE, recalculatePremiums = TRUE, recalculatePremiumSum = TRUE) { + self$Values$int = self$determineInternalValues(start = start) + self$Values$transitionProbabilities = mergeValues( + starting = self$Values$transitionProbabilities, + ending = self$determineTransitionProbabilities(start = start), + t = start) if (calculate == "probabilities") return(); - self$Values$cashFlowsBasic = self$determineCashFlowsBasic(); - self$Values$cashFlows = self$determineCashFlows(); - self$Values$unitPremiumSum = self$determinePremiumSum(); - self$Values$cashFlowsCosts = self$determineCashFlowsCosts(); + self$Values$cashFlowsBasic = mergeValues( + starting = self$Values$cashFlowsBasic, + ending = self$determineCashFlowsBasic(start = start), + t = start); + self$Values$cashFlows = mergeValues( + starting = self$Values$cashFlows, + ending = self$determineCashFlows(start = start), + t = start); + + if (recalculatePremiumSum) { + # Premium waiver: Premium sum is not affected by premium waivers, i.e. everything depending on the premium sum uses the original premium sum! + self$Values$unitPremiumSum = self$determinePremiumSum(start = start); + } + self$Values$cashFlowsCosts = mergeValues3D( + starting = self$Values$cashFlowsCosts, + ending = self$determineCashFlowsCosts(start = start), + t = start); if (calculate == "cashflows") return(); - - self$Values$presentValues = self$calculatePresentValues(); - self$Values$presentValuesCosts = self$calculatePresentValuesCosts(); + + + # Shall we re-calculate PV or preserve the old ones??? + pv = self$calculatePresentValues(start = start) + pvCost = self$calculatePresentValuesCosts(start = start) + oldPV = self$Values$presentValues + if (preservePastPV) { + # Preserve past present values, i.e. the PV represents the PV + # with the knowledge of the past, even though the future CF + # might have changed meanwhile, so the PV at time 0 is no + # longer the PV of the current cash flows... The PV at time t + # always represents the information available at time t, but no + # future chagnes. + # This is useful to preserver the PV information neede to + # calculate the premiums from the past. + if (!is.null(self$Values$presentValues)) { + self$Values$presentValues = self$Values$presentValues[1:NCOL(pv)] + } + self$Values$presentValues = mergeValues(starting = self$Values$presentValues, ending = pv, t = start) + self$Values$presentValuesCosts = mergeValues3D(starting = self$Values$presentValuesCosts, ending = pvCost, t = start) + } else { + # Recalculate present value for times before start, i.e. make all PV consistent with the current cash flows + self$Values$presentValues = pv + self$Values$presentValuesCosts = pvCost + } if (calculate == "presentvalues") return(); - + # the premiumCalculation function returns the premiums AND the cofficients, # so we have to extract the coefficients and store them in a separate variable - res = self$calculatePremiums(); + res = self$calculatePremiums(start = start); self$Values$premiumCoefficients = res[["coefficients"]]; + # TODO: Store premiums in a data.frame??? self$Values$premiums = res[["premiums"]] + self$Values$int$premiumCalculationTime = start if (calculate == "premiums") return(); - + +# TODO-start: +# the premiumCalculation function returns the premiums AND the cofficients, +# so we have to extract the coefficients and store them in a separate variable +# res = self$calculatePremiums(start = start); +# self$Values$premiumCoefficients = mergeValues(starting = self$Values$premiumCoefficients, ending=res[["coefficients"]], t = t); +# self$Values$premiums = mergeValues(starting= = res[["premiums"]] + # Update the cash flows and present values with the values of the premium - pvAllBenefits = self$calculatePresentValuesBenefits() - self$Values$presentValues = cbind(self$Values$presentValues, pvAllBenefits) + pvAllBenefits = self$calculatePresentValuesBenefits(start = start) + if (preservePastPV) { + self$Values$presentValues = mergeValues(starting = oldPV, ending = cbind(pv, pvAllBenefits), t = start) + } else { + self$Values$presentValues = cbind(pv, pvAllBenefits) + } - self$Values$absCashFlows = self$calculateAbsCashFlows(); - self$Values$absPresentValues = self$calculateAbsPresentValues(); + self$Values$absCashFlows = mergeValues(starting = self$Values$absCashFlows, ending = self$calculateAbsCashFlows(start = start), t = start); + self$Values$absPresentValues = mergeValues(starting = self$Values$absPresentValues, ending = self$calculateAbsPresentValues(start = start), t = start); if (calculate == "absvalues") return(); - - self$Values$reserves = self$calculateReserves(); - self$Values$reservesBalanceSheet = self$calculateReservesBalanceSheet(); + + self$Values$reserves = mergeValues(starting = self$Values$reserves, ending = self$calculateReserves(start = start), t = start); + self$Values$reservesBalanceSheet = mergeValues(starting = self$Values$reservesBalanceSheet,ending = self$calculateReservesBalanceSheet(start = start), t = start); if (calculate == "reserves") return(); - self$Values$basicData = self$getBasicDataTimeseries() - self$Values$premiumComposition = self$premiumAnalysis(); - self$Values$premiumCompositionSums = self$premiumCompositionSums(); - self$Values$premiumCompositionPV = self$premiumCompositionPV(); + self$Values$basicData = mergeValues(starting = self$Values$basicData, ending = self$getBasicDataTimeseries(start = start), t = start); + self$Values$premiumComposition = mergeValues(starting = self$Values$premiumComposition, ending = self$premiumAnalysis(start = start), t = start); + self$Values$premiumCompositionSums = mergeValues(starting = self$Values$premiumCompositionSums, ending = self$premiumCompositionSums(start = start), t = start); + self$Values$premiumCompositionPV = mergeValues(starting = self$Values$premiumCompositionPV, ending = self$premiumCompositionPV(start = start), t = start); if (calculate == "premiumcomposition") return(); - - self$profitParticipation(); + + self$profitParticipation(start = start); # TODO-start if (calculate == "profitparticipation") return(); - + self$addHistorySnapshot( - time = 0, - comment = "Initial contract values", + time = start, + comment = ifelse(start == 0, "Initial contract values", paste("Contract recalculation at time ", start)), type = "Contract", params = self$Parameters, values = self$Values @@ -229,53 +286,57 @@ InsuranceContract = R6Class( if (calculate == "history") return(); }, - determineTransitionProbabilities = function() { - self$tarif$getTransitionProbabilities(params = self$Parameters); + determineInternalValues = function(start = 0) { + self$tarif$getInternalValues(params = self$Parameters, start = start); + }, + + determineTransitionProbabilities = function(start = 0) { + self$tarif$getTransitionProbabilities(params = self$Parameters, values = self$Values, start = start); }, - determineCashFlowsBasic = function() { - self$tarif$getBasicCashFlows(params = self$Parameters); + determineCashFlowsBasic = function(start = 0) { + self$tarif$getBasicCashFlows(params = self$Parameters, values = self$Values, start = start); }, - determineCashFlows = function() { - self$tarif$getCashFlows(params = self$Parameters, values = self$Values); + determineCashFlows = function(start = 0) { + self$tarif$getCashFlows(params = self$Parameters, values = self$Values, start = start); }, - determinePremiumSum = function() { + determinePremiumSum = function(start = 0) { sum(self$Values$cashFlows$premiums_advance + self$Values$cashFlows$premiums_arrears); }, - determineCashFlowsCosts = function() { - self$tarif$getCashFlowsCosts(params = self$Parameters, values = self$Values); + determineCashFlowsCosts = function(start = 0) { + self$tarif$getCashFlowsCosts(params = self$Parameters, values = self$Values, start = start); }, - calculatePresentValues = function() { - self$tarif$presentValueCashFlows(params = self$Parameters, values = self$Values); + calculatePresentValues = function(start = 0) { + self$tarif$presentValueCashFlows(params = self$Parameters, values = self$Values, start = start); }, - calculatePresentValuesCosts = function() { - self$tarif$presentValueCashFlowsCosts(params = self$Parameters, values = self$Values); + calculatePresentValuesCosts = function(start = 0) { + self$tarif$presentValueCashFlowsCosts(params = self$Parameters, values = self$Values, start = start); }, - calculatePremiums = function() { - self$tarif$premiumCalculation(params = self$Parameters, values = self$Values); + calculatePremiums = function(start = 0) { + self$tarif$premiumCalculation(params = self$Parameters, values = self$Values, start = start); }, - calculatePresentValuesBenefits = function() { - self$tarif$presentValueBenefits(params = self$Parameters, values = self$Values); + calculatePresentValuesBenefits = function(start = 0) { + self$tarif$presentValueBenefits(params = self$Parameters, values = self$Values, start = start); }, - calculateAbsCashFlows = function() { - self$tarif$getAbsCashFlows(params = self$Parameters, values = self$Values); + calculateAbsCashFlows = function(start = 0) { + self$tarif$getAbsCashFlows(params = self$Parameters, values = self$Values, start = start); }, - calculateAbsPresentValues = function() { - self$tarif$getAbsPresentValues(params = self$Parameters, values = self$Values); + calculateAbsPresentValues = function(start = 0) { + self$tarif$getAbsPresentValues(params = self$Parameters, values = self$Values, start = start); }, - calculateReserves = function() { - self$tarif$reserveCalculation(params = self$Parameters, values = self$Values); + calculateReserves = function(start = 0) { + self$tarif$reserveCalculation(params = self$Parameters, values = self$Values, start = start); }, - calculateReservesBalanceSheet = function() { - self$tarif$reserveCalculationBalanceSheet(params = self$Parameters, values = self$Values); + calculateReservesBalanceSheet = function(start = 0) { + self$tarif$reserveCalculationBalanceSheet(params = self$Parameters, values = self$Values, start = start); }, - premiumAnalysis = function() { - self$tarif$premiumDecomposition(params = self$Parameters, values = self$Values); + premiumAnalysis = function(start = 0) { + self$tarif$premiumDecomposition(params = self$Parameters, values = self$Values, start = start); }, - premiumCompositionSums = function() { - self$tarif$calculateFutureSums(self$Values$premiumComposition); + premiumCompositionSums = function(start = 0) { + self$tarif$calculateFutureSums(self$Values$premiumComposition, start = start); }, - premiumCompositionPV = function() { - self$tarif$calculatePresentValues(self$Values$premiumComposition, params = self$Parameters); + premiumCompositionPV = function(start = 0) { + self$tarif$calculatePresentValues(self$Values$premiumComposition, params = self$Parameters, start = start); }, profitParticipation = function(...) { @@ -294,7 +355,7 @@ InsuranceContract = R6Class( }, - getBasicDataTimeseries = function() { + getBasicDataTimeseries = function(start = 0) { self$tarif$getBasicDataTimeseries(params = self$Parameters, values = self$Values); }, diff --git a/R/InsuranceParameters.R b/R/InsuranceParameters.R index 3c75578..5895c0d 100644 --- a/R/InsuranceParameters.R +++ b/R/InsuranceParameters.R @@ -95,6 +95,7 @@ InsuranceContract.ParameterDefaults = list( deferralPeriod = 0, # Aufschubzeit bei Leibrenten guaranteedPeriod = 0, # Garantiezeit bei Leibrenten contractClosing = NULL, # Contract closing date (day/month is relevant for balance sheet reserves) + blockStart = 0, # When the current tariff block starts (main block starts a 0, dynamic increases start leter!) premiumPayments = "in advance", # Prämienzahlungsweise (vor-/nachschüssig) benefitPayments = "in advance", # Leistungszahlungsweise (vor-/nachschüssig) @@ -166,7 +167,7 @@ InsuranceContract.ParameterDefaults = list( profitClass = NULL, profitRates = NULL # General, company-wide profit rates, key columns are year and profitClass ), - + Hooks = list( # Functions with signature function(x, params, values, ...), default NULL is equivalent to function(x, ...) {x} adjustCashFlows = NULL, diff --git a/R/InsuranceTarif.R b/R/InsuranceTarif.R index cc1caf8..2f0e8b2 100644 --- a/R/InsuranceTarif.R +++ b/R/InsuranceTarif.R @@ -65,6 +65,20 @@ InsuranceTarif = R6Class( self$Parameters }, + # Get some internal parameters cached (length of data.frames, policy periods cut at max.age, etc.) + getInternalValues = function(params, start = 0) { + p = c() + age = params$ContractData$technicalAge + maxAge = getOmega(params$ActuarialBases$mortalityTable) + policyPeriod = params$ContractData$policyPeriod + list( + l = min(maxAge - age, policyPeriod) + 1, + policyTerm = min(maxAge - age, policyPeriod), + premiumTerm = min(policyPeriod, params$ContractData$premiumPeriod) + ) + }, + + getAges = function(params) { ages = ages(params$ActuarialBases$mortalityTable, YOB = params$ContractData$YOB); age = params$ContractData$technicalAge; @@ -74,9 +88,10 @@ InsuranceTarif = R6Class( ages }, - getTransitionProbabilities = function(params) { + getTransitionProbabilities = function(params, values, start = 0) { age = params$ContractData$technicalAge; ages = self$getAges(params); + # TODO: Use the start parameter to include possible selection tables (i.e. contract/block starts at time 'start' => qx depend on when contract started, e.g. immediate annuities in DAV 2004-R) q = deathProbabilities(params$ActuarialBases$mortalityTable, YOB = params$ContractData$YOB, ageDifferences = params$ContractData$ageDifferences); if (age > 0) { q = q[-age:-1]; @@ -90,6 +105,7 @@ InsuranceTarif = R6Class( i = rep(0, length(q)); } i = pad0(i, length(q)); + # TODO: Implement case where invalidity/disease does NOT end the contract! df = data.frame(age = ages, q = q, i = i, p = 1 - q - i, row.names = ages - age) df }, @@ -103,144 +119,151 @@ InsuranceTarif = R6Class( # - for single premiums it will be c(1, 0, 0, ...), # - for increasing premiums it will be (1+increase)^(0:(premiumPeriod-1)) # and 0 after the premium period - getPremiumCF = function(len, params, values) { - premPeriod = min(params$ContractData$premiumPeriod, params$ContractData$policyPeriod, len); - if (is.null(params$ContractData$premiumIncrease)) { - pad0(rep(1, premPeriod - 1), len); + getPremiumCF = function(len, params, values, start = 0) { + premPeriod = min(params$ContractData$premiumPeriod, params$ContractData$policyPeriod, len); + if (is.null(params$ContractData$premiumIncrease)) { + pad0(rep(1, premPeriod - 1), len, start = start); + } else { + inc = valueOrFunction(params$ContractData$premiumIncrease, premiumPeriod = premPeriod, params = params, values = values) + if (is.vector(inc) && length(inc) > 1) { + # If premiumIncrease is (or returns) a vector, treat it as + # relative premium amounts, ie. c(1, 1.1, 1.2) means +10% of + # the initial premium for the second and third year + pad0(inc, len, start = start) } else { - inc = valueOrFunction(params$ContractData$premiumIncrease, premiumPeriod = premPeriod, params = params, values = values) - if (is.vector(inc) && length(inc) > 1) { - # If premiumIncrease is (or returns) a vector, treat it as - # relative premium amounts, ie. c(1, 1.1, 1.2) means +10% of - # the initial premium for the second and third year - pad0(inc, len) - } else { - pad0(inc ^ (0:(premPeriod - 1)), len) - } + pad0(inc ^ (0:(premPeriod - start - 1)), len, start = start) } + } }, - # Get the unit annuity cash flow (guaranteed and contingent) for the whole annuity payment period. + # Get the unit annuity cash flow (guaranteed and contingent) for the whole annuity payment period (after potential deferral period) # - For constant annuity it will be rep(1, annuityPeriod), # - for increasing annuities it will be (1+increase)^(0:(premiumPeriod-1)) # and 0 after the premium period - getAnnuityCF = function(len, params, values) { - annuityPeriod = min(params$ContractData$policyPeriod - params$ContractData$deferralPeriod, len); - if (is.null(params$ContractData$annuityIncrease)) { - pad0(rep(1, annuityPeriod), len); + getAnnuityCF = function(len, params, values, start = 0) { + annuityPeriod = min(params$ContractData$policyPeriod - params$ContractData$deferralPeriod, len); + if (is.null(params$ContractData$annuityIncrease)) { + pad0(rep(1, annuityPeriod), len, start = start); + } else { + inc = valueOrFunction(params$ContractData$annuityIncrease, annuityPeriod = annuityPeriod, params = params, values = values) + if (is.vector(inc) && length(inc) > 1) { + # If annuityIncrease is (or returns) a vector, treat it as + # relative annuity amounts, ie. c(1, 1.1, 1.2) means +10% of + # the initial annuity for the second and third year + pad0(inc, len, start = start) } else { - inc = valueOrFunction(params$ContractData$annuityIncrease, annuityPeriod = annuityPeriod, params = params, values = values) - if (is.vector(inc) && length(inc) > 1) { - # If annuityIncrease is (or returns) a vector, treat it as - # relative annuity amounts, ie. c(1, 1.1, 1.2) means +10% of - # the initial annuity for the second and third year - pad0(inc, len) - } else { - # a numeric value means constant yearly increases (multiplicative) - pad0(inc ^ (0:annuityPeriod), len) - } + # a numeric value means constant yearly increases (multiplicative) + pad0(inc ^ (0:annuityPeriod), len, start = start) } + } }, - # Get the unit death cash flow for the whole protection period. + # Get the unit death cash flow for the whole protection period (after potential deferral period!) # - For constant death benefit it will be rep(1, policyPeriod), # - for linearly decreasing sum insured it will be (policyPeriod:0)/policyPeriod - getDeathCF = function(len, params, values) { - period = params$ContractData$policyPeriod - params$ContractData$deferralPeriod; - if (is.null(params$ContractData$deathBenefit)) { - pad0(rep(1, period), len) + getDeathCF = function(len, params, values, start = 0) { + period = params$ContractData$policyPeriod - params$ContractData$deferralPeriod; + if (is.null(params$ContractData$deathBenefit)) { + pad0(rep(1, period), len, start = start) + } else { + benefit = valueOrFunction(params$ContractData$deathBenefit, len = len, params = params, values = values) + if (is.vector(benefit) && length(benefit) > 1) { + # If deathBenefit is (or returns) a vector, treat it as + # relative annuity amounts, ie. c(1, 1.1, 1.2) means +10% of + # the initial annuity for the second and third year + pad0(benefit, len, start = start) } else { - benefit = valueOrFunction(params$ContractData$deathBenefit, len = len, params = params, values = values) - if (is.vector(benefit) && length(benefit) > 1) { - # If deathBenefit is (or returns) a vector, treat it as - # relative annuity amounts, ie. c(1, 1.1, 1.2) means +10% of - # the initial annuity for the second and third year - pad0(benefit, len) - } else { - # constant death benefit - pad0(rep(benefit, period), len) - } + # constant death benefit + pad0(rep(benefit, period), len, start = start) } + } }, - getBasicCashFlows = function(params) { - age = params$ContractData$technicalAge; - maxAge = getOmega(params$ActuarialBases$mortalityTable) - policyPeriod = params$ContractData$policyPeriod; - deferralPeriod = params$ContractData$deferralPeriod; - guaranteedPeriod = params$ContractData$guaranteedPeriod; - maxlen = min(maxAge - age, policyPeriod); - - cf = data.frame( - guaranteed = rep(0, maxlen + 1), - survival = rep(0, maxlen + 1), - death = rep(0, maxlen + 1), - disease = rep(0, maxlen + 1), - sumInsured = rep(1, maxlen + 1) - ); - if (self$tariffType == "annuity") { - annuityPeriod = maxlen - deferralPeriod; - annuityCF = self$getAnnuityCF(len = annuityPeriod, params = params, values = values) - # guaranteed payments exist only with annuities (first n years of the payment) - cf$guaranteed = c( - rep(0, deferralPeriod), - head(annuityCF, n = guaranteedPeriod), - rep(0, max(0, maxlen + 1 - deferralPeriod - guaranteedPeriod))); - cf$survival = c( - rep(0, deferralPeriod + guaranteedPeriod), - if (guaranteedPeriod > 0) tail(annuityCF, n = -guaranteedPeriod) else annuityCF, - # rep(1, max(0, maxlen - deferralPeriod - guaranteedPeriod)), - 0) - cf$sumInsured = c( - rep(1, deferralPeriod), # increases/decreases of annuities happen only after deferral! - annuityCF, - 0) - - } else if (self$tariffType == "terme-fix") { - cf$guaranteed = c(rep(0, policyPeriod), 1); - - } else if (self$tariffType == "dread-disease") { - cf$disease = c( - rep(0, deferralPeriod), - rep(1, maxlen - deferralPeriod), - 0); + getBasicCashFlows = function(params, values, start = 0) { + deferralPeriod = params$ContractData$deferralPeriod; + guaranteedPeriod = params$ContractData$guaranteedPeriod; + + zeroes = pad0(0, values$int$l) + + cf = data.frame( + guaranteed = zeroes, + survival = zeroes, + death = zeroes, + disease = zeroes, + sumInsured = c(rep(0, start), rep(1, values$int$l - start)) + ); + if (self$tariffType == "annuity") { + annuityPeriod = values$int$policyTerm - deferralPeriod; + # getAnnuityCF correctly handles start inside and after deferral period! + annuityCF = self$getAnnuityCF(len = annuityPeriod, params = params, values = values, start = max(0, start - deferralPeriod)) + # guaranteed payments exist only with annuities (first n years of the payment) + cf$guaranteed = pad0( + c( + rep(0, deferralPeriod), + head(annuityCF, n = guaranteedPeriod) + ), values$int$l); + cf$survival = pad0(c( + rep(0, deferralPeriod + guaranteedPeriod), + if (guaranteedPeriod > 0) tail(annuityCF, n = -guaranteedPeriod) else annuityCF, + 0), values$int$l) + + if (start <= deferralPeriod) { + # start current contract block within deferral period + # increases/decreases of annuities happen only after deferral! + cf$sumInsured = c(rep(0, start), rep(1, deferralPeriod - start), annuityCF, 0) } else { - # For endowments, use the death factor here in the basic death CF - # to fix the relation of death to survival benefit - deathCF = self$getDeathCF(maxlen - deferralPeriod, params = params, values = values) - - if (self$tariffType == "endowment" || self$tariffType == "pureendowment" || self$tariffType == "endowment + dread-disease") { - cf$survival = c(rep(0, policyPeriod), 1); - } - if (self$tariffType == "endowment" || self$tariffType == "wholelife" || self$tariffType == "endowment + dread-disease") { - cf$death = c( - rep(0, deferralPeriod), - deathCF, - 0); - cf$sumInsured = c( - rep(0, deferralPeriod), - deathCF, - 1); - } - if (self$tariffType == "endowment + dread-disease") { - cf$disease = c( - rep(0, deferralPeriod), - rep(1, maxlen - deferralPeriod), - 0); - } + # start current contract block after deferral period + cf$sumInsured = c(rep(0, deferralPeriod), annuityCF, 0) + } + + + } else if (self$tariffType == "terme-fix") { + # Begin of bock does not have any influence + cf$guaranteed = c(rep(0, values$int$policyTerm), 1); + + } else if (self$tariffType == "dread-disease") { + # potential Payments start after deferral period and after start of this block + cf$disease = c( + rep(0, max(deferralPeriod, start)), + rep(1, values$int$l - 1 - max(deferralPeriod, start)), + 0); + } else { + # For endowments, use the death factor here in the basic death CF + # to fix the relation of death to survival benefit + deathCF = self$getDeathCF(values$int$l - 1 - deferralPeriod, params = params, values = values, start = max(0, start - deferralPeriod)) + + if (self$tariffType == "endowment" || self$tariffType == "pureendowment" || self$tariffType == "endowment + dread-disease") { + cf$survival = c(rep(0, values$int$policyTerm), 1); # start of block does not have any influence! + } + if (self$tariffType == "endowment" || self$tariffType == "wholelife" || self$tariffType == "endowment + dread-disease") { + # start of block already properly handled in deathCF + cf$death = c( + rep(0, deferralPeriod), + deathCF, + 0); + cf$sumInsured = c( + rep(0, deferralPeriod), + deathCF, + 1); + } + if (self$tariffType == "endowment + dread-disease") { + cf$disease = c( + rep(0, max(deferralPeriod, start)), + rep(1, values$int$l - 1 - max(deferralPeriod, start)), + 0); } - cf + } + cf }, - getCashFlows = function(params, values) { + getCashFlows = function(params, values, start = 0) { age = params$ContractData$technicalAge; - maxAge = getOmega(params$ActuarialBases$mortalityTable) if (is.null(values$cashFlowsBasic)) { - values$cashFlowsBasic = self$getBasicCashFlows(params); + values$cashFlowsBasic = self$getBasicCashFlows(params, values, start = start); } - cflen = length(values$cashFlowsBasic$survival); - zeroes = pad0(0, cflen); + cflen = values$int$l + zeroes = pad0(0, cflen) ages = pad0(self$getAges(params), cflen); cf = data.frame( premiums_advance = zeroes, @@ -259,7 +282,7 @@ InsuranceTarif = R6Class( # Premiums: if (!params$ContractState$premiumWaiver) { - premiums = self$getPremiumCF(len = cflen, params = params, values = values) + premiums = self$getPremiumCF(len = cflen, params = params, values = values, start = start) if (params$ContractData$premiumPayments == "in advance") { cf$premiums_advance = premiums; } else { @@ -293,29 +316,21 @@ InsuranceTarif = R6Class( applyHook(params$Hooks$adjustCashFlows, cf, params, values) }, - getCashFlowsCosts = function(params, values) { - age = params$ContractData$technicalAge; - maxAge = getOmega(params$ActuarialBases$mortalityTable) - policyPeriod = params$ContractData$policyPeriod; - premiumPeriod = params$ContractData$premiumPeriod; - - maxlen = min(maxAge - age, policyPeriod) + 1; - policyPeriod = min(maxAge - age, policyPeriod); - premiumPeriod = min(policyPeriod, premiumPeriod); - + getCashFlowsCosts = function(params, values, start = 0) { + # Cost cash flows start at block start time (function argument "start" => one-off alpha costs start are charged at that time!) dm = dim(params$Costs); dmnames = dimnames(params$Costs); - cf = array(0, dim = list(maxlen, dm[1], dm[2]), dimnames = list(0:(maxlen - 1), dmnames[[1]], dmnames[[2]])); - cf[1,,] = cf[1,,] + params$Costs[,,"once"] - for (i in 1:premiumPeriod) { + cf = array(0, dim = list(values$int$l, dm[1], dm[2]), dimnames = list(0:(values$int$l - 1), dmnames[[1]], dmnames[[2]])); + cf[start + 1,,] = cf[start + 1,,] + params$Costs[,,"once"] + for (i in (start + 1):values$int$premiumTerm) { cf[i,,] = cf[i,,] + params$Costs[,,"PremiumPeriod"]; } - if (premiumPeriod < policyPeriod) { - for (i in (premiumPeriod + 1):policyPeriod) { + if (values$int$premiumTerm < values$int$policyTerm) { + for (i in (max(start, values$int$premiumTerm) + 1):values$int$policyTerm) { cf[i,,] = cf[i,,] + params$Costs[,,"PremiumFree"]; } } - for (i in 1:policyPeriod) { + for (i in (start + 1):values$int$policyTerm) { cf[i,,] = cf[i,,] + params$Costs[,,"PolicyPeriod"]; } @@ -331,79 +346,78 @@ InsuranceTarif = R6Class( applyHook(params$Hooks$adjustCashFlowsCosts, cf, params, values) }, - presentValueCashFlows = function(cashFlows, params, values) { + presentValueCashFlows = function(cashFlows, params, values, start = 0) { - len = length(values$cashFlows$premiums_advance); qq = self$getTransitionProbabilities(params); - qx = pad0(qq$q, len); - ix = pad0(qq$i, len); - px = pad0(qq$p, len); + qx = pad0(qq$q, values$int$l); + ix = pad0(qq$i, values$int$l); + px = pad0(qq$p, values$int$l); i = params$ActuarialBases$i; v = 1/(1 + i); benefitFreqCorr = correctionPaymentFrequency(i = i, - m = params$ContractData$benefitFrequency, - order = params$ActuarialBases$benefitFrequencyOrder); + m = params$ContractData$benefitFrequency, + order = params$ActuarialBases$benefitFrequencyOrder); premiumFreqCorr = correctionPaymentFrequency(i = i, - m = params$ContractData$premiumFrequency, - order = params$ActuarialBases$premiumFrequencyOrder); + m = params$ContractData$premiumFrequency, + order = params$ActuarialBases$premiumFrequencyOrder); + # TODO: Calculate all present values only from start time of block onwards! pvRefund = calculatePVDeath( - px, qx, - values$cashFlows$death_GrossPremium, - v = v); + px, qx, + values$cashFlows$death_GrossPremium, + v = v, start = start); pvRefundPast = calculatePVDeath( - px, qx, - values$cashFlows$death_Refund_past, - v = v) * (values$cashFlows[,"death_GrossPremium"] - values$cashFlows[,"premiums_advance"]); + px, qx, + values$cashFlows$death_Refund_past, + v = v, start = start) * (values$cashFlows[,"death_GrossPremium"] - values$cashFlows[,"premiums_advance"]); pv = cbind( premiums = calculatePVSurvival( - px, qx, - values$cashFlows$premiums_advance, values$cashFlows$premiums_arrears, - m = params$ContractData$premiumFrequency, mCorrection = premiumFreqCorr, - v = v), + px, qx, + values$cashFlows$premiums_advance, values$cashFlows$premiums_arrears, + m = params$ContractData$premiumFrequency, mCorrection = premiumFreqCorr, + v = v, start = start), guaranteed = calculatePVGuaranteed( - values$cashFlows$guaranteed_advance, values$cashFlows$guaranteed_arrears, - m = params$ContractData$benefitFrequency, mCorrection = benefitFreqCorr, - v = v), + values$cashFlows$guaranteed_advance, values$cashFlows$guaranteed_arrears, + m = params$ContractData$benefitFrequency, mCorrection = benefitFreqCorr, + v = v, start = start), survival = calculatePVSurvival( - px, qx, - values$cashFlows$survival_advance, values$cashFlows$survival_arrears, - m = params$ContractData$benefitFrequency, mCorrection = benefitFreqCorr, - v = v), + px, qx, + values$cashFlows$survival_advance, values$cashFlows$survival_arrears, + m = params$ContractData$benefitFrequency, mCorrection = benefitFreqCorr, + v = v, start = start), death_SumInsured = calculatePVDeath( - px, qx, - values$cashFlows$death_SumInsured, - v = v), + px, qx, + values$cashFlows$death_SumInsured, + v = v, start = start), disease_SumInsured = calculatePVDisease( - px, qx, ix, - values$cashFlows$disease_SumInsured, v = v), + px, qx, ix, + values$cashFlows$disease_SumInsured, v = v, start = start), death_GrossPremium = pvRefund, death_Refund_past = pvRefundPast, death_Refund_future = pvRefund - pvRefundPast, death_PremiumFree = calculatePVDeath( - px, qx, - values$cashFlows$death_PremiumFree, v = v) + px, qx, + values$cashFlows$death_PremiumFree, v = v, start = start) ); - rownames(pv) <- pad0(rownames(qq), len); + rownames(pv) <- pad0(rownames(qq), values$int$l); pv }, - presentValueCashFlowsCosts = function(params, values) { - len = dim(values$cashFlowsCosts)[1]; + presentValueCashFlowsCosts = function(params, values, start = 0) { + len = values$int$l; q = self$getTransitionProbabilities(params); qx = pad0(q$q, len); px = pad0(q$p, len); - v = 1/(1 + params$ActuarialBases$i) - pvc = calculatePVCosts(px, qx, values$cashFlowsCosts, v = v); + pvc = calculatePVCosts(px, qx, values$cashFlowsCosts, v = v, start = start); pvc }, # Cost values (CF, present values, etc.) are an Tx5x3 matrix => convert to Tx15 matrix (alpha | Zillmer | beta | gamma) - costValuesAsMatrix = function(costValues) { + costValuesAsMatrix = function(costValues, start = 0) { dm = dim(costValues); nm = dimnames(costValues); colnames = t(outer(nm[[2]], nm[[3]], paste, sep = ".")); @@ -414,7 +428,7 @@ InsuranceTarif = R6Class( res }, - getAbsCashFlows = function(params, values) { + getAbsCashFlows = function(params, values, start = 0) { # TODO: Set up a nice list with coefficients for each type of cashflow, # rather than multiplying each item manually (this also mitigates the risk @@ -450,7 +464,7 @@ InsuranceTarif = R6Class( cbind(values$cashFlows, values$cashFlowsCosts) }, - getAbsPresentValues = function(params, values) { + getAbsPresentValues = function(params, values, start = 0) { pv = values$presentValues; #pv[,"age"] = pv[,"premiums"]; @@ -472,7 +486,7 @@ InsuranceTarif = R6Class( }, - presentValueBenefits = function(params, values) { + presentValueBenefits = function(params, values, start = 0) { # TODO: Here we don't use the securityLoading parameter => Shall it be used or are these values to be understood without additional security loading? benefits = values$presentValues[,"survival"] + values$presentValues[,"guaranteed"] + @@ -496,9 +510,10 @@ InsuranceTarif = R6Class( # When getPremiumCoefficients is called, the values$premiums array has NOT been filled! Instead, # some of the premium fields (all required for the current calculation) have # been set in the passed "premiums" argument. - getPremiumCoefficients = function(type="gross", coeffBenefits, coeffCosts, premiums, params, values) { + getPremiumCoefficients = function(type = "gross", coeffBenefits, coeffCosts, premiums, params, values, start = 0) { # Merge a possibly passed loadings override with the defaults of this class: securityLoading = valueOrFunction(params$Loadings$security, params = params, values = values); + t = as.character(start) coeff = list( "SumInsured" = list("benefits" = coeffBenefits*0, "costs" = coeffCosts*0), @@ -512,7 +527,7 @@ InsuranceTarif = R6Class( coeff.benefits = (1 + securityLoading); if (type == "gross") { # TODO: How to include this into the Zillmer premium calculation? - coeff.benefits = coeff.benefits * (1 + sum(values$presentValuesCosts["0", c("alpha", "beta", "gamma"), "NetPremium"]) / values$presentValues[["0","premiums"]]) + coeff.benefits = coeff.benefits * (1 + sum(values$presentValuesCosts[t, c("alpha", "beta", "gamma"), "NetPremium"]) / values$presentValues[[t,"premiums"]]) } coeff[["SumInsured"]][["benefits"]][["guaranteed"]] = coeff.benefits; coeff[["SumInsured"]][["benefits"]][["survival"]] = coeff.benefits; @@ -564,30 +579,36 @@ InsuranceTarif = R6Class( coeff }, - premiumCalculation = function(params, values) { + premiumCalculation = function(params, values, start = 0) { loadings = params$Loadings; sumInsured = params$ContractData$sumInsured values$premiums = c("unit.net" = 0, "unit.Zillmer" = 0, "unit.gross" = 0, "net" = 0, "Zillmer" = 0, "gross" = 0, "written" = 0); coefficients = list("gross" = c(), "Zillmer" = c(), "net" = c()); + # Get the present values of the premiums, claims and costs at time 'start' (where the premium is to be calculated) + t = as.character(start) + pv = values$presentValues[t,] + pvCost = values$presentValuesCosts[t,,] + + # net, gross and Zillmer premiums are calculated from the present values using the coefficients on each present value as described in the formulas document - coeff = self$getPremiumCoefficients("gross", values$presentValues["0",]*0, values$presentValuesCosts["0",,]*0, premiums = values$premiums, params = params, values = values) - enumerator = sum(coeff[["SumInsured"]][["benefits"]] * values$presentValues["0",]) + sum(coeff[["SumInsured"]][["costs"]] * values$presentValuesCosts["0",,]); - denominator = sum(coeff[["Premium" ]][["benefits"]] * values$presentValues["0",]) + sum(coeff[["Premium" ]][["costs"]] * values$presentValuesCosts["0",,]); + coeff = self$getPremiumCoefficients("gross", pv * 0, pvCost * 0, premiums = values$premiums, params = params, values = values, start = start) + enumerator = sum(coeff[["SumInsured"]][["benefits"]] * pv) + sum(coeff[["SumInsured"]][["costs"]] * pvCost); + denominator = sum(coeff[["Premium" ]][["benefits"]] * pv) + sum(coeff[["Premium" ]][["costs"]] * pvCost); values$premiums[["unit.gross"]] = enumerator/denominator * (1 + loadings$ongoingAlphaGrossPremium); values$premiums[["gross"]] = values$premiums[["unit.gross"]] * sumInsured; coefficients[["gross"]] = coeff; - coeff = self$getPremiumCoefficients("net", values$presentValues["0",]*0, values$presentValuesCosts["0",,]*0, premiums = values$premiums, params = params, values = values) - enumerator = sum(coeff[["SumInsured"]][["benefits"]] * values$presentValues["0",]) + sum(coeff[["SumInsured"]][["costs"]] * values$presentValuesCosts["0",,]); - denominator = sum(coeff[["Premium" ]][["benefits"]] * values$presentValues["0",]) + sum(coeff[["Premium" ]][["costs"]] * values$presentValuesCosts["0",,]); + coeff = self$getPremiumCoefficients("net", pv*0, pvCost*0, premiums = values$premiums, params = params, values = values, start = start) + enumerator = sum(coeff[["SumInsured"]][["benefits"]] * pv) + sum(coeff[["SumInsured"]][["costs"]] * pvCost); + denominator = sum(coeff[["Premium" ]][["benefits"]] * pv) + sum(coeff[["Premium" ]][["costs"]] * pvCost); values$premiums[["unit.net"]] = enumerator/denominator; values$premiums[["net"]] = values$premiums[["unit.net"]] * sumInsured; coefficients[["net"]] = coeff; - coeff = self$getPremiumCoefficients("Zillmer", values$presentValues["0",]*0, values$presentValuesCosts["0",,]*0, premiums = values$premiums, params = params, values = values); - enumerator = sum(coeff[["SumInsured"]][["benefits"]] * values$presentValues["0",]) + sum(coeff[["SumInsured"]][["costs"]] * values$presentValuesCosts["0",,]); - denominator = sum(coeff[["Premium" ]][["benefits"]] * values$presentValues["0",]) + sum(coeff[["Premium" ]][["costs"]] * values$presentValuesCosts["0",,]); + coeff = self$getPremiumCoefficients("Zillmer", pv * 0, pvCost * 0, premiums = values$premiums, params = params, values = values, start = start); + enumerator = sum(coeff[["SumInsured"]][["benefits"]] * pv) + sum(coeff[["SumInsured"]][["costs"]] * pvCost); + denominator = sum(coeff[["Premium" ]][["benefits"]] * pv) + sum(coeff[["Premium" ]][["costs"]] * pvCost); values$premiums[["unit.Zillmer"]] = enumerator/denominator; values$premiums[["Zillmer"]] = values$premiums[["unit.Zillmer"]] * sumInsured; coefficients[["Zillmer"]] = coeff; @@ -614,12 +635,12 @@ InsuranceTarif = R6Class( partnerRebate = valueOrFunction(loadings$partnerRebate, params = params, values = values); - pv.unitcosts = values$presentValuesCosts["0","unitcosts","SumInsured"] * sumInsured + - values$presentValuesCosts["0","unitcosts","SumPremiums"] * values$unitPremiumSum * values$premiums[["gross"]] + - values$presentValuesCosts["0","unitcosts","GrossPremium"] * values$premiums[["gross"]] + - values$presentValuesCosts["0","unitcosts","NetPremium"] * values$premiums[["net"]] + - values$presentValuesCosts["0","unitcosts","Constant"]; - premium.unitcosts = pv.unitcosts / values$presentValues[["0", "premiums"]] + valueOrFunction(loadings$unitcosts, params = params, values = values); + pv.unitcosts = pvCost["unitcosts","SumInsured"] * sumInsured + + pvCost["unitcosts","SumPremiums"] * values$unitPremiumSum * values$premiums[["gross"]] + + pvCost["unitcosts","GrossPremium"] * values$premiums[["gross"]] + + pvCost["unitcosts","NetPremium"] * values$premiums[["net"]] + + pvCost["unitcosts","Constant"]; + premium.unitcosts = pv.unitcosts / pv[["premiums"]] + valueOrFunction(loadings$unitcosts, params = params, values = values); values$premiums[["unitcost"]] = premium.unitcosts; @@ -635,21 +656,22 @@ InsuranceTarif = R6Class( list("premiums" = values$premiums, "coefficients" = coefficients) }, - reserveCalculation = function(params, values) { + reserveCalculation = function(params, values, start = 0) { + t = as.character(start) securityFactor = (1 + valueOrFunction(params$Loadings$security, params = params, values = values)); ppScheme = params$ProfitParticipation$profitParticipationScheme; # Net, Zillmer and Gross reserves resNet = values$absPresentValues[,"benefitsAndRefund"] * securityFactor - values$premiums[["net"]] * values$absPresentValues[,"premiums.unit"]; - BWZcorr = values$absPresentValues["0", "Zillmer"] / values$absPresentValues["0", "premiums"] * values$absPresentValues[,"premiums"]; + BWZcorr = values$absPresentValues[t, "Zillmer"] / values$absPresentValues[t, "premiums"] * values$absPresentValues[,"premiums"]; resZ = resNet - BWZcorr; resAdeq = values$absPresentValues[,"benefitsAndRefund"] * securityFactor + - values$absPresentValues[,"alpha"] + values$absPresentValues[,"beta"] + values$absPresentValues["gamma"] - + values$absPresentValues[,"alpha"] + values$absPresentValues[,"beta"] + values$absPresentValues[,"gamma"] - values$premiums[["gross"]] * values$absPresentValues[,"premiums.unit"]; #values$premiums[["Zillmer"]] * values$absPresentValues[,"premiums"]; - resGamma = values$absPresentValues[,"gamma"] - values$absPresentValues["0", "gamma"] / values$absPresentValues["0", "premiums"] * values$absPresentValues[,"premiums"] + resGamma = values$absPresentValues[,"gamma"] - values$absPresentValues[t, "gamma"] / values$absPresentValues[t, "premiums"] * values$absPresentValues[,"premiums"] advanceProfitParticipation = 0; if (!is.null(ppScheme)) { @@ -657,17 +679,17 @@ InsuranceTarif = R6Class( } resConversion = (resZ + resGamma) * (1 - advanceProfitParticipation); - # Alpha refund: Distribute alpha-costs to 5 year (or if shorter, the policy period): - r = min(params$ContractData$policyPeriod, 5); + # Alpha refund: Distribute alpha-costs to 5 years (or if shorter, the policy period), always starting at time 'start': + r = min(params$ContractData$policyPeriod - start, 5); ZillmerSoFar = Reduce("+", values$absCashFlows$Zillmer, accumulate = TRUE); ZillmerTotal = sum(values$absCashFlows$Zillmer); len = length(ZillmerSoFar); if (params$Features$alphaRefundLinear) { - ZillmerVerteilungCoeff = pad0((0:r)/r, len, 1); + ZillmerVerteilungCoeff = pad0((0:r)/r, len, 1, start = start); } else { q = self$getTransitionProbabilities(params); # vector of all ä_{x+t, r-t} - pvAlphaTmp = calculatePVSurvival(q = pad0(q$q, len), advance = pad0(rep(1,r), len), v = 1/(1 + params$ActuarialBases$i)); + pvAlphaTmp = calculatePVSurvival(q = pad0(q$q, len), advance = pad0(rep(1,r), len), v = 1/(1 + params$ActuarialBases$i), start = start); ZillmerVerteilungCoeff = (1 - pvAlphaTmp/pvAlphaTmp[[1]]); } alphaRefund = ZillmerSoFar - ZillmerVerteilungCoeff * ZillmerTotal; @@ -677,6 +699,7 @@ InsuranceTarif = R6Class( # Collect all reserves to one large matrix res = cbind( + "SumInsured" = head0(rep(params$ContractData$sumInsured, values$int$l), start = start), "net" = resNet, "Zillmer" = resZ, "adequate" = resAdeq, @@ -712,8 +735,10 @@ InsuranceTarif = R6Class( # Calculate new sum insured after premium waiver Storno = 0; # TODO: Implement storno costs - newSI = (surrenderValue - values$absPresentValues[,"death_Refund_past"] * securityFactor - c(Storno)) / - (values$absPresentValues[, "benefits"] * securityFactor + values$absPresentValues[, "gamma_nopremiums"]) * params$ContractData$sumInsured; + premiumfreePV = (values$absPresentValues[, "benefits"] * securityFactor + values$absPresentValues[, "gamma_nopremiums"]); # PV of future premium free claims + costs + newSI = ifelse(premiumfreePV == 0, 0, + (surrenderValue - values$absPresentValues[,"death_Refund_past"] * securityFactor - c(Storno)) / + premiumfreePV * params$ContractData$sumInsured); cbind(res, "PremiumsPaid" = Reduce("+", values$absCashFlows$premiums_advance, accumulate = TRUE), @@ -722,7 +747,7 @@ InsuranceTarif = R6Class( ) }, - getBalanceSheetReserveFactor = function(params, years=1) { + getBalanceSheetReserveFactor = function(params, years = 1, start = 0) { balanceDate = params$ActuarialBases$balanceSheetDate year(balanceDate) = year(params$ContractData$contractClosing); if (balanceDate < params$ContractData$contractClosing) { @@ -744,7 +769,7 @@ InsuranceTarif = R6Class( baf }, - reserveCalculationBalanceSheet = function(params, values) { + reserveCalculationBalanceSheet = function(params, values, start = 0) { reserves = values$reserves; years = length(reserves[,"Zillmer"]); # Balance sheet reserves: @@ -792,39 +817,27 @@ InsuranceTarif = R6Class( }, - getBasicDataTimeseries = function(params, values) { - # TODO: Find a general solution to cut the policyPeriod at the maximum age (currently this code is duplicated all over!) - age = params$ContractData$age; - maxAge = getOmega(params$ActuarialBases$mortalityTable) - policyPeriod = params$ContractData$policyPeriod; - maxlen = min(maxAge - age, policyPeriod) + 1; - policyPeriod = min(maxAge - age, policyPeriod); - premiumPeriod = min(policyPeriod, params$ContractData$premiumPeriod); + getBasicDataTimeseries = function(params, values, start = 0) { res = cbind( - "PremiumPayment" = c( - rep(1, premiumPeriod), - rep(0, maxlen - premiumPeriod)), - "SumInsured" = c( - rep(params$ContractData$sumInsured, policyPeriod), - 0), - "Premiums" = c( - head(values$absCashFlows$premiums_advance + values$absCashFlows$premiums_arrears, premiumPeriod), - rep(0, maxlen - premiumPeriod)), - "InterestRate" = rep(params$ActuarialBases$i, maxlen), - "PolicyDuration" = rep(policyPeriod, maxlen), - "PremiumPeriod" = rep(premiumPeriod, maxlen) + "PremiumPayment" = values$premiumComposition[, "charged"] > 0, + "SumInsured" = values$reserves[, "SumInsured"], + "Premiums" = values$absCashFlows$premiums_advance + values$absCashFlows$premiums_arrears, + "InterestRate" = rep(params$ActuarialBases$i, values$int$l), + "PolicyDuration" = rep(values$int$policyTerm, values$int$l), + "PremiumPeriod" = rep(values$int$premiumTerm, values$int$l) ); - rownames(res) = 0:policyPeriod; + rownames(res) = 0:(values$int$l-1); res }, - premiumDecomposition = function(params, values) { + premiumDecomposition = function(params, values, start = 0) { loadings = params$Loadings; sumInsured = params$ContractData$sumInsured; premiums = values$premiums; v = 1/(1 + params$ActuarialBases$i); l = dim(values$reserves)[[1]]; ppScheme = params$ProfitParticipation$profitParticipationScheme; + t = as.character(start) # TODO: This assumes all premiums are paid in advance! premium.gross = values$absCashFlows[,"premiums_advance"]; @@ -893,49 +906,50 @@ InsuranceTarif = R6Class( # Gross premium = net + zillmeredAlpha + unzillmeredAlpha + beta + gamma premium unit.premiumCF = premium.gross / premiums[["gross"]]; - premium.gamma = unit.premiumCF * values$absPresentValues["0", "gamma"] / values$absPresentValues["0", "premiums.unit"]; - premium.beta = unit.premiumCF * values$absPresentValues["0", "beta"] / values$absPresentValues["0", "premiums.unit"]; - premium.alpha = unit.premiumCF * values$absPresentValues["0", "alpha"] / values$absPresentValues["0", "premiums.unit"]; + premium.gamma = unit.premiumCF * values$absPresentValues[t, "gamma"] / values$absPresentValues[t, "premiums.unit"]; + premium.beta = unit.premiumCF * values$absPresentValues[t, "beta"] / values$absPresentValues[t, "premiums.unit"]; + premium.alpha = unit.premiumCF * values$absPresentValues[t, "alpha"] / values$absPresentValues[t, "premiums.unit"]; premium.Zillmer = unit.premiumCF * premiums[["Zillmer"]]; - premium.alpha.Zillmer = unit.premiumCF * values$absPresentValues["0", "Zillmer"] / values$absPresentValues["0", "premiums.unit"]; + premium.alpha.Zillmer = unit.premiumCF * values$absPresentValues[t, "Zillmer"] / values$absPresentValues[t, "premiums.unit"]; premium.alpha.noZ = premium.alpha - premium.alpha.Zillmer; # ungezillmerter Teil der Abschlusskosten premium.net = unit.premiumCF * premiums[["net"]]; securityLoading = valueOrFunction(params$Loadings$security, params = params, values = values); - premium.risk.actual = v * (values$absCashFlows[,"death"] - c(values$reserves[,"net"][-1], 0)) * pad0(values$transitionProbabilities$q, l); + premium.risk.actual = v * head0(values$absCashFlows[,"death"] - c(values$reserves[,"net"][-1], 0), start = start) * pad0(values$transitionProbabilities$q, l); premium.risk.security = v * (values$absCashFlows[,"death"] * securityLoading) * pad0(values$transitionProbabilities$q, l); premium.risk = premium.risk.actual + premium.risk.security; - premium.risk.disease.actual = v * (values$absCashFlows[,"disease_SumInsured"] - c(values$reserves[,"net"][-1], 0)) * pad0(values$transitionProbabilities$i, l); + # TODO-start: Make sure the premium components are 0 before start! + premium.risk.disease.actual = v * head0(values$absCashFlows[,"disease_SumInsured"] - c(values$reserves[,"net"][-1], 0), start = start) * pad0(values$transitionProbabilities$i, l); premium.risk.disease.security = v * (values$absCashFlows[,"disease_SumInsured"] * securityLoading) * pad0(values$transitionProbabilities$i, l); premium.risk.disease = premium.risk.disease.actual + premium.risk.disease.security; - premium.savings = getSavingsPremium( + premium.savings = head0(getSavingsPremium( values$reserves[,"net"], v = v, survival_advance = values$absCashFlows[,"survival_advance"] + values$absCashFlows[,"guaranteed_advance"], survival_arrears = values$absCashFlows[,"survival_arrears"] + values$absCashFlows[,"guaranteed_arrears"] - ); + ), start = start) - premium.Zillmer.risk.actual = v * (values$absCashFlows[,"death"] - c(values$reserves[,"contractual"][-1], 0)) * pad0(values$transitionProbabilities$q, l); + premium.Zillmer.risk.actual = v * head0(values$absCashFlows[,"death"] - c(values$reserves[,"contractual"][-1], 0), start = start) * pad0(values$transitionProbabilities$q, l); premium.Zillmer.risk.security = v * (values$absCashFlows[,"death"] * securityLoading) * pad0(values$transitionProbabilities$q, l); premium.Zillmer.risk = premium.Zillmer.risk.actual + premium.Zillmer.risk.security; - premium.Zillmer.risk.disease.actual = v * (values$absCashFlows[,"disease_SumInsured"] - c(values$reserves[,"contractual"][-1], 0)) * pad0(values$transitionProbabilities$i, l); + premium.Zillmer.risk.disease.actual = v * head0(values$absCashFlows[,"disease_SumInsured"] - c(values$reserves[,"contractual"][-1], 0), start = start) * pad0(values$transitionProbabilities$i, l); premium.Zillmer.risk.disease.security = v * (values$absCashFlows[,"disease_SumInsured"] * securityLoading) * pad0(values$transitionProbabilities$i, l); premium.Zillmer.risk.disease = premium.Zillmer.risk.disease.actual + premium.Zillmer.risk.disease.security; - premium.Zillmer.savings = getSavingsPremium( + premium.Zillmer.savings = head0(getSavingsPremium( values$reserves[,"contractual"], v = v, survival_advance = values$absCashFlows[,"survival_advance"] + values$absCashFlows[,"guaranteed_advance"], survival_arrears = values$absCashFlows[,"survival_arrears"] + values$absCashFlows[,"guaranteed_arrears"] - ); - premium.Zillmer.amortization = getSavingsPremium( + ), start = start) + premium.Zillmer.amortization = head0(getSavingsPremium( pmin(0, values$reserves[,"contractual"]), v = v - ); - premium.Zillmer.actsavings = getSavingsPremium( + ), start = start) + premium.Zillmer.actsavings = head0(getSavingsPremium( pmax(0, values$reserves[,"contractual"]), v = v, survival_advance = values$absCashFlows[,"survival_advance"] + values$absCashFlows[,"guaranteed_advance"], survival_arrears = values$absCashFlows[,"survival_arrears"] + values$absCashFlows[,"guaranteed_arrears"] - ); + ), start = start) res = cbind( "charged" = premium.charged, @@ -981,14 +995,17 @@ InsuranceTarif = R6Class( res }, - calculateFutureSums = function(values, ...) { - rcumsum = function(vec) rev(cumsum(rev(vec))); + calculateFutureSums = function(values, ..., start = 0) { + rcumsum = function(vec) c( + head(vec, start), + rev(cumsum(rev(tail(vec, length(vec) - start)))) + ) apply(values, 2, rcumsum) }, - calculatePresentValues = function(values, params) { + calculatePresentValues = function(values, params, start = 0) { len = dim(values)[1]; q = self$getTransitionProbabilities(params); - pv = function(vec) calculatePVSurvival(px = pad0(q$p, len), advance = vec, v = 1/(1 + params$ActuarialBases$i)); + pv = function(vec) calculatePVSurvival(px = pad0(q$p, len), advance = vec, v = 1/(1 + params$ActuarialBases$i), start = start); apply(values, 2, pv) }, diff --git a/R/exportInsuranceContract_xlsx.R b/R/exportInsuranceContract_xlsx.R index 6704721..44d2da9 100644 --- a/R/exportInsuranceContract_xlsx.R +++ b/R/exportInsuranceContract_xlsx.R @@ -7,9 +7,9 @@ NULL -################################################ -# Helper Functions -################################################ +################################################ # +# Helper Functions #### +################################################ # writeAgeQTable = function(wb, sheet, probs, crow = 1, ccol = 1, styles = list()) { @@ -189,13 +189,13 @@ setInsuranceValuesLabels = function(vals) { } -################################################################################ +############################################################################### # # # The actual export function # # exportInsuranceContract.xlsx(contract, filename) # -################################################################################ +############################################################################### # #' @export @@ -207,7 +207,7 @@ exportInsuranceContract.xlsx = function(contract, filename) { qp = contract$Values$transitionProbabilities[1:nrrows,]; # extract the probabilities once, will be needed in every sheet ############################################### # - # Style information + # Style information #### ############################################### # styles = list( header = createStyle(border = "TopBottomLeftRight", borderColour = "#DA9694", borderStyle = "medium", @@ -228,7 +228,7 @@ exportInsuranceContract.xlsx = function(contract, filename) { ); ############################################### # - # General Workbook setup + # General Workbook setup #### ############################################### # wb = openxlsx::createWorkbook(); @@ -251,7 +251,7 @@ exportInsuranceContract.xlsx = function(contract, filename) { crow = crow + 4; ############################################### # - # Basic parameters + # Basic parameters #### ############################################### # values = c( "Sum insured" = contract$Parameters$ContractData$sumInsured, @@ -307,9 +307,9 @@ exportInsuranceContract.xlsx = function(contract, filename) { - ################################################ - # Print out Basic contract data as time series - ################################################ + ################################################# # + # Print out Basic contract data as time series #### + ################################################# # sheet = "Basisdaten"; addWorksheet(wb, sheet); @@ -346,9 +346,9 @@ exportInsuranceContract.xlsx = function(contract, filename) { - ################################################ - # Print out Reserves - ################################################ + ############################################### # + # Print out Reserves #### + ############################################### # sheet = "Reserven"; addWorksheet(wb, sheet); @@ -371,9 +371,9 @@ exportInsuranceContract.xlsx = function(contract, filename) { setColWidths(wb, sheet, cols = 1:50, widths = "auto", ignoreMergedCells = TRUE) - ################################################ - # Print out Profit Participation - ################################################ + ################################################ # + # Print out Profit Participation #### + ################################################ # if (!is.null(contract$Values$profitParticipation)) { sheet = "Gewinnbeteiligung"; @@ -432,9 +432,9 @@ exportInsuranceContract.xlsx = function(contract, filename) { } - ################################################ - # Print out premium decomposition - ################################################ + ############################################### # + # Print out premium decomposition #### + ############################################### # # Age, death and survival probabilities crow = 4; @@ -462,9 +462,9 @@ exportInsuranceContract.xlsx = function(contract, filename) { setColWidths(wb, sheet, cols = 1:50, widths = "auto", ignoreMergedCells = TRUE) - ################################################ - # Print out absolute values of present values - ################################################ + ################################################ # + # Print out absolute values of present values #### + ################################################ # sheet = "abs.Barwerte"; addWorksheet(wb, sheet); @@ -480,9 +480,9 @@ exportInsuranceContract.xlsx = function(contract, filename) { setColWidths(wb, sheet, cols = 1:50, widths = "auto", ignoreMergedCells = TRUE) - ################################################ - # Print out absolute values for cash flows - ################################################ + ############################################### # + # Print out absolute values for cash flows #### + ############################################### # # Age, death and survival probabilities ccol = 1; @@ -496,9 +496,9 @@ exportInsuranceContract.xlsx = function(contract, filename) { setColWidths(wb, sheet, cols = 1:50, widths = "auto", ignoreMergedCells = TRUE) - ################################################ - # Print out present values - ################################################ + ############################################### # + # Print out present values #### + ############################################### # sheet = "Barwerte"; addWorksheet(wb, sheet); @@ -510,17 +510,20 @@ exportInsuranceContract.xlsx = function(contract, filename) { # We add six lines before the present values to show the coefficients for the premium calculation ccol = ccol + writeAgeQTable(wb, sheet, probs = qp, crow = crow + 6, ccol = 1, styles = styles); + # Time the premium was last calculated (i.e. access the present values at that time rather than 0 in the formulas for the premium) + tPrem = contract$Values$int$premiumCalculationTime + # Store the start/end columns of the coefficients, since we need them later in the formula for the premiums! w1 = writePremiumCoefficients(wb, sheet, contract$Values$premiumCoefficients, type = "benefits", crow = crow, ccol = ccol - 2, tarif = contract$tarif); area.premiumcoeff = paste0(int2col(ccol), "%d:", int2col(ccol + w1 - 1), "%d"); - area.premiumvals = paste0("$", int2col(ccol), "$", crow + 6 + 2, ":$", int2col(ccol + w1 - 1), "$", crow + 6 + 2); + area.premiumvals = paste0("$", int2col(ccol), "$", crow + 6 + 2 + tPrem, ":$", int2col(ccol + w1 - 1), "$", crow + 6 + 2 + tPrem); ccol = ccol + writeValuesTable(wb, sheet, as.data.frame(setInsuranceValuesLabels(contract$Values$presentValues)), crow = crow + 6, ccol = ccol, tableName = "PresentValues_Benefits", styles = styles, caption = "Leistungsbarwerte", valueStyle = styles$pv0) + 1; w2 = writePremiumCoefficients(wb, sheet, contract$Values$premiumCoefficients, type = "costs", crow = crow, ccol = ccol - 2, tarif = contract$tarif); area.costcoeff = paste0(int2col(ccol), "%d:", int2col(ccol + w2 - 1), "%d"); - area.costvals = paste0("$", int2col(ccol), "$", crow + 6 + 2, ":$", int2col(ccol + w2 - 1), "$", crow + 6 + 2); + area.costvals = paste0("$", int2col(ccol), "$", crow + 6 + 2 + tPrem, ":$", int2col(ccol + w2 - 1), "$", crow + 6 + 2 + tPrem); ccol = ccol + writeValuesTable(wb, sheet, as.data.frame(costPV), crow = crow + 6, ccol = ccol, tableName = "PresentValues_Costs", styles = styles, caption = "Kostenbarwerte", valueStyle = styles$cost0) + 1; @@ -542,9 +545,9 @@ exportInsuranceContract.xlsx = function(contract, filename) { setColWidths(wb, sheet, cols = 1:50, widths = "auto", ignoreMergedCells = TRUE) - ################################################ - # Print out cash flows - ################################################ + ############################################## # + # Print out cash flows #### + ############################################## # sheet = "Cash-Flows"; addWorksheet(wb, sheet); diff --git a/inst/Beispiele/Endowment_Dynamic_From0_Baseline.xlsx b/inst/Beispiele/Endowment_Dynamic_From0_Baseline.xlsx new file mode 100644 index 0000000000000000000000000000000000000000..1c3fff9eea0c370d183403f308a622513ac23a3d GIT binary patch literal 58713 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	(pPAcv6!<k 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 B=uQ9t literal 0 HcmV?d00001 diff --git a/inst/Beispiele/Endowment_Dynamic_From5.xlsx b/inst/Beispiele/Endowment_Dynamic_From5.xlsx new file mode 100644 index 0000000000000000000000000000000000000000..fd254f947f0b9236fe4a7162967f03c07e28a5f8 GIT binary patch literal 70452 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%0Dl~+U0g_*!RV;<lw%Oev!ptyAoDy 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%0Du@8acRZ&hYg&rQ-$`8Lx!Kgi&9 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 literal 0 HcmV?d00001 diff --git a/inst/Beispiele/Example_Endowment.R b/inst/Beispiele/Example_Endowment.R new file mode 100644 index 0000000..e7fe5ee --- /dev/null +++ b/inst/Beispiele/Example_Endowment.R @@ -0,0 +1,152 @@ +library(LifeInsuranceContracts) + +################################################################### # +# DEFINITION TARIF #### +################################################################### # +# +# Beispieltarif: +# endowment with regular premiums +# death benefit = survival benefit +# Costs: Alpha: 4% of premium sum up-front (2,5% Zillmer) +# Beta: 5% of each premium paid +# Gamma: 0,1% of sum insured per year over the whole contract maturity +# Unitcosts: 10 EUR + 5% Premium Sum (max. 50 EUR), during premium period +################################################################### # + +costs.Bsp = initializeCosts(); +costs.Bsp[["alpha", "SumPremiums", "once"]] = 0.04; +costs.Bsp[["Zillmer", "SumPremiums", "once"]] = 0.025; # deutsche Beschränkung der Zillmerung +costs.Bsp[["beta", "GrossPremium", "PremiumPeriod"]] = 0.05; +costs.Bsp[["gamma", "SumInsured", "PolicyPeriod"]] = 0.001; + +costs.Bsp.Unterjaehrigkeit = list("1" = 0.0, "2" = 0.01, "4" = 0.015, "12" = 0.02); + +# Stückkosten: 10EUR + 5% PS, maximal 50 +costs.Bsp.Stueckkosten = function (params, values) { min(50, 10 + 0.05*values$premiums[["gross"]]) } + + +surrender.Bsp = function(surrenderReserve, params, values) { + n = params$ContractData$policyPeriod - params$ContractData$blockStart; + # Rückkaufsabschlag linear fallend von 10 auf 0%: + sf = c(rep(0, start), 1 - 0.1 * (1 - (0:n)/n)); + surrenderReserve * sf +} + +#' @export +Tarif.Bsp = InsuranceTarif$new( + name = "Example Tariff - Standard Endowment", + type = "endowment", + tarif = "BSP", + desc = "Gemischte Versicherung (Standardtarif)", + #premiumPeriod = 1, + #alphaRefundLinear = FALSE, + + mortalityTable = mort.AT.census.2011.unisex, + i = 0.005, + costs = costs.Bsp, + unitcosts = costs.Bsp.Stueckkosten, + + premiumFrequencyOrder = -1, # Unterjährige Prämienzahlung wird nicht im BW berücksichtigt, sondern durch Prämienaufschlag + premiumFrequencyLoading = costs.Bsp.Unterjaehrigkeit, + premiumRefund = 0, + tax = 0.04, + + surrenderValueCalculation = surrender.Bsp +); + +# +# contract.Bsp.DynStart = InsuranceContract$new( +# Tarif.Bsp, +# age = 45, policyPeriod = 5, premiumPeriod = 5, +# premiumFrequency = 12, +# sumInsured = 100000, +# contractClosing = as.Date("2030-07-01") +# ); +# exportInsuranceContractExample(contract.Bsp.DynStart, t = 5, basename = "Endowment_Dynamic_From0_Baseline"); +# showVmGlgExamples(contract.Bsp.Dyn, t = 10) + + +contract.Bsp.DynStart$Values$cashFlowsBasic +contract.Bsp.DynStart$Values$cashFlows +contract.Bsp.DynStart$Values$cashFlowsCosts +contract.Bsp.DynStart$Values$presentValues + + +contract.Bsp.Dyn = InsuranceContract$new( + Tarif.Bsp, + age = 35, policyPeriod = 15, premiumPeriod = 15, + premiumFrequency = 12, + sumInsured = 100000, + contractClosing = as.Date("2020-07-01"), + blockStart = 10 +); +exportInsuranceContract.xlsx(contract.Bsp.Dyn, filename = "Endowment_Dynamic_From5.xlsx"); + + +# exportInsuranceContractExample(contract.Bsp.Dyn, t = 5, basename = "Endowment_Dynamic_From5"); +# showVmGlgExamples(contract.Bsp.Dyn, t = 10) + + +contract.Bsp.Dyn$Values$cashFlowsBasic +contract.Bsp.Dyn$Values$cashFlows +contract.Bsp.Dyn$Values$cashFlowsCosts +contract.Bsp.Dyn$Values$presentValues +contract.Bsp.Dyn$Values$reserves +contract.Bsp.Dyn$Values$premiumComposition + + +################################################################### # +# EXAMPLE CONTRACT #### +################################################################### # + + +contract.Bsp = InsuranceContract$new( + Tarif.Bsp, + age = 35, policyPeriod = 15, premiumPeriod = 15, + premiumFrequency = 12, + sumInsured = 100000, + contractClosing = as.Date("2020-07-01") +); +exportInsuranceContractExample(contract.Bsp, t = 5); +showVmGlgExamples(contract.Bsp, t = 10) + + +contract.Bsp$Values$cashFlowsBasic +contract.Bsp$Values$cashFlows +contract.Bsp$Values$cashFlowsCosts +contract.Bsp$Values$presentValues +# contract.U17_3J$Values$presentValuesCosts +contract.Bsp$Values$premiumSum +contract.Bsp$Values$premiums +contract.Bsp$Values$premiumComposition +contract.Bsp$Values$reserves + + +################################################################### # +# DYNAMIC INCREASE #### +################################################################### # + + +contract.Bsp.Dyn = InsuranceContract$new( + Tarif.Bsp, + age = 35, policyPeriod = 15, premiumPeriod = 15, + premiumFrequency = 12, + sumInsured = 100000, + contractClosing = as.Date("2020-07-01"), + blockStart = 10 +); +exportInsuranceContractExample(contract.Bsp.Dyn, t = 5); +showVmGlgExamples(contract.Bsp.Dyn, t = 10) + + +contract.Bsp.Dyn$Values$cashFlowsBasic +contract.Bsp.Dyn$Values$cashFlows +contract.Bsp.Dyn$Values$cashFlowsCosts +contract.Bsp.Dyn$Values$presentValues +# contract.Bsp.Dyn$Values$presentValuesCosts +contract.Bsp.Dyn$Values$premiumSum +contract.Bsp.Dyn$Values$premiums +contract.Bsp.Dyn$Values$premiumComposition +contract.Bsp.Dyn$Values$reserves +contract.Bsp.Dyn$Values$basicData + -- GitLab