From 54dd90b0a3c14ec8fcacd744ac8ceee53caa1a3e Mon Sep 17 00:00:00 2001
From: Reinhold Kainhofer <reinhold@kainhofer.com>
Date: Fri, 5 Mar 2021 21:47:01 +0100
Subject: [PATCH] USA 2012 IAR: Properly round projected mortalities to six
 decimal digits

---
 .../US/create_MortalityTables_US_Annuities.R  |   4 ++--
 data/USA2012IAR.RData                         | Bin 2730 -> 3148 bytes
 .../using-the-mortalityTables-package.Rmd     |  18 ++++++++++++++++++
 3 files changed, 20 insertions(+), 2 deletions(-)

diff --git a/data-raw/US/create_MortalityTables_US_Annuities.R b/data-raw/US/create_MortalityTables_US_Annuities.R
index 96a1632..f5ffaef 100644
--- a/data-raw/US/create_MortalityTables_US_Annuities.R
+++ b/data-raw/US/create_MortalityTables_US_Annuities.R
@@ -723,6 +723,7 @@ USA2012IAR = array(
       ages = USA2012IAM.data$age,
       deathProbs = USA2012IAM.data$qx,
       improvement = USA2012IAM.data$G2x,
+      modification = function(q) { round(q, 6) },
       data = list(
         dim = list(table = "2012 IAR", sex = "m", collar = "Mortality", type = "Rententafel", data = "loaded", year = 2012, country = "USA")
       )
@@ -733,6 +734,7 @@ USA2012IAR = array(
       ages = USA2012IAM.data$age,
       deathProbs = USA2012IAM.data$qy,
       improvement = USA2012IAM.data$G2y,
+      modification = function(q) { round(q, 6) },
       data = list(
         dim = list(table = "2012 IAR", sex = "w", collar = "Mortality", type = "Rententafel", data = "loaded", year = 2012, country = "USA")
       )
@@ -742,8 +744,6 @@ USA2012IAR = array(
   dimnames = list(Sex = c("m", "f"))
 )
 
-
-
 save(USA2012IAM.basic, file = here::here("data", "USA2012IAM.basic.RData"))
 save(USA2012IAM, file = here::here("data", "USA2012IAM.RData"))
 save(USA2012IAR, file = here::here("data", "USA2012IAR.RData"))
diff --git a/data/USA2012IAR.RData b/data/USA2012IAR.RData
index 9290a8c602373abc348f81e5a519255025273db5..ccf41b196a4d7cec6e7017d7a7e465f17d62d929 100644
GIT binary patch
literal 3148
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

literal 2730
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
RuHmO&qTUQ)e;ef(7yx@@Tsr^&

diff --git a/vignettes/using-the-mortalityTables-package.Rmd b/vignettes/using-the-mortalityTables-package.Rmd
index 4b17a1d..e50bee6 100644
--- a/vignettes/using-the-mortalityTables-package.Rmd
+++ b/vignettes/using-the-mortalityTables-package.Rmd
@@ -463,6 +463,24 @@ AVOe2005R.female.mod@name = "Modified table (lower bound of 3%)"
 plot(AVOe2005R.female, AVOe2005R.female.mod, title = "Original and modified table")
 ```
 
+## Rounding death probabilities
+
+Some tables like the US 2021 IAR table with projection scale G2 prescribe a certain
+rounding of death probabilities. In the 2012 IAR case, the $q_x$ are to be rounded 
+to six decimal digits after applying the projection scale to the basic 2012 mortalities.
+
+The `modification` slot of the `mortalityTable` class can be used for this case, too:
+
+```{r}
+mortalityTable.improvementFactors(
+  name = "USA 2012 IAR, male",
+  ages = USA2012IAR$m@ages,
+  deathProbs = USA2012IAR$m@deathProbs,
+  improvement = USA2012IAR$m@improvement,
+  modification = function(q) { round(q, 6) }
+)
+```
+
 # Creating mortality tables from data and modifying them using various helper functions
 
 The package MortalityTables not only provides the data structures and some
-- 
GitLab