diff --git a/data-raw/US/CSO/1980 CSO/USA_1980_CSO-CET.xlsx b/data-raw/US/CSO/1980 CSO/USA_1980_CSO-CET.xlsx new file mode 100644 index 0000000000000000000000000000000000000000..1585398c4aba76bdea29218d1f79f1fdbf9eafac Binary files /dev/null and b/data-raw/US/CSO/1980 CSO/USA_1980_CSO-CET.xlsx differ diff --git a/data-raw/US/CSO/2001 CSO Preferred/2001 CSO Preferred Class Structure Mortality Tables.xls b/data-raw/US/CSO/2001 CSO Preferred/2001 CSO Preferred Class Structure Mortality Tables.xls new file mode 100644 index 0000000000000000000000000000000000000000..adc1c86d6ac2c57b2f7e0dd62ca5a7affcf06ab6 Binary files /dev/null and b/data-raw/US/CSO/2001 CSO Preferred/2001 CSO Preferred Class Structure Mortality Tables.xls differ diff --git a/data-raw/US/CSO/2001 CSO/CSO_taskforce_appendix_j3_june2002.xls b/data-raw/US/CSO/2001 CSO/CSO_taskforce_appendix_j3_june2002.xls new file mode 100644 index 0000000000000000000000000000000000000000..35ed645d39fd07eafc58f75e4699d61adbfe9e0b Binary files /dev/null and b/data-raw/US/CSO/2001 CSO/CSO_taskforce_appendix_j3_june2002.xls differ diff --git a/data-raw/US/CSO/2001 CSO/Table 2001 VBT CSO.xls b/data-raw/US/CSO/2001 CSO/Table 2001 VBT CSO.xls new file mode 100644 index 0000000000000000000000000000000000000000..66a91f6ff210aff30a41905460d6abd34a0997c7 Binary files /dev/null and b/data-raw/US/CSO/2001 CSO/Table 2001 VBT CSO.xls differ diff --git a/data-raw/US/create_MortalityTables_US_CSO.R b/data-raw/US/create_MortalityTables_US_CSO.R index 5b20779436d0b33d718d84bcfded9ccf265df973..1d3e6edfb27cad87a7f26001c8cb8ae50062c7f0 100644 --- a/data-raw/US/create_MortalityTables_US_CSO.R +++ b/data-raw/US/create_MortalityTables_US_CSO.R @@ -52,6 +52,320 @@ createUSSelectTable = function( +#############################################################################h# +# USA 1980 CSO Tables #### +#############################################################################h# + +CSO1980.file = here::here("data-raw", "US", "CSO", "1980 CSO", "USA_1980_CSO-CET.xlsx") +CSO1980.file.out = here::here("data", "CSO1980.RData") + +CSO1980 = array( + data = c(mortalityTable.NA), + dim = c(7, 2, 3), + dimnames = list( + sex = c("m", "80% Male", "60% Male", "50% Male", "40% Male", "20% Male", "f"), + age = c("ANB", "ALB"), + type = c("Composite", "Non-Smoker", "Smoker") + ) +) +CET1980 = CSO1980 + +CSO1980.basic = array( + data = c(mortalityTable.NA), + dim = c(2, 1, 3), + dimnames = list( + sex = c("m", "f"), + age = c("ANB"), + type = c("Composite", "Non-Smoker", "Smoker") + ) +) + +createCSO1980 = function( + data, col, age.col = "Age", + sex = "Male", collar = "Composite", ageType = "ANB", + table = "1980 CSO", baseYear = 1980, ... +) { + qx = data %>% + select(age = !!age.col, qx = !!col) %>% + filter(!is.na(qx)) + + name = ifelse(collar == "Composite", + sprintf("%s %s %s", table, sex, ageType), + sprintf("%s %s %s %s", table, sex, collar, ageType)) + + mortalityTable.period( + name = name, ages = qx$age, deathProbs = qx$qx, baseYear = baseYear, + selectInitialAge = TRUE, + data = list( + dim = list(table = table, sex = sex, collar = collar, country = "USA", ageType = ageType, data = "official", year = baseYear, ...) + ) + ) +} + + +# plotMortalityTables(CSO1980) + facet_grid(.~ageType) +#-----------------------------------------------------------------# +### Primary Tables: M/F Comp/NS/SM ANB #### +#-----------------------------------------------------------------# + +CSO.data = full_join( + read_excel(CSO1980.file, sheet = "1980 CSO", skip = 4), + read_excel(CSO1980.file, sheet = "1980 CSO gender-blended", skip = 5), + by = "Age" +) +CET.data = full_join( + read_excel(CSO1980.file, sheet = "1980 CET", skip = 4), + read_excel(CSO1980.file, sheet = "1980 CET gender-blended", skip = 5), + by = "Age" +) +for (sex in c("m", "80% Male", "60% Male", "50% Male", "40% Male", "20% Male", "f")) { + Sx = recode(sex, "m" = "Male", "f" = "Female") + for (ageType in c("ANB", "ALB")) { + for (type in c("Composite", "Non-Smoker", "Smoker")) { + col = ifelse(type == "Composite", paste(Sx, ageType), paste(Sx, type, ageType)) + CSO1980[[sex, ageType, type]] = createCSO1980( + data = CSO.data, col = col, age.col = "Age", + table = "1980 CSO", sex = Sx, collar = type, ageType = ageType + ) + CET1980[[sex, ageType, type]] = createCSO1980( + data = CSO.data, col = col, age.col = "Age", + table = "1980 CSO", sex = Sx, collar = type, ageType = ageType + ) + } + } +} +for (sex in c("m", "f")) { + Sx = recode(sex, "m" = "Male", "f" = "Female") + for (ageType in c("ANB")) { + for (type in c("Composite", "Non-Smoker", "Smoker")) { + col = ifelse(type == "Composite", paste("Basic Table", Sx, ageType), paste("Basic Table", Sx, type, ageType)) + CSO1980.basic[[sex, ageType, type]] = createCSO1980( + data = CSO.data, col = col, age.col = "Age", + table = "1980 CSO Basic", sex = Sx, collar = type, ageType = ageType + ) + } + } +} + +# plotMortalityTables(CSO1980, aes = aes(color = sex)) + facet_grid(ageType ~ collar) +# plotMortalityTables(CSO1980.basic, aes = aes(color = sex)) + facet_grid(ageType ~ collar) +# plotMortalityTables(CSO1980.basic, aes = aes(color = collar, linetype = sex)) + + + +#-----------------------------------------------------------------# +### Select tables #### +#-----------------------------------------------------------------# + +CSO1980.select = CSO1980 +CET1980.select = CET1980 + +# Add selection factors +CSO1980.selectionFactors = list() + +for (sex in c("m", "80% Male", "60% Male", "50% Male", "40% Male", "20% Male", "f")) { + CSO1980.selectionFactors[[sex]] = read_excel(CSO1980.file, sheet = sprintf("Selection Factors %s", recode(sex, "m" = "Male", "f" = "Female")), skip = 4) + CSO1980.select[sex,,] = CSO1980.select[sex,,] %>% + mT.setSlot("selectionFactors", CSO1980.selectionFactors[[sex]]) %>% + mT.setDimInfo(data = "select") + CET1980.select[sex,,] = CET1980.select[sex,,] %>% + mT.setSlot("selectionFactors", CSO1980.selectionFactors[[sex]]) %>% + mT.setDimInfo(data = "select") +} + + + +# plotMortalityTables( +# CSO1980[,"ANB","Composite"] %>% mT.setDimInfo(SelectionAge = "Ultimate"), +# CSO1980.select[,"ANB","Composite"] %>% getPeriodTable(Period = 1980, selectionAge = 20) %>% mT.setDimInfo(SelectionAge = 20), +# CSO1980.select[,"ANB","Composite"] %>% getPeriodTable(Period = 1980, selectionAge = 40) %>% mT.setDimInfo(SelectionAge = 40), +# CSO1980.select[,"ANB","Composite"] %>% getPeriodTable(Period = 1980, selectionAge = 60) %>% mT.setDimInfo(SelectionAge = 60), +# CSO1980.select[,"ANB","Composite"] %>% getPeriodTable(Period = 1980, selectionAge = 80) %>% mT.setDimInfo(SelectionAge = 80), +# aes = aes(color = as.factor(SelectionAge)) +# ) + facet_grid(sex~.) + + +save(CSO1980, CET1980, CSO1980.basic, CSO1980.select, CET1980.select, file = CSO1980.file.out) + + + + + + + +#############################################################################h# +# USA 2001 CSO Tables #### +#############################################################################h# + +CSO2001.file.out = here::here("data", "CSO2001.RData") + +CSO2001 = array( + data = c(mortalityTable.NA), + dim = c(7, 2, 3), + dimnames = list( + sex = c("m", "80% Male", "60% Male", "50% Male", "40% Male", "20% Male", "f"), + age = c("ANB", "ALB"), + type = c("Composite", "Non-Smoker", "Smoker") + ) +) + +createCSO2001 = function( + file, sheet, skip = 2, + sex = "m", collar = "Composite", ageType, + age.col = "Iss. Age", rm.cols = c("Att. Age"), + ... +) { + Sx = recode(sex, "m" = "Male", "f" = "Female") + name = sprintf("2001 CSO %s %s %s", Sx, collar, ageType) + if(missing(sheet)) { + if (collar == "Composite") { + sheet = sprintf("2001 %s %s %s", Sx, collar, ageType) + } else { + sheet = sprintf("2001 %s%s %s", toupper(sex), recode(collar, "Smoker" = "SM", "Non-Smoker" = "NS"), ageType) + } + } + createUSSelectTable( + file = file, sheet = sheet, skip = skip, + age.col = age.col, rm.cols = rm.cols, + name = name, year = 2001, scale = 0.001, + table = sprintf("2001 CSO %s", collar), sex = sex, collar = collar, type = "CSO", country = "USA", ageType = ageType, + ...) +} + +# plotMortalityTables(CSO2001) + facet_grid(.~ageType) +#-----------------------------------------------------------------# +### Primary Tables: M/F Comp/NS/SM ANB #### +#-----------------------------------------------------------------# + +file = here::here("data-raw", "US", "CSO", "2001 CSO", "Table 2001 VBT CSO.xls") +for (sex in c("m", "f")) { + Sx = recode(sex, "m" = "Male", "f" = "Female") + for (ageType in c("ANB")) { + for (type in c("Composite", "Non-Smoker", "Smoker")) { + sheet = sprintf("CSO %s%s", toupper(sex), recode(type, "Composite" = "Comp", "Smoker" = "SM", "Non-Smoker" = "NS")) + CSO2001[[sex, ageType, type]] = createCSO2001( + file = file, sheet = sheet, + age.col = "2001 Valuation Basic Table and 2001 CSO Table", rm.cols = "Age", + sex = sex, collar = type, ageType = ageType + ) + } + } +} + +file = here::here("data-raw", "US", "CSO", "2001 CSO", "CSO_taskforce_appendix_j3_june2002.xls") +for (sex in c("m", "f")) { + Sx = recode(sex, "m" = "Male", "f" = "Female") + for (ageType in c("ALB")) { + for (type in c("Composite", "Non-Smoker", "Smoker")) { + sheet = sprintf("(%s) %s S&U %s", toupper(sex), type, ageType) + CSO2001[[sex, ageType, type]] = createCSO2001( + file = file, sheet = sheet, skip = 1, + age.col = "Issue Age", rm.cols = "Attained Age", + sex = sex, collar = type, ageType = ageType + ) + } + } +} + +# Gender-blended tables +file = here::here("data-raw", "US", "CSO", "2001 CSO", "CSO_taskforce_appendix_j3_june2002.xls") +for (sex in c("80% Male", "60% Male", "50% Male", "40% Male", "20% Male")) { + Sx = substr(sex, 1, 2) + for (ageType in c("ANB", "ALB")) { + for (type in c("Composite", "Non-Smoker", "Smoker")) { + sheet = sprintf("(%s) %s S&U %s", Sx, type, ageType) + CSO2001[[sex, ageType, type]] = createCSO2001( + file = file, sheet = sheet, skip = 1, + age.col = "Issue Age", rm.cols = "Attained Age", + sex = sex, collar = type, ageType = ageType + ) + } + } +} + + + +# plotMortalityTables(CSO2001) + facet_grid(ageType ~ collar) + aes(color = sex) +# plotMortalityTables(CSO2001) + facet_grid(sex ~ ageType) + aes(color = collar) + +save(CSO2001, file = CSO2001.file.out) + + +#-----------------------------------------------------------------# +### Preferred 2001 CSO Tables (only loaded) #### +#-----------------------------------------------------------------# + +CSO2001.Preferred = array( + data = c(mortalityTable.NA), + dim = c(3, 2, 2, 2), + dimnames = list( + preferred = c("Super Preferred", "Preferred", "Residual"), + sex = c("m", "f"), + age = c("ANB", "ALB"), + type = c("Non-Smoker", "Smoker") + ) +) + +createCSO2001.Preferred = function( + file, sheet, skip = 6, + sex = "m", collar = "Composite", ageType, Preferred = "Preferred", + age.col = "...1", rm.cols = c("Age"), + ... +) { + # browser() + Sx = recode(sex, "m" = "Male", "f" = "Female") + name = sprintf("2001 CSO %s %s - %s %s", Preferred, ageType, Sx, collar) + if(missing(sheet)) { + if (collar == "Non-Smoker") { + prf = recode(Preferred, "Super Preferred" = 1, "Preferred" = 2, "Residual" = 3) + } else { + prf = recode(Preferred, "Preferred" = 1, "Residual" = 2) + } + sheet = sprintf("%s%s%s %s", toupper(sex), Sm.short, prf, ageType) + } + createUSSelectTable( + file = file, sheet = sheet, skip = skip, + age.col = age.col, rm.cols = rm.cols, + name = name, year = 2001, scale = 0.001, + table = sprintf("2001 CSO %s", collar), sex = sex, collar = collar, type = "CSO", country = "USA", ageType = ageType, Preferred = Preferred, + ...) +} + + +file = here::here("data-raw", "US", "CSO", "2001 CSO Preferred", "2001 CSO Preferred Class Structure Mortality Tables.xls") +for (preferred in c("Super Preferred", "Preferred", "Residual")) { + for (sex in c("m", "f")) { + for (ageType in c("ANB", "ALB")) { + for (type in c("Smoker", "Non-Smoker")) { + # There are no super-preferred smokers => skip that case + if (preferred != "Super Preferred" || type != "Smoker") { + # Sheet naming is defined in the tab "Table of Contents": A.[1234].[ab].{i,ii,iii,iv,v} + sheet = sprintf("A.%d.%s.%s", recode(ageType, "ANB" = 1, "ALB" = 3), recode(sex, "m" = "a", "f" = "b"), recode( + paste(preferred, type), + "Super Preferred Non-Smoker" = "i", + "Preferred Non-Smoker" = "ii", + "Residual Non-Smoker" = "iii", + "Preferred Smoker" = "iv", + "Residual Smoker" = "v")) + CSO2001.Preferred[[preferred, sex, ageType, type]] = createCSO2001.Preferred( + file = file, sheet = sheet, + sex = sex, collar = type, ageType = ageType, Preferred = preferred + ) + } + } + } + } +} + + +# plotMortalityTables(CSO2001.Preferred[,,"ANB",], legend.position = "bottom") + facet_grid(sex ~ collar) + aes(color = Preferred) + +save(CSO2001.Preferred, file = CSO2001Pref.file.out) + + + + + #############################################################################h# # USA 2017 CSO Tables #### #############################################################################h# @@ -205,6 +519,7 @@ save(CSO2017, file = CSO2017file.out) # plotMortalityTables(CSO2017) + facet_grid(ageType ~ collar) + aes(linetype = loaded, color = sex) # plotMortalityTables(CSO2017) + facet_grid(sex ~ ageType) + aes(linetype = loaded, color = collar) +# plotMortalityTables(CSO2017.Preferred[,,"ANB",,]) + facet_grid(sex ~ collar) + aes(linetype = loaded, color = Preferred) #-----------------------------------------------------------------# diff --git a/data/CSO1980.RData b/data/CSO1980.RData new file mode 100644 index 0000000000000000000000000000000000000000..0e850666d3bc67aa43c530d0285d17b2d4e0f5bd Binary files /dev/null and b/data/CSO1980.RData differ diff --git a/data/CSO2001.Preferred.RData b/data/CSO2001.Preferred.RData new file mode 100644 index 0000000000000000000000000000000000000000..17832a8e8389cd2021e802631d2408eb7770c824 Binary files /dev/null and b/data/CSO2001.Preferred.RData differ diff --git a/data/CSO2001.RData b/data/CSO2001.RData new file mode 100644 index 0000000000000000000000000000000000000000..80fea92087f287370bec3b8865447d7df1811647 Binary files /dev/null and b/data/CSO2001.RData differ