From 84df6e4e31dc259722810069b4264d2abc822ca6 Mon Sep 17 00:00:00 2001
From: Reinhold Kainhofer <reinhold@kainhofer.com>
Date: Mon, 4 Sep 2017 09:03:20 +0000
Subject: [PATCH] Move anwartschaften.R to the pensionstafel project

---
 R/anwartschaften.R | 116 ---------------------------------------------
 1 file changed, 116 deletions(-)
 delete mode 100644 R/anwartschaften.R

diff --git a/R/anwartschaften.R b/R/anwartschaften.R
deleted file mode 100644
index ed46d4d..0000000
--- a/R/anwartschaften.R
+++ /dev/null
@@ -1,116 +0,0 @@
-#' @include pensionTable.R
-NULL
-
-bwRente = function(p, v) {
-    Reduce(function(pp, ax1) { 1 + pp * ax1 * v }, p, 0.0, right = TRUE, accumulate = TRUE)[-(length(p) + 1)];
-}
-
-
-reservesThieleRecursion = function(p, ai, aij, states, i = 0.03) {
-    v = 1 / (1 + i)
-
-    # Recursive relation:
-    #    Vi(t,A) = ai(t) + \sum_j v p_ij(t) (aij(t) + Vj(t+1,A))
-    # with: ai(t) .. payment at t for being in state i
-    #       aij(t) ... payment at t+1 for switching from state i to j
-    #       Vi(t,A) ... reserve for payments A in state i at time t
-    ThieleRecursion = function(t, Vt1) {
-        rr = ai[,t] + v * rowSums(p[,,t] * aij[,,t]) + v * as.vector(p[,,t] %*% Vt1)
-        as.vector(rr)
-    }
-    # Loop backwards over all times (starting value for reserves is 0)
-    times = dimnames(p)[[3]];
-    res = Reduce(f = ThieleRecursion, x = times, init = rep(0, length(states)), right = TRUE, accumulate = TRUE)[-(length(times) + 1)]
-    res = do.call("cbind", res)
-    dimnames(res) = dimnames(ai)
-    res
-}
-if (FALSE) {
-    res = anwartschaften(AVOe2008P.female, YOB = 1977);
-    res
-}
-
-
-#' Calculates all "anwartschaften" for the gien pension table
-#'
-#' @param object A pension table object (instance of a \code{\linkS4class{pensionTable}} class)
-#' @param ... Currently unused
-#' @param i Interest rate (default 0.03)
-#' @param YOB Year of birth (default 1982)
-#'
-#' @examples
-#' pensionTables.load("Austria_*", wildcard=TRUE)
-#' # anwartschaften(EttlPagler.male, i=0.03, YOB=1972)
-#'
-#' @exportMethod transitionProbabilities
-setGeneric("anwartschaften", function(object, ...) standardGeneric("anwartschaften"));
-
-#' @describeIn anwartschaften Calculates all "anwartschaften" for the gien pension table
-setMethod("anwartschaften", "pensionTable",
-          function(object, ...,  i = 0.03, YOB = 1982, Period = NULL) {
-              if (!is.null(Period)) {
-                  probs = periodTransitionProbabilities(object, Period = Period, ..., as.data.frame = FALSE);
-              } else {
-                  probs = transitionProbabilities(object, YOB = YOB, ..., as.data.frame = FALSE);
-              }
-
-              # Time series of transition probabilities
-              pp = probs$transitionProbabilities;
-              x = dimnames(pp)[[3]]
-
-              # Use a data.frame for the annuity PV with the actual ages as dimnames,
-              aw = data.frame(aw = bwRente(1 - probs$widows["qw"], 1 / (1 + i)));
-              dimnames(aw)[[1]] = x
-
-              # Expected death benefit (widows)
-              # Use avg. age of widow to extract the corresponding annuity present value
-              # We used the age as dimname, so we can use simple subsetting
-              expDeathBenefit = probs$widows[["h"]] * aw[as.character(probs$widows[["yx"]]),]
-
-              # Build the matrix of transition payments (only on death there is
-              # the widow PV as benefit, all other transitions do not yield any benefit)
-              states = c("a", "i", "p", "d")
-              transPayments = array(0, dim = c(4,4, length(x)), dimnames = list(states, states, x))
-              transPayments["a","d",] = expDeathBenefit;
-              transPayments["i","d",] = expDeathBenefit;
-              transPayments["p","d",] = expDeathBenefit;
-
-              statePayments = array(0, dim = c(4, length(x)), dimnames = list(states, x));
-
-              aPay = reservesThieleRecursion(p = pp, ai = statePayments + c(1,0,0,0), aij = transPayments*0, states = states, i = i)
-              iPay = reservesThieleRecursion(p = pp, ai = statePayments + c(0,1,0,0), aij = transPayments*0, states = states, i = i)
-              pPay = reservesThieleRecursion(p = pp, ai = statePayments + c(0,0,1,0), aij = transPayments*0, states = states, i = i)
-              wPay = reservesThieleRecursion(p = pp, ai = statePayments, aij = transPayments, states = states)
-
-              list("a" = aPay, "i" = iPay, "p" = pPay, "w" = wPay)
-          });
-
-if (FALSE) {
-    res7 = anwartschaften(AVOe2008P.female, YOB = 1977);
-    res8 = anwartschaften(AVOe2008P.female, YOB = 2017);
-    res
-
-    as.array(res$aPay)
-    str(res$aPay)
-
-
-    dimnames(res$pp)[[3]]
-
-    res["102",]
-    res[,"aw"]
-    a=15:43
-    a
-    a=array(1:8, dim=c(2,4), dimnames=list(c("a1", "a2"), c("b1", "b2", "b3", "b4"))); a
-    b=array(11:18, dim=c(2,4), dimnames=list(c("a1", "a2"), c("b1", "b2", "b3", "b4"))); b
-
-    array(a, b)
-    dimnames(a) = c(15:43)
-
-    an = anwartschaften(probs, YOB = 1977); an
-    showMethods("anwartschaften")
-    showMethods("transitionProbabilities")
-
-
-    array(1:12, dim = c(2,3,4), dimnames=list(c("a1", "a2"), c("b1", "b2", "b3"), c("c1", "c2", "c3", "c4")))
-
-}
-- 
GitLab