diff --git a/inst/extdata/Germany_Census_BRD.csv b/TODO/Germany_Census_BRD.csv similarity index 100% rename from inst/extdata/Germany_Census_BRD.csv rename to TODO/Germany_Census_BRD.csv diff --git a/inst/extdata/Germany_Census_DeutschesReich.csv b/TODO/Germany_Census_DeutschesReich.csv similarity index 100% rename from inst/extdata/Germany_Census_DeutschesReich.csv rename to TODO/Germany_Census_DeutschesReich.csv diff --git a/inst/extdata/MortalityTables_Germany_Census.R b/TODO/MortalityTables_Germany_Census.R similarity index 100% rename from inst/extdata/MortalityTables_Germany_Census.R rename to TODO/MortalityTables_Germany_Census.R diff --git a/inst/extdata/MortalityTables_USA_Annuities.R b/TODO/MortalityTables_USA_Annuities.R similarity index 100% rename from inst/extdata/MortalityTables_USA_Annuities.R rename to TODO/MortalityTables_USA_Annuities.R diff --git a/inst/extdata/MortalityTables_USA_Annuities_1971IAM.R b/TODO/MortalityTables_USA_Annuities_1971IAM.R similarity index 100% rename from inst/extdata/MortalityTables_USA_Annuities_1971IAM.R rename to TODO/MortalityTables_USA_Annuities_1971IAM.R diff --git a/inst/extdata/MortalityTables_USA_Annuities_1983a.R b/TODO/MortalityTables_USA_Annuities_1983a.R similarity index 100% rename from inst/extdata/MortalityTables_USA_Annuities_1983a.R rename to TODO/MortalityTables_USA_Annuities_1983a.R diff --git a/inst/extdata/MortalityTables_USA_Annuities_1994GAR.R b/TODO/MortalityTables_USA_Annuities_1994GAR.R similarity index 100% rename from inst/extdata/MortalityTables_USA_Annuities_1994GAR.R rename to TODO/MortalityTables_USA_Annuities_1994GAR.R diff --git a/inst/extdata/MortalityTables_USA_Annuities_2012IAM.R b/TODO/MortalityTables_USA_Annuities_2012IAM.R similarity index 100% rename from inst/extdata/MortalityTables_USA_Annuities_2012IAM.R rename to TODO/MortalityTables_USA_Annuities_2012IAM.R diff --git a/inst/extdata/MortalityTables_USA_Annuities_Annuity2000.R b/TODO/MortalityTables_USA_Annuities_Annuity2000.R similarity index 100% rename from inst/extdata/MortalityTables_USA_Annuities_Annuity2000.R rename to TODO/MortalityTables_USA_Annuities_Annuity2000.R diff --git a/TODO/PensionTables_Austria_AVOe1999P.R b/TODO/PensionTables_Austria_AVOe1999P.R new file mode 100644 index 0000000000000000000000000000000000000000..a027006b68888c6dfc7628a7e8bac3b696dc85b6 --- /dev/null +++ b/TODO/PensionTables_Austria_AVOe1999P.R @@ -0,0 +1,143 @@ +#' @import MortalityTables +NULL + +stopifnot(require(methods), require(utils), require(MortalityTables)) # MortalityTable classes; new; Excel reader + + +############################################################################### +# AVÖ 1999P exact (Male, Female) +############################################################################### + + +AVOe1999P.generate = function(file, name="P", collar = "Angestellte") { + table99 = function(name, data, agevar = "x", probvar, trendvar = NULL, dim = list(), ..., baseyear = 1982) { + if (is.null(trendvar)) { + mortalityTable.period( + name = name, ages = data[[agevar]], baseYear = baseyear, + deathProbs = data[[probvar]], data = list(dim = dim)) + } else { + mortalityTable.trendProjection( + name = name, ages = data[[agevar]], baseYear = baseyear, + deathProbs = data[[probvar]], trend = data[[trendvar]], + data = list(dim = dim)) + } + } + name99p = function(name, desc) { + paste("AVÖ 1999-", name, ", ", desc, sep = "") + } + + data = utils::read.csv( + system.file("extdata", file, package = "MortalityTablesPrivate"), + skip = 4, + header = FALSE, + col.names = c( + "x", + "qaax", "qix", "qpx", "qgx", "qwy", "ix", "hx", "yx", + "SPACER", + "qaay", "qiy", "qpy", "qgy", "qwx", "iy", "hy", "xy", + "SPACER", "lambdax", "lambday") + ); + + + male = pensionTable( + name = name99p(name, "Männer"), + baseYear = 1982, + qx = table99(name99p(name, "qax, active males"), data, "x", "qaax", "lambdax", + dim = list(sex = "m", collar = collar, type = "Pensionstafel Österreich", data = "official", year = "AVÖ 1999-P", risk = "Tod")), + ix = table99(name99p(name, "ix, probability of invalidity"), data, "x", "ix", + dim = list(sex = "m", collar = collar, type = "Pensionstafel Österreich", data = "official", year = "AVÖ 1999-P", risk = "Invalidisierung")), + qgx = table99(name99p(name, "qgx, total males"), data, "x", "qgx", "lambdax", + dim = list(sex = "m", collar = collar, type = "Pensionstafel Österreich", data = "official", year = "AVÖ 1999-P", risk = "Tod")), + qix = table99(name99p(name, "qix, disabled males"), data, "x", "qix", "lambdax", + dim = list(sex = "m", collar = collar, type = "Pensionstafel Österreich", data = "official", year = "AVÖ 1999-P", risk = "Tod")), + rx = mortalityTable.zeroes(name = "No reactivation", ages = data[["x"]]), + apx = mortalityTable.once(transitionAge = 65 - 1, name = "Pensionsalter 65", ages = data[["x"]]), + qpx = table99(name99p(name, "qpx, retired males"), data, "x", "qpx", "lambdax", + dim = list(sex = "m", collar = collar, type = "Pensionstafel Österreich", data = "official", year = "AVÖ 1999-P", risk = "Tod")), + hx = table99(name99p(name, "hx, marriage probability"), data, "x", "hx", + dim = list(sex = "m", collar = collar, type = "Pensionstafel Österreich", data = "official", year = "AVÖ 1999-P", risk = "Partnerwahrscheinlichkeit im Tod")), + qwy = table99(name99p(name, "qwy, widows"), data, "x", "qwy", "lambday", + dim = list(sex = "m", collar = collar, type = "Pensionstafel Österreich", data = "official", year = "AVÖ 1999-P", risk = "Tod")), + yx = table99(name99p(name, "y(x), age of widow"), data, "x", "yx", + dim = list(sex = "m", collar = collar, type = "Pensionstafel Österreich", data = "official", year = "AVÖ 1999-P", risk = "mittl. Hinterbliebenenalter")), + invalids.retire = FALSE, + data = list( + Geschlecht = "Männer", + Bestand = if (endsWith(name, "Arb./Ang.")) "Mischbestand" else "Angestellte", + Invalidisierung = "Invaliditätspension" + ) + ) + + female = pensionTable( + name = name99p(name, "Frauen"), + baseYear = 1982, + qx = table99(name99p(name, "qay, active females"), data, "x", "qaay", "lambday", + dim = list(sex = "w", collar = collar, type = "Pensionstafel Österreich", data = "official", year = "AVÖ 1999-P", risk = "Tod")), + ix = table99(name99p(name, "ix, probability of invalidity"), data, "x", "iy", + dim = list(sex = "w", collar = collar, type = "Pensionstafel Österreich", data = "official", year = "AVÖ 1999-P", risk = "Invalidisierung")), + qgx = table99(name99p(name, "qgy, total females"), data, "x", "qgx", "lambday", + dim = list(sex = "w", collar = collar, type = "Pensionstafel Österreich", data = "official", year = "AVÖ 1999-P", risk = "Tod")), + qix = table99(name99p(name, "qiy, disabled females"), data, "x", "qix", "lambday", + dim = list(sex = "w", collar = collar, type = "Pensionstafel Österreich", data = "official", year = "AVÖ 1999-P", risk = "Tod")), + rx = mortalityTable.zeroes(name = "No reactivation", ages = data[["x"]]), + apx = mortalityTable.once(transitionAge = 60 - 1, name = "Pensionsalter 60", ages = data[["x"]]), + qpx = table99(name99p(name, "qpy, retired females"), data, "x", "qpx", "lambday", + dim = list(sex = "w", collar = collar, type = "Pensionstafel Österreich", data = "official", year = "AVÖ 1999-P", risk = "Tod")), + hx = table99(name99p(name, "hy, marriage probability"), data, "x", "hy", + dim = list(sex = "w", collar = collar, type = "Pensionstafel Österreich", data = "official", year = "AVÖ 1999-P", risk = "Partnerwahrscheinlichkeit im Tod")), + qwy = table99(name99p(name, "qwx, widowers"), data, "x", "qwx", "lambdax", + dim = list(sex = "w", collar = collar, type = "Pensionstafel Österreich", data = "official", year = "AVÖ 1999-P", risk = "Tod")), + yx = table99(name99p(name, "x(y), age of widower"), data, "x", "xy", + dim = list(sex = "w", collar = collar, type = "Pensionstafel Österreich", data = "official", year = "AVÖ 1999-P", risk = "mittl. Hinterbliebenenalter")), + invalids.retire = FALSE, + data = list( + Geschlecht = "Frauen", + Bestand = if (endsWith(name, "Arb./Ang.")) "Mischbestand" else "Angestellte", + Invalidisierung = "Invaliditätspension" + ) + ) + + list(male = male, female = female) +} + +AVOe1999P.tmp = AVOe1999P.generate("Austria_Pensions_AVOe1999P_Angestellte.csv", "P", collar = "Angestellte") +AVOe1999P.male = AVOe1999P.tmp$male +AVOe1999P.female = AVOe1999P.tmp$female + +AVOe1999P.tmp = AVOe1999P.generate("Austria_Pensions_AVOe1999P_ArbeiterAngestellte.csv", "P Arb./Ang.", collar = "Mischbestand") +AVOe1999P.male.ArbAng = AVOe1999P.tmp$male +AVOe1999P.female.ArbAng = AVOe1999P.tmp$female + +AVOe1999P.tmp = AVOe1999P.generate("Austria_Pensions_AVOe1999P_Angestellte.csv", "PK", collar = "Angestellte") +AVOe1999P.male.PK = AVOe1999P.tmp$male +AVOe1999P.female.PK = AVOe1999P.tmp$female + +AVOe1999P.tmp = AVOe1999P.generate("Austria_Pensions_AVOe1999P_ArbeiterAngestellte.csv", "PK Arb./Ang.", collar = "Mischbestand") +AVOe1999P.male.ArbAng.PK = AVOe1999P.tmp$male +AVOe1999P.female.ArbAng.PK = AVOe1999P.tmp$female + + +############################################################################## # +# Die Tafel als Array ---- +############################################################################## # + +AVOe1999P = array( + data = c(mortalityTable.NA), + dim = c(2, 2, 1, 2), + dimnames = list(Geschlecht = c("m", "w"), Bestand = c("Angestellte", "Mischbestand"), Invalidisierung = c("IP"), Typ = c("P", "PK")) +) + +AVOe1999P[["m", "Angestellte", "IP", "P"]] = AVOe1999P.male +AVOe1999P[["w", "Angestellte", "IP", "P"]] = AVOe1999P.female +AVOe1999P[["m", "Mischbestand", "IP", "P"]] = AVOe1999P.male.ArbAng +AVOe1999P[["w", "Mischbestand", "IP", "P"]] = AVOe1999P.female.ArbAng + +AVOe1999P[["m", "Angestellte", "IP", "PK"]] = AVOe1999P.male.PK +AVOe1999P[["w", "Angestellte", "IP", "PK"]] = AVOe1999P.female.PK +AVOe1999P[["m", "Mischbestand", "IP", "PK"]] = AVOe1999P.male.ArbAng.PK +AVOe1999P[["w", "Mischbestand", "IP", "PK"]] = AVOe1999P.female.ArbAng.PK + + + + +rm(AVOe1999P.generate, AVOe1999P.tmp) diff --git a/TODO/PensionTables_Austria_AVOe2008P.R b/TODO/PensionTables_Austria_AVOe2008P.R new file mode 100644 index 0000000000000000000000000000000000000000..40ce73a2ce9d9ddb7882c1eb0b5a220ac82b8957 --- /dev/null +++ b/TODO/PensionTables_Austria_AVOe2008P.R @@ -0,0 +1,214 @@ +#' @import MortalityTables +NULL + +stopifnot(require(methods), require(utils), require(MortalityTables)) # MortalityTable classes; new; Excel reader + +my.natrim <- function(v, ...) { + # Add a NA at the beginning and end, so the first and last entry of the rle + # call will always be for a NA => Use them to call head and tail accordingly: + vv = c(NA, v, NA); + r = rle(!is.na(vv)); + tail(head(vv, -tail(r$lengths, 1)), -head(r$lengths, 1)) +} + +############################################################################### +# AVÖ 2008P exact (Male, Female) +############################################################################### + + +#' Modification function to add certain loading or special effect ending at a given age. +#' +#' Example: In the AVÖ 2008-P table, ix has a biological, fixed component, and +#' a surcharge that applies only during the last 7 years before the pension age +#' +#' @param effect The surcharge (numeric vector) to add. The last entry will +#' be aligned to apply to the given end age, all previous values +#' will apply to ages below. +#' @param pensionAge The age to which to align the end of the effect +#' @param ages The ages of the table (default: 0:100). Needed to properly +#' align the effect. +#' @export +modArbeitsmarkteffekt = function(effect, pensionAge = 65, ages = 0:100) { + function(probs) { + # cut off the effect to a maximum of pensionAge+1 entries (starting at age 0): + effect = tail(effect, pensionAge + 1) + + # properly pad with 0 to cover the full age range from 0 to max(ages) + surcharge = c( + rep(0, pensionAge + 1 - length(effect)), + effect, + rep(0, max(ages) - pensionAge) + ); + + # Use the proper ages as dimnames, so we can later subset with the + # required ages (not all tables start with age 0!) + names(surcharge) = 0:max(ages); + + # Set all base probabilities above the pensionAge to 0: + probs[ages > pensionAge] = 0; + + # Add the surcharge to the original probabilities + probs + surcharge[as.character(ages)] + } +} + +if (FALSE) { + mA = modArbeitsmarkteffekt(effect = 0:7/8, pensionAge = 30, ages = 10:20*2) + mA(10:20*2) + mA = modArbeitsmarkteffekt(effect = 0:7/8, pensionAge = 30, ages = 20:40) + mA(20:40) +} + + +AVOe2008P.generate = function(file, name="P", collar = "Angestellte") { + table08 = function(name, data, agevar = "x", probvar, trendvar = NULL, dim = list(), ..., baseyear = 1982) { + if (is.null(trendvar)) { + mortalityTable.period( + name = name, ages = data[[agevar]], baseYear = baseyear, + deathProbs = data[[probvar]], ..., + data = list(dim = dim)) + } else { + mortalityTable.trendProjection( + name = name, ages = data[[agevar]], baseYear = baseyear, + deathProbs = data[[probvar]], + trend = data[[trendvar]], + dampingFunction = function(x) max(x, 0), + data = list(dim = dim), + ...) + } + } + name08p = function(name, desc) { + paste("AVÖ 2008-", name, ", ", desc, sep = "") + } + + data = utils::read.csv( + system.file("extdata", file, package = "MortalityTablesPrivate"), + skip = 4, + header = FALSE, + col.names = c( + "x", + "qaax", "qix", "qpx", "qgx", "qwy", "ix", "hx", "yx", + "SPACER", + "qaay", "qiy", "qpy", "qgy", "qwx", "iy", "hy", "xy", + "SPACER", "lambdax", "lambday", + "SPACER", "SPACER", "Arbeitsmarkt_M", "Arbeitsmarkt_F") + , colClasses = c(qpx = "numeric", qgx = "numeric", qpy = "numeric", qgy = "numeric") + ); + + male = pensionTable( + name = name08p(name, "Männer"), + baseYear = 1982, + qx = table08(name08p(name, "qax, active males"), data, "x", "qaax", "lambdax", + dim = list(sex = "m", collar = collar, type = "Pensionstafel Österreich", data = "official", year = "AVÖ 2008-P", risk = "Tod")), + # ix has a biological, fixed component, and a surcharge that depends + # on the pension age => use a modification + ix = table08( + name08p(name, "ix, probability of invalidity"), data, "x", "ix", + modification = modArbeitsmarkteffekt( + my.natrim(data[["Arbeitsmarkt_M"]]), + pensionAge = 65, + ages = data[["x"]] + ), + dim = list(sex = "m", collar = collar, type = "Pensionstafel Österreich", data = "official", year = "AVÖ 2008-P", risk = "Invalidisierung")), + qgx = table08(name08p(name, "qgx, total males"), data, "x", "qgx", "lambdax", + dim = list(sex = "m", collar = collar, type = "Pensionstafel Österreich", data = "official", year = "AVÖ 2008-P", risk = "Tod")), + qix = table08(name08p(name, "qix, disabled males"), data, "x", "qix", "lambdax", + dim = list(sex = "m", collar = collar, type = "Pensionstafel Österreich", data = "official", year = "AVÖ 2008-P", risk = "Tod")), + rx = mortalityTable.zeroes(name = "No reactivation", ages = data[["x"]]), + apx = mortalityTable.onceAndFuture(transitionAge = 65 - 1, name = "Pensionsalter 65", ages = data[["x"]]), + qpx = table08(name08p(name, "qpx, retired males"), data, "x", "qpx", "lambdax", + dim = list(sex = "m", collar = collar, type = "Pensionstafel Österreich", data = "official", year = "AVÖ 2008-P", risk = "Tod")), + hx = table08(name08p(name, "hx, marriage probability"), data, "x", "hx", + dim = list(sex = "m", collar = collar, type = "Pensionstafel Österreich", data = "official", year = "AVÖ 2008-P", risk = "Partnerwahrscheinlichkeit im Tod")), + qwy = table08(name08p(name, "qwy, widows"), data, "x", "qwy", "lambday", + dim = list(sex = "w", collar = collar, type = "Pensionstafel Österreich", data = "official", year = "AVÖ 2008-P", risk = "Tod")), + yx = table08(name08p(name, "y(x), age of widow"), data, "x", "yx", + dim = list(sex = "m", collar = collar, type = "Pensionstafel Österreich", data = "official", year = "AVÖ 2008-P", risk = "mittl. Hinterbliebenenalter")), + invalids.retire = FALSE, + data = list( + Geschlecht = "Männer", + Bestand = if (endsWith(name, "Arb./Ang.")) "Mischbestand" else "Angestellte", + Invalidisierung = "Invaliditätspension" + ) + ) + + pensionAge = 65 + female = pensionTable( + name = name08p(name, "Frauen"), + baseYear = 1982, + qx = table08(name08p(name, "qay, active females"), data, "x", "qaay", "lambday", + dim = list(sex = "w", collar = collar, type = "Pensionstafel Österreich", data = "official", year = "AVÖ 2008-P", risk = "Tod")), + # ix has a biological, fixed component, and a surcharge that depends + # on the pension age => use a modification + ix = table08( + name08p(name, "iy, probability of invalidity"), data, "x", "iy", + modification = modArbeitsmarkteffekt( + my.natrim(data[["Arbeitsmarkt_F"]]), + pensionAge = pensionAge, + ages = data[["x"]] + ), + dim = list(sex = "w", collar = collar, type = "Pensionstafel Österreich", data = "official", year = "AVÖ 2008-P", risk = "Invalidisierung")), + qgx = table08(name08p(name, "qgy, total females"), data, "x", "qgy", "lambday", + dim = list(sex = "w", collar = collar, type = "Pensionstafel Österreich", data = "official", year = "AVÖ 2008-P", risk = "Tod")), + qix = table08(name08p(name, "qiy, disabled females"), data, "x", "qiy", "lambday", + dim = list(sex = "w", collar = collar, type = "Pensionstafel Österreich", data = "official", year = "AVÖ 2008-P", risk = "Tod")), + rx = mortalityTable.zeroes(name = "No reactivation", ages = data[["x"]]), + apx = mortalityTable.once(transitionAge = pensionAge - 1, name = "Pensionsalter 65", ages = data[["x"]]), + qpx = table08(name08p(name, "qpy, retired females"), data, "x", "qpy", "lambday", + dim = list(sex = "w", collar = collar, type = "Pensionstafel Österreich", data = "official", year = "AVÖ 2008-P", risk = "Tod")), + hx = table08(name08p(name, "hy, marriage probability"), data, "x", "hy", + dim = list(sex = "w", collar = collar, type = "Pensionstafel Österreich", data = "official", year = "AVÖ 2008-P", risk = "Partnerwahscheinlichkeit im Tod")), + qwy = table08(name08p(name, "qwx, widowers"), data, "x", "qwx", "lambdax", + dim = list(sex = "m", collar = collar, type = "Pensionstafel Österreich", data = "official", year = "AVÖ 2008-P", risk = "Tod")), + yx = table08(name08p(name, "x(y), age of widower"), data, "x", "xy", + dim = list(sex = "w", collar = collar, type = "Pensionstafel Österreich", data = "official", year = "AVÖ 2008-P", risk = "mittl. Hinterbliebenenalter")), + invalids.retire = FALSE, + data = list( + Geschlecht = "Frauen", + Bestand = if (endsWith(name, "Arb./Ang.")) "Mischbestand" else "Angestellte", + Invalidisierung = "Invaliditätspension" + ) + ) + + list(male = male, female = female) +} + +AVOe2008P.tmp = AVOe2008P.generate("Austria_Pensions_AVOe2008P_Angestellte.csv", "P", collar = "Angestellte") +AVOe2008P.male = AVOe2008P.tmp$male +AVOe2008P.female = AVOe2008P.tmp$female + +AVOe2008P.tmp = AVOe2008P.generate("Austria_Pensions_AVOe2008P_ArbeiterAngestellte.csv", "P Arb./Ang.", collar = "Mischbestand") +AVOe2008P.male.ArbAng = AVOe2008P.tmp$male +AVOe2008P.female.ArbAng = AVOe2008P.tmp$female + +AVOe2008P.tmp = AVOe2008P.generate("Austria_Pensions_AVOe2008P_Angestellte.csv", "PK", collar = "Angestellte") +AVOe2008P.male.PK = AVOe2008P.tmp$male +AVOe2008P.female.PK = AVOe2008P.tmp$female + +AVOe2008P.tmp = AVOe2008P.generate("Austria_Pensions_AVOe2008P_ArbeiterAngestellte.csv", "PK Arb./Ang.", collar = "Mischbestand") +AVOe2008P.male.ArbAng.PK = AVOe2008P.tmp$male +AVOe2008P.female.ArbAng.PK = AVOe2008P.tmp$female + + +############################################################################## # +# Die Tafel als Array ---- +############################################################################## # + +AVOe2008P = array( + data = c(mortalityTable.NA), + dim = c(2, 2, 1, 2), + dimnames = list(Geschlecht = c("m", "w"), Bestand = c("Angestellte", "Mischbestand"), Invalidisierung = c("IP"), Typ = c("P", "PK")) +) + +AVOe2008P[["m", "Angestellte", "IP", "P"]] = AVOe2008P.male +AVOe2008P[["w", "Angestellte", "IP", "P"]] = AVOe2008P.female +AVOe2008P[["m", "Mischbestand", "IP", "P"]] = AVOe2008P.male.ArbAng +AVOe2008P[["w", "Mischbestand", "IP", "P"]] = AVOe2008P.female.ArbAng + +AVOe2008P[["m", "Angestellte", "IP", "PK"]] = AVOe2008P.male.PK +AVOe2008P[["w", "Angestellte", "IP", "PK"]] = AVOe2008P.female.PK +AVOe2008P[["m", "Mischbestand", "IP", "PK"]] = AVOe2008P.male.ArbAng.PK +AVOe2008P[["w", "Mischbestand", "IP", "PK"]] = AVOe2008P.female.ArbAng.PK + + +rm(AVOe2008P.generate, AVOe2008P.tmp) diff --git a/TODO/PensionTables_Austria_AVOe2018P.R b/TODO/PensionTables_Austria_AVOe2018P.R new file mode 100644 index 0000000000000000000000000000000000000000..e6863511ad75bf9a4567f5248036204cac1c33d9 --- /dev/null +++ b/TODO/PensionTables_Austria_AVOe2018P.R @@ -0,0 +1,222 @@ +stopifnot(require(methods), require(utils), require(MortalityTables), require(dplyr), require(readxl)) # MortalityTable classes; new; Excel reader + +# TODO: +# - Save correction factor for ix (reactivation) inside the table +# - Provide functions to adjust table for given pension age (correction factor for ix) +# - Provide function to switch to qp at the pension age + +############################################################################### # +# Pension Table AVÖ 2018-P ---- +############################################################################### # + +AVOe2018P = array( + data = c(mortalityTable.NA), + dim = c(3, 2, 2), + dimnames = list(Geschlecht = c("m", "w", "u"), Bestand = c("Angestellte", "Mischbestand"), Invalidisierung = c("IP", "IPRG")) +) + +{ + AVOe2018P.file.Ang = getOption("MortalityTables.AVOe2018PAng") + AVOe2018P.file.Misch = getOption("MortalityTables.AVOe2018PMisch") + + if (is.null(AVOe2018P.file.Ang)) { + warning("The pension table AVOe2018P requires the Excel file 'AVOe2018P_Pensionstafeln_Angestellte.xlsx'. Please set the paths to it with options(\"MortalityTables.AVOe2018PAng\" = \"/path/to/AVOe2018P_Pensionstafeln_Angestellte.xlsx\"") + } + if (is.null(AVOe2018P.file.Misch)) { + warning("The pension table AVOe2018P requires the Excel file 'AVOe2018P_Pensionstafeln_Mischbestand.xlsx'. Please set the paths to it with options(\"MortalityTables.AVOe2018PMisch\" = \"/path/to/AVOe2018P_Pensionstafeln_Mischbestand.xlsx\"") + } + + if (!is.null(AVOe2018P.file.Ang) && !is.null(AVOe2018P.file.Misch)) { + + + + #------------------------------------------------------------------------------- - + # Functions to load the tables (raw base tables and trend) and the additional info ---- + #------------------------------------------------------------------------------- - + + AVOe2018P.trend.damping.fun = function(baseYear = 2008, eta = 1/200, zeta = 0) function(t){ + # 1/eta * atan(((t + baseYear) - 2016) * eta) + 1/eta * atan((t - zeta) * eta) + } + # AVOe2018P.trend.damping = AVOe2018P.trend.damping.fun() + AVOe2018P.trend.damping = function(t) t + + + + loadAVOe2018P.data = function(file, sex = "M", collar = "Angestellte", IPtype = "IP") { + if (!sex %in% c("M", "F", "U")) { + warning("Invalid sex given in call to loadAVOe2018P.table: ", sex, "; Allowed values are M, F and U.") + return + } + if (!collar %in% c("Angestellte", "Mischbestand")) { + warning("Invalid collar given in call to loadAVOe2018P.table: ", collar, "; Allowed values are Angestellte and Mischbestand.") + return + } + if (!IPtype %in% c("IP", "IPRG")) { + warning("Invalid type given in call to loadAVOe2018P.table: ", IPtype, "; Allowed values are IP and IPRG.") + return + } + + sheet = recode(sex, "M" = "Männer", "F" = "Frauen", "U" = "Unisex") + if (IPtype == "IPRG") { + sheet = paste(sheet, "RG") + } + basedata = read_excel( + file, sheet = sheet, skip = 2, n_max = 1, #col_names = FALSE, + col_types = c("skip", "text", "skip", "skip", "text", "skip", "skip", "text", "skip", "skip", "numeric", "skip", "skip", "numeric"), + col_names = c("sex", "collar", "IPtype", "baseyear", "trend") + ) + + baseYear = basedata$baseyear + trendReduction = basedata$trend + dataSex = basedata$sex + dataCollar = basedata$collar + dataIP = basedata$IPtype + + data = read_excel( + file, sheet = sheet, skip = 5, + col_names = c("Alter", "qa", "lambda.a", "qi", "lambda.i", "qg", "lambda.g", "qp", "lambda.p", "qw", "lambda.w", "ix", "hx", "yx") + ) + # data = utils::read.csv( + # system.file("extdata", filename, package = "PensionTablesAVOe2018P"), + # skip = 4, + # encoding = "UTF-8", + # header = TRUE, check.names = FALSE, + # ) + + + table18p = function(name, data, agevar = "x", probvar, trendvar = NULL, dim = list(), ..., baseYear = 2008, projectionFunction = projection.Heubeck05) { + tbl = mortalityTable.period( + name = name, ages = data[[agevar]], baseYear = baseYear, + deathProbs = data[[probvar]], + ..., + data = list(dim = dim) + ) + if (!is.null(trendvar)) { + tbl = tbl %>% + mT.addTrend(trend = data[[trendvar]], dampingFunction = AVOe2018P.trend.damping.fun(baseYear = baseYear, eta = trendReduction)) + } + tbl + } + name18p = function(prob = "", sex = "m", collar = "Angestellte", IPtype = NULL) { + if (!is.null(IPtype)) { + IPtype = paste0(" (", IPtype, ")") + } else { + IPtype = "" + } + sprintf("AVÖ 2018-P %s%s %s %s", + recode(prob, + "qx" = "Aktivensterblichkeit", + "qix" = "Invalidensterblichkeit", + "ix" = "Invalidisierung", + "qpx" = "Pensionistensterblichkeit", + "qgx" = "Gesamtsterblichkeit", + "hx" = "Partnerwahrscheinlichkeit im Tod", + "yx" = "mittl. Hinterbliebenenalter", + "qwy" = "Witwensterblichkeit", + "qwx" = "Witwersterblichkeit", + "lambda" = "Sterblichkeitstrend", + "lambda.wx" = "Sterblichkeitstrend Witwer", + "lambda.wy" = "Sterblichkeitstrend Witwen" + ), + IPtype, + recode(sex, "m" = "Männer", "w" = "Frauen", "u" = "Unisex", + "M" = "Männer", "F" = "Frauen", "U" = "Unisex"), + recode(collar, "Angestellte" = "Ang.", "Mischbestand" = "Mischb.", "Arbeiter" = "Arb.") + ) + } + + + defaultDims = list( + table = "AVÖ 2018-P", + type = "Pensionstafel Österreich", + data = "official", + year = "2018", + sex = sex, + collar = collar, + IPtype = IPtype + ) + + pensionTable( + name = name18p("Pensionstafel", collar = collar, sex = sex, IPtype = IPtype), + baseYear = baseYear, + qx = table18p( + name18p("qx", sex, collar, IPtype), + data, "Alter", "qa", "lambda.a", + dim = c(defaultDims, list( + probability = "qx", + risk = "Tod" + ))), + ix = table18p( + name18p("ix", sex, collar, IPtype), + data, "Alter", "ix", NULL, + dim = c(defaultDims, list( + probability = "ix", + risk = "Invalidisierung" + ))), + qgx = table18p( + name18p("qgx", sex, collar, IPtype), + data, "Alter", "qg", "lambda.g", + dim = c(defaultDims, list( + probability = "qgx", + risk = "Tod" + ))), + qix = table18p( + name18p("qix", sex, collar, IPtype), + data, "Alter", "qi", "lambda.i", + dim = c(defaultDims, list( + probability = "qix", + risk = "Tod" + ))), + rx = mortalityTable.zeroes(name = "No reactivation", ages = data$Alter), + apx = mortalityTable.onceAndFuture(transitionAge = 65 - 1, name = "Pensionsalter 65", ages = data$Alter), + qpx = table18p( + name18p("qpx", sex, collar, IPtype), + data, "Alter", "qp", "lambda.p", + dim = c(defaultDims, list( + probability = "qpx", + risk = "Tod" + ))), + hx = table18p( + name18p("hx", sex, collar, IPtype), + data, "Alter", "hx", NULL, + dim = c(defaultDims, list( + probability = "hx", + risk = "Partnerwahrscheinlichkeit im Tod" + ))), + qwy = table18p( + name18p("qwy", sex, collar, IPtype), + data, "Alter", "qw", "lambda.w", + dim = c(defaultDims, list( + probability = "qwy", + risk = "Tod" + ))), + yx = table18p( + name18p("yx", sex, collar, IPtype), + data, "Alter", "yx", NULL, + dim = c(defaultDims, list( + probability = "yx", + risk = "mittl. Hinterbliebenenalter" + ))), + + invalids.retire = FALSE, + data = list( + Geschlecht = sex, + Bestand = collar, + Invalidisierung = IPtype + ) + ) + } + + + for (sex in dimnames(AVOe2018P)$Geschlecht) { + for (collar in dimnames(AVOe2018P)$Bestand) { + for (IPtype in dimnames(AVOe2018P)$Invalidisierung) { + fl = if(collar == "Mischbestand") AVOe2018P.file.Misch else AVOe2018P.file.Ang + AVOe2018P[[sex, collar, IPtype]] = loadAVOe2018P.data(file = fl, sex = recode(sex, "m" = "M", "w" = "F", "u" = "U"), collar = collar, IPtype = IPtype) + } + } + } + + } +} diff --git a/TODO/PensionTables_Austria_EttlPagler.R b/TODO/PensionTables_Austria_EttlPagler.R new file mode 100644 index 0000000000000000000000000000000000000000..1a4a0fcc256afd545767ecea24e6fe7cd898744d --- /dev/null +++ b/TODO/PensionTables_Austria_EttlPagler.R @@ -0,0 +1,193 @@ +#' @import MortalityTables +NULL + +stopifnot(require(methods), require(utils), require(MortalityTables)) # MortalityTable classes; new; Excel reader + + +############################################################################### +# Ettl/Pagler Male +############################################################################### + +EttlPagler.data.M = utils::read.csv( + system.file( + "extdata", + "Austria_Pensions_EttlPagler_M.csv", + package = "MortalityTablesPrivate"), + skip = 5, + header = FALSE, + col.names = c("age", "qaax", "ix", "qix", "qgx", "qpx", "qwy", "hx", "yx", "x1") +); +EttlPaglerAges = EttlPagler.data.M[["age"]]; + +EttlPagler.male = pensionTable( + name = "Ettl/Pagler 1989, Männer", + baseYear = 1989, + qx = mortalityTable.period( + name = "Ettl/Pagler, qx", + ages = EttlPaglerAges, + deathProbs = EttlPagler.data.M[["qaax"]], + data = list( + dim = list(sex = "m", collar = "Gesamtbestand", type = "Pensionstafel Österreich", data = "official", year = "Ettl/Pagler 1989", risk = "Tod") + ) + ), + ix = mortalityTable.period( + name = "Ettl/Pagler, ix", + ages = EttlPaglerAges, + deathProbs = EttlPagler.data.M[["ix"]], + data = list( + dim = list(sex = "m", collar = "Gesamtbestand", type = "Pensionstafel Österreich", data = "official", year = "Ettl/Pagler 1989", risk = "Invalidisierung") + ) + ), + qgx = mortalityTable.period( + name = "Ettl/Pagler, qgx", + ages = EttlPaglerAges, + deathProbs = EttlPagler.data.M[["qgx"]], + data = list( + dim = list(sex = "m", collar = "Gesamtbestand", type = "Pensionstafel Österreich", data = "official", year = "Ettl/Pagler 1989", risk = "Tod") + ) + ), + qix = mortalityTable.period( + name = "Ettl/Pagler, qix", + ages = EttlPaglerAges, + deathProbs = EttlPagler.data.M[["qix"]], + data = list( + dim = list(sex = "m", collar = "Gesamtbestand", type = "Pensionstafel Österreich", data = "official", year = "Ettl/Pagler 1989", risk = "Tod") + ) + ), + rx = mortalityTable.zeroes(name = "No reactivation", ages = EttlPaglerAges), + apx = mortalityTable.once(transitionAge = 65, name = "Pensionsalter 65", ages = EttlPaglerAges), + qpx = mortalityTable.period( + name = "Ettl/Pagler, qpx", + ages = EttlPaglerAges, + deathProbs = EttlPagler.data.M[["qpx"]], + data = list( + dim = list(sex = "m", collar = "Gesamtbestand", type = "Pensionstafel Österreich", data = "official", year = "Ettl/Pagler 1989", risk = "Tod") + ) + ), + hx = mortalityTable.period( + name = "Ettl/Pagler, hx", + ages = EttlPaglerAges, + deathProbs = EttlPagler.data.M[["hx"]], + data = list( + dim = list(sex = "m", collar = "Gesamtbestand", type = "Pensionstafel Österreich", data = "official", year = "Ettl/Pagler 1989", risk = "Partnerwahrscheinlichkeit im Tod") + ) + ), + qwy = mortalityTable.period( + name = "Ettl/Pagler, qwy", + ages = EttlPaglerAges, + deathProbs = EttlPagler.data.M[["qwy"]], + data = list( + dim = list(sex = "m", collar = "Gesamtbestand", type = "Pensionstafel Österreich", data = "official", year = "Ettl/Pagler 1989", risk = "Tod") + ) + ), + yx = mortalityTable.period( + name = "Ettl/Pagler, y(x)", + ages = EttlPaglerAges, + deathProbs = EttlPagler.data.M[["yx"]], + data = list( + dim = list(sex = "m", collar = "Gesamtbestand", type = "Pensionstafel Österreich", data = "official", year = "Ettl/Pagler 1989", risk = "Mittl. Hinterbliebenenalter") + ) + ), + invalids.retire = TRUE, + data = list( + Geschlecht = "Männer", + Bestand = "Angestellte", + Invalidisierung = "Invaliditätspension" + ) +) + +############################################################################### +# Ettl/Pagler Female +############################################################################### + +EttlPagler.data.F = utils::read.csv( + system.file( + "extdata", + "Austria_Pensions_EttlPagler_F.csv", + package = "MortalityTablesPrivate"), + skip = 5, + header = FALSE, + col.names = c("age", "qaay", "iy", "qiy", "qgy", "qpy", "qwx", "hy", "xy", "y1") +); +EttlPaglerAges = EttlPagler.data.F[["age"]]; + +EttlPagler.female = pensionTable( + name = "Ettl/Pagler 1989, Frauen", + baseYear = 1989, + qx = mortalityTable.period( + name = "Ettl/Pagler, qy", + ages = EttlPaglerAges, + deathProbs = EttlPagler.data.F[["qaay"]], + data = list( + dim = list(sex = "w", collar = "Gesamtbestand", type = "Pensionstafel Österreich", data = "official", year = "Ettl/Pagler 1989", risk = "Tod") + ) + ), + ix = mortalityTable.period( + name = "Ettl/Pagler, iy", + ages = EttlPaglerAges, + deathProbs = EttlPagler.data.F[["iy"]], + data = list( + dim = list(sex = "w", collar = "Gesamtbestand", type = "Pensionstafel Österreich", data = "official", year = "Ettl/Pagler 1989", risk = "Invalidisierung") + ) + ), + qgx = mortalityTable.period( + name = "Ettl/Pagler, qgy", + ages = EttlPaglerAges, + deathProbs = EttlPagler.data.F[["qgy"]], + data = list( + dim = list(sex = "w", collar = "Gesamtbestand", type = "Pensionstafel Österreich", data = "official", year = "Ettl/Pagler 1989", risk = "Tod") + ) + ), + qix = mortalityTable.period( + name = "Ettl/Pagler, qiy", + ages = EttlPaglerAges, + deathProbs = EttlPagler.data.F[["qiy"]], + data = list( + dim = list(sex = "w", collar = "Gesamtbestand", type = "Pensionstafel Österreich", data = "official", year = "Ettl/Pagler 1989", risk = "Tod") + ) + ), + rx = mortalityTable.zeroes(name = "No reactivation", ages = EttlPaglerAges), + apx = mortalityTable.once(transitionAge = 65, name = "Pensionsalter 60", ages = EttlPaglerAges), + qpx = mortalityTable.period( + name = "Ettl/Pagler, qpy", + ages = EttlPaglerAges, + deathProbs = EttlPagler.data.F[["qpy"]], + data = list( + dim = list(sex = "w", collar = "Gesamtbestand", type = "Pensionstafel Österreich", data = "official", year = "Ettl/Pagler 1989", risk = "Tod") + ) + ), + hx = mortalityTable.period( + name = "Ettl/Pagler, hy", + ages = EttlPaglerAges, + deathProbs = EttlPagler.data.F[["hy"]], + data = list( + dim = list(sex = "w", collar = "Gesamtbestand", type = "Pensionstafel Österreich", data = "official", year = "Ettl/Pagler 1989", risk = "Partnerwahrscheinlichkeit im Tod") + ) + ), + qwy = mortalityTable.period( + name = "Ettl/Pagler, qwx", + ages = EttlPaglerAges, + deathProbs = EttlPagler.data.F[["qwx"]], + data = list( + dim = list(sex = "w", collar = "Gesamtbestand", type = "Pensionstafel Österreich", data = "official", year = "Ettl/Pagler 1989", risk = "Tod") + ) + ), + yx = mortalityTable.period( + name = "Ettl/Pagler, x(y)", + ages = EttlPaglerAges, + deathProbs = EttlPagler.data.F[["xy"]], + data = list( + dim = list(sex = "w", collar = "Gesamtbestand", type = "Pensionstafel Österreich", data = "official", year = "Ettl/Pagler 1989", risk = "Tod") + ) + ), + invalids.retire = TRUE, + data = list( + Geschlecht = "Männer", + Bestand = "Angestellte", + Invalidisierung = "Invaliditätspension" + ) +) + + + +rm(EttlPagler.data.F, EttlPagler.data.M, EttlPaglerAges) diff --git a/TODO/PensionTables_Germany_DAV2005G.R b/TODO/PensionTables_Germany_DAV2005G.R new file mode 100644 index 0000000000000000000000000000000000000000..28a2bdf6ea9e46b41a12780e90702572ef1a4e3b --- /dev/null +++ b/TODO/PensionTables_Germany_DAV2005G.R @@ -0,0 +1,309 @@ +#' @import MortalityTables +NULL + +stopifnot(require(methods), require(utils), require(MortalityTables)) # MortalityTable classes; new; Excel reader + +############################################################################### # +# Heubeck Table DAV 2005-G (Male, Female) ---- +############################################################################### # + + +#---------------------------------------------------------------------------------------------- - +# Functions and classes to handle Heubeck's projection scales for individual probabilities ---- +#---------------------------------------------------------------------------------------------- - +projection.Heubeck05 = function(object, projectionPeriod = 0) { + ages = ages(object) + + # First 10 years use the short-term trend factor, for all other years the long-term trend factor is used + # Projection in the past works similar + shortTrendExponent = sign(projectionPeriod) * pmin(abs(projectionPeriod), 10) + longTrendExponent = sign(projectionPeriod) * pmax(abs(projectionPeriod) - 10, 0) + + ((1 - object@trend)^(shortTrendExponent)) * ((1 - object@trend2)^(longTrendExponent)) +} + + +projection.Heubeck05.qi = function(object, projectionPeriod = 0) { + ages = ages(object) + + # First 10 years use the short-term trend factor, for all other years the long-term trend factor is used + # Projection in the past works similar + shortTrendExponent = sign(projectionPeriod) * pmin(abs(projectionPeriod), 10) + longTrendExponent = sign(projectionPeriod) * pmax(abs(projectionPeriod) - 10, 0) + + cx = ((1 - object@trend)^(shortTrendExponent)) * ((1 - object@trend2)^(longTrendExponent)) + + # Trend applies only fully to ages above 65, not up to 55, and linearly between + (ages <= 55)*1 + + (55 < ages & ages <= 65) * ((65 - ages) + (10 - (65 - ages)) * cx) / 10 + + (ages > 65) * cx +} + +mortalityTable.heubeck05 = setClass( + "mortalityTable.heubeck05", + slots = list(projectionFunction = "function"), + prototype = list(projectionFunction = projection.Heubeck05), + contains = "mortalityTable.trendProjection" +) + +setMethod("periodDeathProbabilities", "mortalityTable.heubeck05", + function(object, ..., ages = NULL, Period = 2018) { + qx = object@deathProbs * (1 + object@loading); + factors = object@projectionFunction(object, Period - object@baseYear) + finalqx = qx * factors + + fillAges( + object@modification(finalqx), + givenAges = ages(object), + neededAges = ages) + }) + + +setMethod("deathProbabilities", "mortalityTable.heubeck05", + function(object, ..., ages = NULL, YOB = 1975) { + + # browser() + qx = object@deathProbs * (1 + object@loading); + givenAges = object@ages; + factors = object@projectionFunction(object, YOB + givenAges - object@baseYear) + finalqx = qx * factors + + fillAges( + object@modification(finalqx), + givenAges = ages(object), + neededAges = ages) + }) + + + +#---------------------------------------------------------------------------------------------- - +# Functions and classes to handle Heubeck's table at pensionTable-level ---- +#---------------------------------------------------------------------------------------------- - + +pensionTableProbArrange.Heubeck05 = function(x, q, i, qi, r, ap, api, qp, h, qw, yx, qg, as.data.frame = TRUE, table, ...) { + # 1) Die obigen Ausscheidewahrscheinlichkeiten sind unabhänge Wahrscheinlichkeiten => Umrechnung auf abhängige + i.stern = i + q.stern = q + i = i.stern * (1 - 1/2 * q.stern) + q = q.stern * (1 - 1/2 * i.stern) + + + # 2) Herleitung der Gesamtsterblickeit aus den anderen Wahrscheinlichkeiten + # -) Ausscheideordnungen: + la = head(Reduce('*', (1 - q - i), init = 100000, accumulate = TRUE), -1) + lg = la + for (idx in seq_along(lg)) { + qg[idx] = qi[idx] - la[idx]/lg[idx] * (qi[idx] - q[idx] - i[idx] * 1/2 * qi[idx] / (1 - 1/2*qi[idx])) + lg[idx + 1] = lg[idx] * (1 - qg[idx]) + } + lg = head(lg, -1) + + + # -) qg daraus bestimmen: + qg = qi - la/lg * (qi - q - i * 1/2 * qi/(1 - 1/2*qi)) + + + # 3) Alterspensionistensterblichkeit ist qg bis Alter 73, danach normal extrapoliert + qp[x < 74] = qg[x < 74] + + + # TODO: Witwensterblichkeiten stimmen noch nicht!!! + + if (as.data.frame) { + data.frame(x, q, i, qi, r, ap, api, qp, h, qw, yx, qg) + } else { + states = c("a", "i", "p", "d") + transProb = array(0, dim = c(length(states), length(states), length(x)), dimnames = list(states, states, x)) + + transProb["a", "a", ] = (1 - i - q) * (1 - ap); + transProb["a", "i", ] = i; + transProb["a", "p", ] = (1 - i - q) * ap; + transProb["a", "d", ] = q; + + transProb["i", "a", ] = r; + transProb["i", "i", ] = (1 - qi - r) * (1 - api); + transProb["i", "p", ] = (1 - qi - r) * api; + transProb["i", "d", ] = qi; + + transProb["p", "p", ] = 1 - qp; + transProb["p", "d", ] = qp; + + transProb["d", "d", ] = 1; + + list(transitionProbabilities = transProb, widows = data.frame(x, h, qw, yx)) + } +} + +pensionTable.Heubeck05 = setClass( + "pensionTable.Heubeck05", + slots = list(), + prototype = list( + probs.arrange = pensionTableProbArrange.Heubeck05 + ), + contains = "pensionTable" +) + + + + + + + +DAV2005G.generate = function(sex = "M") { + table05 = function(name, data, trenddata, agevar = "x", probvar, dim = list(), ..., baseyear = 2005, projectionFunction = projection.Heubeck05) { + if (is.null(trenddata)) { + mortalityTable.period( + name = name, ages = data[[agevar]], baseYear = baseyear, + deathProbs = data[[probvar]], ..., + data = list(dim = dim)) + } else { + mortalityTable.heubeck05( + name = name, ages = data[[agevar]], baseYear = baseyear, + deathProbs = data[[probvar]], + trend = trenddata$fk, + trend2 = trenddata$fl, + # dampingFunction = function(x) max(x, 0), + data = list(dim = dim), + projectionFunction = projectionFunction, + ...) + } + } + name05 = function(desc) { + paste("DAV 2005-G, ", desc, sep = "") + } + + basedata = utils::read.csv( + system.file("extdata", paste0("1_Basis2005", sex), package = "PensionTablesHeubeck05"), + # file.path("inst", "extdata", paste0("1_Basis2005", sex)), + skip = 4, + header = FALSE, + col.names = c("Alter", "qgp", "qi", "qa", "i", "h", "xy", "qw"), + dec = ",", + sep = ";" + ) + loadTrendDAV05 = function(sex) { + utils::read.csv( + system.file("extdata", paste0("1_Trend", sex), package = "PensionTablesHeubeck05"), + # file.path("inst", "extdata", paste0("1_Trend", sex)), + skip = 4, + header = FALSE, + col.names = c("Alter", "fk", "fl"), + dec = ",", + sep = ";" + ) + } + trenddata = loadTrendDAV05(sex) + trenddata.Widow = loadTrendDAV05(sex = if (sex == "M") "W" else "M") + + # qa und ix in unabhängige Wahrscheinlichkeiten umrechnen + basedata$qa = with( + basedata, + 1/2*(2 + qa - i) - sqrt(1/4 * (2 + qa - i)^2 - 2 * qa) + ) + basedata$i = with(basedata, i / (1 - 1/2 * qa)) + + sex = tolower(sex) + sexName = if (sex == "m") "Männer" else "Frauen" + pensionTable.Heubeck05( + name = name05(paste0("Pensionstafel ", sexName)), + baseYear = 2005, + qx = table05(name05("qax, active males"), + basedata, trenddata, + "Alter", "qa", + dim = list(sex = sex, + collar = "Mischbestand", + type = "Pensionstafel Deutschland", + data = "official", + year = "DAV 2005-G", + risk = "Tod")), + ix = table05(name05("ix, probability of invalidity"), + basedata, NULL, + "Alter", "i", + dim = list(sex = sex, + collar = "Mischbestand", + type = "Pensionstafel Deutschland", + data = "official", + year = "DAV 2005-G", + risk = "Invalidisierung")), + qgx = table05(name05("qgx, total males"), + basedata, trenddata, + "Alter", "qgp", + dim = list(sex = sex, + collar = "Mischbestand", + type = "Pensionstafel Deutschland", + data = "official", + year = "DAV 2005-G", + risk = "Tod")), + qix = table05(name05("qix, disabled males"), + basedata, trenddata, + "Alter", "qi", + projectionFunction = projection.Heubeck05.qi, + dim = list(sex = sex, + collar = "Mischbestand", + type = "Pensionstafel Deutschland", + data = "official", + year = "DAV 2005-G", + risk = "Tod")), + rx = mortalityTable.zeroes(name = "No reactivation", ages = basedata$Alter), + apx = mortalityTable.onceAndFuture(transitionAge = 65 - 1, name = "Pensionsalter 65", ages = basedata$Alter), + qpx = table05(name05("qpx, retired males"), + basedata, trenddata, + "Alter", "qgp", + dim = list(sex = sex, + collar = "Mischbestand", + type = "Pensionstafel Deutschland", + data = "official", + year = "DAV 2005-G", + risk = "Tod")), + hx = table05(name05("hx, marriage probability"), + basedata, NULL, + "Alter", "h", + dim = list(sex = sex, + collar = "Mischbestand", + type = "Pensionstafel Deutschland", + data = "official", + year = "DAV 2005-G", + risk = "Partnerwahrscheinlichkeit im Tod")), + qwy = table05(name05("qwy, widows"), + basedata, trenddata.Widow, + "Alter", "qw", + dim = list(sex = sex, + collar = "Mischbestand", + type = "Pensionstafel Deutschland", + data = "official", + year = "DAV 2005-G", + risk = "Tod")), + yx = table05(name05("y(x), age of widow"), + basedata, NULL, + "Alter", "xy", + dim = list(sex = sex, + collar = "Mischbestand", + type = "Pensionstafel Deutschland", + data = "official", + year = "DAV 2005-G", + risk = "mittl. Hinterbliebenenalter")), + invalids.retire = FALSE, + data = list( + Geschlecht = sexName, + Bestand = "Mischbestand", + Invalidisierung = "Invaliditätspension" + ) + ) + +} + +DAV2005G.male = DAV2005G.generate("M") +DAV2005G.female = DAV2005G.generate("W") +DAV2005G = array( + data = c("m" = DAV2005G.male, "w" = DAV2005G.female), + dim = c(2,1), + dimnames = list("Geschlecht" = c("m", "w"), "Bestand" = c("Mischbestand")) +) + + +# probs = transitionProbabilities(DAV2005G.male, YOB = 1955) +# # probs = transitionProbabilities(DAV2005G.female, YOB = 1955) +# +# View(round(probs,6)) + +rm(DAV2005G.generate) diff --git a/inst/extdata/PensionTables_USA_PensionPlan_RP2014.R b/TODO/PensionTables_USA_PensionPlan_RP2014.R similarity index 100% rename from inst/extdata/PensionTables_USA_PensionPlan_RP2014.R rename to TODO/PensionTables_USA_PensionPlan_RP2014.R diff --git a/inst/extdata/PensionTables_USA_PensionPlans.R b/TODO/PensionTables_USA_PensionPlans.R similarity index 100% rename from inst/extdata/PensionTables_USA_PensionPlans.R rename to TODO/PensionTables_USA_PensionPlans.R diff --git a/TODO/Privat/AVOe_2008_P.xls b/TODO/Privat/AVOe_2008_P.xls new file mode 100644 index 0000000000000000000000000000000000000000..715adfa5a5ea554037c43e9011e8e262682dc6bc Binary files /dev/null and b/TODO/Privat/AVOe_2008_P.xls differ diff --git a/TODO/Privat/AVOe_2008_P_PK.xls b/TODO/Privat/AVOe_2008_P_PK.xls new file mode 100644 index 0000000000000000000000000000000000000000..d530c038697c75e76d73fd7dc414825beb101b4a Binary files /dev/null and b/TODO/Privat/AVOe_2008_P_PK.xls differ diff --git "a/TODO/Privat/AV\303\2261999P_Tafel.xlsx" "b/TODO/Privat/AV\303\2261999P_Tafel.xlsx" new file mode 100644 index 0000000000000000000000000000000000000000..61e3ef191f674bbdd706d323be0e81289a740b8e Binary files /dev/null and "b/TODO/Privat/AV\303\2261999P_Tafel.xlsx" differ diff --git a/TODO/Privat/EttlPagler.xlsx b/TODO/Privat/EttlPagler.xlsx new file mode 100644 index 0000000000000000000000000000000000000000..b5a85759499e229ae9c446e50ac36a26329ae817 Binary files /dev/null and b/TODO/Privat/EttlPagler.xlsx differ diff --git a/data-raw/USA_Annuities.xls b/TODO/USA_Annuities.xls similarity index 100% rename from data-raw/USA_Annuities.xls rename to TODO/USA_Annuities.xls diff --git a/inst/extdata/USA_Annuities_1971IAM.csv b/TODO/USA_Annuities_1971IAM.csv similarity index 100% rename from inst/extdata/USA_Annuities_1971IAM.csv rename to TODO/USA_Annuities_1971IAM.csv diff --git a/inst/extdata/USA_Annuities_1983a_GAM.csv b/TODO/USA_Annuities_1983a_GAM.csv similarity index 100% rename from inst/extdata/USA_Annuities_1983a_GAM.csv rename to TODO/USA_Annuities_1983a_GAM.csv diff --git a/inst/extdata/USA_Annuities_1994GAR.csv b/TODO/USA_Annuities_1994GAR.csv similarity index 100% rename from inst/extdata/USA_Annuities_1994GAR.csv rename to TODO/USA_Annuities_1994GAR.csv diff --git a/TODO/USA_Annuities_2000CM.xlsx b/TODO/USA_Annuities_2000CM.xlsx new file mode 100644 index 0000000000000000000000000000000000000000..4d7d7742cb95bf55f0b34b36b2a51c8d0d7ef489 Binary files /dev/null and b/TODO/USA_Annuities_2000CM.xlsx differ diff --git a/inst/extdata/USA_Annuities_2012IAM.csv b/TODO/USA_Annuities_2012IAM.csv similarity index 100% rename from inst/extdata/USA_Annuities_2012IAM.csv rename to TODO/USA_Annuities_2012IAM.csv diff --git a/inst/extdata/USA_Annuities_Annuity2000.csv b/TODO/USA_Annuities_Annuity2000.csv similarity index 100% rename from inst/extdata/USA_Annuities_Annuity2000.csv rename to TODO/USA_Annuities_Annuity2000.csv diff --git a/inst/extdata/USA_PensionPlans_MP2014_Female.csv b/TODO/USA_PensionPlans_MP2014_Female.csv similarity index 100% rename from inst/extdata/USA_PensionPlans_MP2014_Female.csv rename to TODO/USA_PensionPlans_MP2014_Female.csv diff --git a/inst/extdata/USA_PensionPlans_MP2014_Male.csv b/TODO/USA_PensionPlans_MP2014_Male.csv similarity index 100% rename from inst/extdata/USA_PensionPlans_MP2014_Male.csv rename to TODO/USA_PensionPlans_MP2014_Male.csv diff --git a/inst/extdata/USA_PensionPlans_RP2014.csv b/TODO/USA_PensionPlans_RP2014.csv similarity index 100% rename from inst/extdata/USA_PensionPlans_RP2014.csv rename to TODO/USA_PensionPlans_RP2014.csv diff --git a/data-raw/USA_RP2014_MP2014_PensionPlan.xlsx b/TODO/USA_RP2014_MP2014_PensionPlan.xlsx similarity index 100% rename from data-raw/USA_RP2014_MP2014_PensionPlan.xlsx rename to TODO/USA_RP2014_MP2014_PensionPlan.xlsx