diff --git a/NAMESPACE b/NAMESPACE index 99f1e6fbe4e8aca71d6babbd6ce9657da18c50a1..371a683ebb5e05d276820772bc2e72366d35dddd 100644 --- a/NAMESPACE +++ b/NAMESPACE @@ -19,6 +19,7 @@ export(PP.base.ZillmerReserveT2) export(PP.base.ZillmerRiskPremium) export(PP.base.contractualReserve) export(PP.base.meanContractualReserve) +export(PP.base.previousContractualReserve) export(PP.base.sumInsured) export(PP.benefit.Profit) export(PP.benefit.ProfitPlusGuaranteedInterest) @@ -30,11 +31,13 @@ export(PP.benefit.ProfitPlusTerminalBonusReserve) export(PP.benefit.ProfitPlusTotalInterest) export(PP.benefit.TerminalBonus5YearsProRata) export(PP.calculate.RateOnBase) +export(PP.calculate.RateOnBaseMin0) export(PP.calculate.RateOnBaseSGFFactor) export(PP.calculate.RatePlusGuaranteeOnBase) export(PP.rate.expenseProfit) export(PP.rate.interestProfit) export(PP.rate.interestProfit2) +export(PP.rate.interestProfit2PlusGuarantee) export(PP.rate.interestProfitPlusGuarantee) export(PP.rate.riskProfit) export(PP.rate.sumProfit) diff --git a/R/ProfitParticipation.R b/R/ProfitParticipation.R index 2347e333aa9a4ea748abcd8e7c15a8fc71ba9e44..fbbdff869bb7cd184b9975fa4b83af68e6fe340f 100644 --- a/R/ProfitParticipation.R +++ b/R/ProfitParticipation.R @@ -254,9 +254,9 @@ ProfitParticipation = R6Class( sumRate = self$Functions$getSumProfitRate(rates = rates, params = params, values = values); intProfit = self$Functions$calculateInterestProfit(base = intBase, rate = intRate, waiting = waitingFactor, rates = rates, params = params, values = values); - riskProfit = self$Functions$calculateInterestProfit(base = riskBase, rate = riskRate, waiting = waitingFactor, rates = rates, params = params, values = values); - expenseProfit = self$Functions$calculateInterestProfit(base = expenseBase, rate = expenseRate, waiting = waitingFactor, rates = rates, params = params, values = values); - sumProfit = self$Functions$calculateInterestProfit(base = sumBase, rate = sumRate, waiting = waitingFactor, rates = rates, params = params, values = values); + riskProfit = self$Functions$calculateRiskProfit(base = riskBase, rate = riskRate, waiting = waitingFactor, rates = rates, params = params, values = values); + expenseProfit = self$Functions$calculateExpenseProfit(base = expenseBase, rate = expenseRate, waiting = waitingFactor, rates = rates, params = params, values = values); + sumProfit = self$Functions$calculateSumProfit(base = sumBase, rate = sumRate, waiting = waitingFactor, rates = rates, params = params, values = values); interestOnProfitRate = self$Functions$getInterestOnProfits(rates = rates, params = params, values = values); diff --git a/R/ProfitParticipation_Functions.R b/R/ProfitParticipation_Functions.R index b4fb8d2746f4cc9782543534c3b347c055f58a21..6660b23126c2695baf5075ba430e5422a0e63c7a 100644 --- a/R/ProfitParticipation_Functions.R +++ b/R/ProfitParticipation_Functions.R @@ -12,6 +12,13 @@ NULL #' @name ProfitParticipationFunctions NULL +shiftBy = function(rate, n = 1) { + nm = names(rate) + res = c(rep(0, n), head(rate, -n)) + names(res) = nm + res + +} ##########################################################################m## # Calculation bases for the various types of profit #### @@ -28,29 +35,30 @@ PP.base.NULL = function(rates, params, values, ...) { #' Basis for profit: Previous Zillmer reserve (no administration cost reserve) #' @export PP.base.PreviousZillmerReserve = function(rates, params, values, ...) { - nm = names(values$reserves[,"Zillmer"]) - res = c(0, head(values$reserves[,"Zillmer"], -1)) - names(res) = nm - res -}; + shiftBy(values$reserves[,"Zillmer"], n = 1) +} #' @describeIn ProfitParticipationFunctions #' Basis for profit: Zillmer reserve (no administration cost reserve) at time t-2 #' @export PP.base.ZillmerReserveT2 = function(rates, params, values, ...) { - nm = names(values$reserves[,"Zillmer"]) - res = c(0, 0, head(values$reserves[,"Zillmer"], -2)) - names(res) = nm - res -}; + shiftBy(values$reserves[,"Zillmer"], n = 2) +} #' @describeIn ProfitParticipationFunctions #' Basis for profit: Contractual reserve (including administration costs) at time t #' @export PP.base.contractualReserve = function(rates, params, values, ...) { - pmax(0, values$reserves[,"contractual"]) + pmax(0, values$reserves[,"contractual"]) }; +#' @describeIn ProfitParticipationFunctions +#' Basis for profit: Contractual reserve (including administration costs) at time t-1 +#' @export +PP.base.previousContractualReserve = function(rates, params, values, ...) { + shiftBy(values$reserves[,"contractual"], n = 1) +} + #' @describeIn ProfitParticipationFunctions #' Basis for profit: Contractual reserve (including administration costs) averaged over t and t-1 #' @export @@ -65,7 +73,7 @@ PP.base.meanContractualReserve = function(rates, params, values, ...) { PP.base.ZillmerRiskPremium = function(rates, params, values, ...) { # The risk premium of t=0 is used to determine the risk profit at time # t=1, so shift the whole vector! - c(0, head(values$premiumComposition[,"Zillmer.risk"], -1)) + shiftBy(values$premiumComposition[,"Zillmer.risk"], n = 1) }; #' @describeIn ProfitParticipationFunctions @@ -180,6 +188,13 @@ PP.calculate.RateOnBase = function(base, rate, waiting, rates, params, values, . base * rate * waiting }; +#' @describeIn ProfitParticipationFunctions +#' Calculate profit by a simple rate applied on the basis (with an optional waiting vector of values 0 or 1), bound below by 0 +#' @export +PP.calculate.RateOnBaseMin0 = function(base, rate, waiting, rates, params, values, ...) { + pmax(0, base * rate * waiting) +}; + #' @describeIn ProfitParticipationFunctions #' Calculate profit by a rate + guaranteed interest applied on the basis (with an optional waiting vector of values 0 or 1) #' @export diff --git a/man/ProfitParticipationFunctions.Rd b/man/ProfitParticipationFunctions.Rd index e8e1b575c3b43d8e23910ab61fe6af08f4ec29e8..1ffda3e1ab746e4322d29dcb0af301dbb25b81f6 100644 --- a/man/ProfitParticipationFunctions.Rd +++ b/man/ProfitParticipationFunctions.Rd @@ -6,6 +6,7 @@ \alias{PP.base.PreviousZillmerReserve} \alias{PP.base.ZillmerReserveT2} \alias{PP.base.contractualReserve} +\alias{PP.base.previousContractualReserve} \alias{PP.base.meanContractualReserve} \alias{PP.base.ZillmerRiskPremium} \alias{PP.base.sumInsured} @@ -16,10 +17,12 @@ \alias{PP.rate.terminalBonus} \alias{PP.rate.terminalBonusFundRatio} \alias{PP.rate.interestProfitPlusGuarantee} +\alias{PP.rate.interestProfit2PlusGuarantee} \alias{PP.rate.totalInterest} \alias{PP.rate.totalInterest2} \alias{PP.rate.interestProfit2} \alias{PP.calculate.RateOnBase} +\alias{PP.calculate.RateOnBaseMin0} \alias{PP.calculate.RatePlusGuaranteeOnBase} \alias{PP.calculate.RateOnBaseSGFFactor} \alias{PP.benefit.ProfitPlusTerminalBonusReserve} @@ -41,59 +44,64 @@ PP.base.ZillmerReserveT2(rates, params, values, ...) PP.base.contractualReserve(rates, params, values, ...) +PP.base.previousContractualReserve(rates, params, values, ...) + PP.base.meanContractualReserve(rates, params, values, ...) PP.base.ZillmerRiskPremium(rates, params, values, ...) PP.base.sumInsured(rates, params, values, ...) -PP.rate.interestProfit(rates, params, values, ...) +PP.rate.interestProfit(rates, ...) + +PP.rate.riskProfit(rates, ...) -PP.rate.riskProfit(rates, params, values, ...) +PP.rate.expenseProfit(rates, ...) -PP.rate.expenseProfit(rates, params, values, ...) +PP.rate.sumProfit(rates, ...) -PP.rate.sumProfit(rates, params, values, ...) +PP.rate.terminalBonus(rates, ...) -PP.rate.terminalBonus(rates, params, values, ...) +PP.rate.terminalBonusFundRatio(rates, ...) -PP.rate.terminalBonusFundRatio(rates, params, values, ...) +PP.rate.interestProfitPlusGuarantee(rates, ...) -PP.rate.interestProfitPlusGuarantee(rates, params, values, ...) +PP.rate.interestProfit2PlusGuarantee(rates, ...) -PP.rate.totalInterest(rates, params, values, ...) +PP.rate.totalInterest(rates, ...) -PP.rate.totalInterest2(rates, params, values, ...) +PP.rate.totalInterest2(rates, ...) -PP.rate.interestProfit2(rates, params, values, ...) +PP.rate.interestProfit2(rates, ...) PP.calculate.RateOnBase(base, rate, waiting, rates, params, values, ...) +PP.calculate.RateOnBaseMin0(base, rate, waiting, rates, params, values, + ...) + PP.calculate.RatePlusGuaranteeOnBase(base, rate, waiting, rates, params, values, ...) PP.calculate.RateOnBaseSGFFactor(base, rate, waiting, rates, params, values, ...) -PP.benefit.ProfitPlusTerminalBonusReserve(profits, rates, params, values) +PP.benefit.ProfitPlusTerminalBonusReserve(profits, ...) -PP.benefit.Profit(profits, rates, params, values) +PP.benefit.Profit(profits, ...) -PP.benefit.ProfitPlusGuaranteedInterest(profits, rates, params, values) +PP.benefit.ProfitPlusGuaranteedInterest(profits, rates, ...) PP.benefit.ProfitPlusTotalInterest(profits, rates, params, values) -PP.benefit.ProfitPlusHalfTotalInterest(profits, rates, params, values) +PP.benefit.ProfitPlusHalfTotalInterest(profits, ...) -PP.benefit.ProfitPlusHalfGuaranteedInterest(profits, rates, params, values) +PP.benefit.ProfitPlusHalfGuaranteedInterest(profits, rates, ...) -PP.benefit.ProfitPlusInterestMinGuaranteeTotal(profits, rates, params, - values) +PP.benefit.ProfitPlusInterestMinGuaranteeTotal(profits, rates, ...) -PP.benefit.ProfitPlusHalfInterestMinGuaranteeTotal(profits, rates, params, - values) +PP.benefit.ProfitPlusHalfInterestMinGuaranteeTotal(profits, rates, ...) -PP.benefit.TerminalBonus5YearsProRata(profits, rates, params, values) +PP.benefit.TerminalBonus5YearsProRata(profits, params, ...) } \description{ Various helper functions for the \code{ProfitParticipation} class that @@ -110,6 +118,8 @@ the rates and how the assigned profit is calculated. \item \code{PP.base.contractualReserve}: Basis for profit: Contractual reserve (including administration costs) at time t +\item \code{PP.base.previousContractualReserve}: Basis for profit: Contractual reserve (including administration costs) at time t-1 + \item \code{PP.base.meanContractualReserve}: Basis for profit: Contractual reserve (including administration costs) averaged over t and t-1 \item \code{PP.base.ZillmerRiskPremium}: Basis for risk/mortality profit: Zillmer Risk Premium of the past year @@ -128,7 +138,9 @@ the rates and how the assigned profit is calculated. \item \code{PP.rate.terminalBonusFundRatio}: Returns the array of terminal bonus rates (keyed by year) as the terminal bonus fund ratio -\item \code{PP.rate.interestProfitPlusGuarantee}: Rate for interest on past profits: total interest rate +\item \code{PP.rate.interestProfitPlusGuarantee}: Rate for interest on past profits: total credited rate, but at least the guarantee + +\item \code{PP.rate.interestProfit2PlusGuarantee}: Rate for interest on past profits: total creditedrate2, but at least the guarantee \item \code{PP.rate.totalInterest}: Rate for interest on past profits: total interest rate @@ -138,6 +150,8 @@ the rates and how the assigned profit is calculated. \item \code{PP.calculate.RateOnBase}: Calculate profit by a simple rate applied on the basis (with an optional waiting vector of values 0 or 1) +\item \code{PP.calculate.RateOnBaseMin0}: Calculate profit by a simple rate applied on the basis (with an optional waiting vector of values 0 or 1), bound below by 0 + \item \code{PP.calculate.RatePlusGuaranteeOnBase}: Calculate profit by a rate + guaranteed interest applied on the basis (with an optional waiting vector of values 0 or 1) \item \code{PP.calculate.RateOnBaseSGFFactor}: Calculate profit by a simple rate applied on the basis (with only (1-SGFFactor) put into profit participation, and an optional waiting vector of values 0 or 1)