Procedimentos Preliminares

rm(list=ls())               # limpa os objetos da ultima execução
options(scipen = 9999,      # inibe exibição de resultaos em notação científica
        digits = 6,         # limita o número de digitos das saídas do programa
        max.print = 20)     # limita o tamanho da saída do programa

library(lifecontingencies)  # pacote com operações financeiras e atuariais
library(magrittr)           # pacote com operadores semânticos %>%, %$%
library(kableExtra)         # pacote para formatar tabelas
library(readxl)             # pacote para ler e manipular arquivos xlsx
library(ggplot2)            # pacote para elaboração de gráficos
library(MortalityTables)    # pacote para manipulação de tábuas biométricas

Tábuas Biométricas

Utilizaremos neste trabalho as tábuas BR-EMS 2021mt-v.2021 feminina e masculina, AT-2000 FEMALE e AT-2000 MALE, IBGE 2020 - MULHERES e IBGE 2020 - HOMENS e AT-83 FEMALE (IAM) E AT-83 MALE (IAM). A taxa de juros será i = 6% a.a.

### Obtenção dos dados
setwd("C:/Users/cleod/OneDrive/Documentos/Documentos/Estudos/Ciências Atuariais/Matemática Atuarial II")
tabuas <- read_excel('Tábuas.xlsx')

brems_mas <- tabuas[, c("Idade", "BR-EMSmt-v.2021-m")]
names(brems_mas) <- c("x", "qx")
brems_fem <- tabuas[, c("Idade", "BR-EMSmt-v.2021-f")]
names(brems_fem) <- c("x", "qx")
at2000_mas <- tabuas[, c("Idade", "AT-2000 MALE")]
names(at2000_mas) <- c("x", "qx")
at2000_fem <- tabuas[, c("Idade", "AT-2000 FEMALE")]
names(at2000_fem) <- c("x", "qx")
ibge2020_mas <- tabuas[,c("Idade", "IBGE 2020 - HOMENS")]
names(ibge2020_mas) <- c("x", "qx")
ibge2020_fem <- tabuas[,c("Idade", "IBGE 2020 - MULHERES")]
names(ibge2020_fem) <- c("x", "qx")
at_83_mas <- tabuas[,c("Idade", "AT-83 MALE (IAM)")]
names(at_83_mas) <- c("x", "qx")
at_83_fem <- tabuas[,c("Idade", "AT-83 FEMALE (IAM)")]
names(at_83_fem) <- c("x", "qx")
### Construção das tábuas atuariais
brems_mas <- probs2lifetable(probs = brems_mas$qx, type = 'qx', radix = 100000, name = 'BR-EMSmt-v.2021-m')
brems_mas <- new('actuarialtable', x = brems_mas@x, lx = brems_mas@lx, interest = 0.06, name = 'BR-EMSmt-v.2021-m')

brems_fem <- probs2lifetable(probs = brems_fem$qx, type = 'qx', radix = 100000, name = 'BR-EMSmt-v.2021-f')
brems_fem <- new('actuarialtable', x = brems_fem@x, lx = brems_fem@lx, interest = 0.06, name = 'BR-EMSmt-v.2021-f')

at2000_mas <- probs2lifetable(probs = at2000_mas$qx, type = 'qx', radix = 100000, name = 'AT-2000 MALE')
at2000_mas <- new('actuarialtable', x = at2000_mas@x, lx = at2000_mas@lx, interest = 0.06, name = 'AT-2000 MALE')

at2000_fem <- probs2lifetable(probs = at2000_fem$qx, type = 'qx', radix = 100000, name = 'AT-2000 FEMALE')
at2000_fem <- new('actuarialtable', x = at2000_fem@x, lx = at2000_fem@lx, interest = 0.06, name = 'AT-2000 FEMALE')

ibge2020_mas <- probs2lifetable(probs = ibge2020_mas$qx, type = 'qx', radix = 100000, name = 'IBGE 2020 - HOMENS')
ibge2020_mas <- new('actuarialtable', x = ibge2020_mas@x, lx = ibge2020_mas@lx, interest = 0.06, name = 'IBGE 2020 - HOMENS')

ibge2020_fem <- probs2lifetable(probs = ibge2020_fem$qx, type = 'qx', radix = 100000, name = 'IBGE 2020 - MULHERES')
ibge2020_fem <- new('actuarialtable', x = ibge2020_fem@x, lx = ibge2020_fem@lx, interest = 0.06, name = 'IBGE 2020 - MULHERES')

at83_fem <- probs2lifetable(probs = at_83_fem$qx, type = 'qx', radix = 100000, name = 'AT-83 FEMALE (IAM)')
at83_fem <- new('actuarialtable', x = at83_fem@x, lx = at83_fem@lx, interest = 0.06, name = 'AT-83 FEMALE (IAM)')

at83_mas <- probs2lifetable(probs = at_83_mas$qx, type = 'qx', radix = 100000, name = 'AT-83 MALE (IAM)')
at83_mas <- new('actuarialtable', x = at83_mas@x, lx = at83_mas@lx, interest = 0.06, name = 'AT-83 MALE (IAM)')

Instruções:

O presente trabalho (em grupo, valor 4,0) visa a simulação de 1.000 cenários do cálculo de um seguro de vida dotal misto que envolve um casal, com idades o homem 30 anos e mulher 25 anos. O seguro oferece a seguinte indenização:

  • em caso de morte de um dos segurados durante o prazo de 20 anos, paga-se no final do ano da morte a indenização de R$ 200.000,00 ao que sobreviveu;

  • em caso de sobrevivência de ambos no final dos 20 anos após o início do contrato, reembolsam-se os prêmios pagos, sendo deduzido uma taxa de 10% do valor para custeio de despesas.

A taxa de juros é de 6% e o prêmio é pago pelo casal anualmente ao longo de 20 anos de forma antecipada. Para a análise utilize como base na tábua de vida BR-EMS 2021 (feminina e masculina), para estimar as probabilidades de sobrevivência.

Entrega: O trabalho deve ser elaborado em formato de relatório (Word) e desenvolvido com o software R a partir do pacote lifecontingencies (com o uso das funções rLife, rLifeContingencies, rLifexyz e rLifeContingenciesXyz). É preciso que o trabalho contemple as seguintes questões:

1 - Determinação do Valor Médio do Prêmio.

2 - Sensibilidade do Prêmio às mudanças de parâmetros: Demonstrar como mudanças no parâmetro tempo de vida futuro, dada pela tábua de vida, impactam o custo do seguro de vida, considerando uma amostra aleatória de tamanho 5.

3 - Comparação com outras Tábuas de Vida: Além da tábua de vida BR-EMS 2021, comparar os resultados obtidos com outras tábuas de vida amplamente utilizadas (AT-2000, AT-83 e IBGE2020). Essa análise permitirá avaliar como a escolha da tábua de vida pode afetar as projeções atuariais.

4 - Determinação da Reserva Matemática, de forma estocástica, passados 10 anos de contratação do seguro a partir da simulação de 1.000 (mil) cenários para o cálculo atuariais.

Cálculo do Valor Médio do Prêmio

#### Tábuas
tabua_brems <- c(brems_mas,brems_fem)
tabua_at <- c(at2000_mas, at2000_fem)
tabua_ibge <- c(ibge2020_mas, ibge2020_fem)
tabua_at83 <- c(at83_mas, at83_fem)

#### Condições
importancia <- 200000
idades <- c(30,25)
tempo <- 20
despesa <- 0.1
juros <- 0.06
desconto <- 1/(1+juros)

### Cálculo do Prêmio Determinístico
## Função para cálculo
calcular_premio_det <- function(tabua, idades, tempo, desconto, importancia, despesa) {
  seguro <- Axyzn(tablesList = tabua, x = idades, n = tempo, status = 'joint')
  pagamento <- axyzn(tablesList = tabua, x = idades, n = tempo, status = 'last', payment = 'advance')
  sobrevivencia <- desconto^tempo * pxyzt(tablesList = tabua, x = idades, t = tempo, status = 'joint')

  premio_det <- (importancia * seguro) / (pagamento - tempo * sobrevivencia * (1 - despesa))
  return(premio_det)
}

## Cálculo dos Prêmios
# Tábuas BR-EMS
premio_brems_d <- calcular_premio_det(tabua_brems, idades, tempo, desconto, importancia, despesa)
# Tábuas AT-2000
premio_at2000_d <- calcular_premio_det(tabua_at, idades, tempo, desconto, importancia, despesa)
# Tábuas IBGE-2020
premio_ibge_d <- calcular_premio_det(tabua_ibge, idades, tempo, desconto, importancia, despesa)
# Tábuas AT-83
premio_at83_d <- calcular_premio_det(tabua_at83, idades, tempo, desconto, importancia, despesa)

### Cálculo do Prêmio Médio
## Função para cálculo
calcular_premio <- function(tabuas, idades, tempo, juros, importancia, despesa) {
  seguro <- mean(rLifeContingenciesXyz(n = 1000, lifecontingency = 'Axyz', tablesList = tabuas, x = idades, t = tempo, i = juros, status = 'joint'))
  pagamento <- mean(rLifeContingenciesXyz(n = 1000, lifecontingency = 'axyz', tablesList = tabuas, x = idades, t = tempo, i = juros, status = 'last', payment = 'advance'))
  sobrevivencia <- mean(rLifeContingenciesXyz(n = 1000, lifecontingency = 'axyz', tablesList = tabuas, x = idades, m = tempo, status = 'joint', payment = 'advance')) / 
                      mean(rLifeContingenciesXyz(n = 1000, lifecontingency = 'axyz', tablesList = tabuas, x = c(50, 45), status = 'joint', payment = 'advance'))

  premio_est <- (importancia * seguro) / (pagamento - tempo * sobrevivencia * (1 - despesa))
  return(premio_est)
}

## Cálculo dos Prêmios
# Tábuas BR-EMS
premio_brems_e <- calcular_premio(tabua_brems, idades, tempo, juros, importancia, despesa)
# Tábuas AT-2000
premio_at2000_e <- calcular_premio(tabua_at, idades, tempo, juros, importancia, despesa)
# Tábuas IBGE 2020
premio_ibge_e <- calcular_premio(tabua_ibge, idades, tempo, juros, importancia, despesa)
# Tábuas AT-83
premio_at83_e <- calcular_premio(tabua_at83, idades, tempo, juros, importancia, despesa)

Resposta:

O Prêmio será calculado por meio da expressão:

\[ P_{30;25} = \frac{200.000 \cdot A^1_{30;25:\overline{20|}}}{ä_{\overline{30;25}:\overline{20|}} - 20 \cdot {}_{20}E_{30;20} \cdot(1-0,1)} \]

Com base nas quatro tábuas de mortalidade, calculamos os valores dos prêmios por meio determinístico e por valor médio, este último através de uma simulação estocástica de 1.000 amostras, obtendo os valores da tabela a seguir:

Tábua Prêmio.Estocástico Prêmio.Determinístico
BR-EMSmt-v.2021 839.120 720.438
AT-2000 774.276 562.605
IBGE 2020 1475.161 1299.392
AT-83 801.469 636.393

Sensibilidade do Prêmio:

### Geração dos tempos futuros de vida
## Função para cálculo dos tempos de vida futuros
calcular_tempo_fut <- function(tabua, idades, amostra) {
  rLifexyz(n = amostra, tablesList = tabua, x = idades, type = 'Kx')
}

## Cálculo dos tempos por tábua
# Tábuas BR-EMS 
tf_brems <- calcular_tempo_fut(tabua_brems, idades, amostra = 5)
# Tábuas At-2000
tf_at2000 <- calcular_tempo_fut(tabua_at, idades, amostra = 5)
# Tábuas IBGE 2020 
tf_ibge <- calcular_tempo_fut(tabua_ibge, idades, amostra = 5)
# Tábuas At-83
tf_at83 <- calcular_tempo_fut(tabua_at83, idades, amostra = 5)

### Cálculo do Prêmio
## Função para cálculo dos prêmios
calcular_premio_tf <- function(tabua, idades, tempos_futuros, tempo, desconto, importancia, despesa) {
  apply(tempos_futuros, 1, function(tf) {
    seguro <- Axyzn(tablesList = tabua, x = idades, n = min(tempo, tf[1], tf[2]), status = 'joint')
    pagamento <- axyzn(tablesList = tabua, x = idades, n = min(tempo, max(tf[1], tf[2])), status = 'last')
    sobrevivencia <- desconto^tempo * pxyzt(tablesList = tabua, x = idades, t = tempo, status = 'joint')
    (importancia * seguro) / (pagamento - tempo * sobrevivencia * (1 - despesa))
  })
}

## Cálculo dos prêmios para todas as amostras
# Tábua BR-EMS 2021
premios_tf_brems <- calcular_premio_tf(tabua_brems, idades, tf_brems, tempo, desconto, importancia, despesa)
# Tábua AT-2000
premios_tf_at2000 <- calcular_premio_tf(tabua_at, idades, tf_at2000, tempo, desconto, importancia, despesa)
# Tábua IBGE 2020
premios_tf_ibge <- calcular_premio_tf(tabua_ibge, idades, tf_ibge, tempo, desconto, importancia, despesa)
# Tábua AT-83
premios_tf_at83 <- calcular_premio_tf(tabua_at83, idades, tf_at83, tempo, desconto, importancia, despesa)

Prêmios calculados com base no tempo de vida futuro utilizando as tábuas BR-EMSmt-v.2021:

Tempo.de.Vida.Futuro.Homem Tempo.de.Vida.Futuro.Mulher Prêmio.Correspondente
59 58 720.438
32 58 720.438
63 52 720.438
40 49 720.438
55 60 720.438

Prêmios calculados com base no tempo de vida futuro utilizando as tábuas AT-2000:

Tempo.de.Vida.Futuro.Homem Tempo.de.Vida.Futuro.Mulher Prêmio.Correspondente
47 22 562.605
58 71 562.605
46 68 562.605
45 66 562.605
39 59 562.605

Prêmios calculados com base no tempo de vida futuro utilizando as tábuas IBGE 2020:

Tempo.de.Vida.Futuro.Homem Tempo.de.Vida.Futuro.Mulher Prêmio.Correspondente
60 52 1299.39
58 53 1299.39
42 42 1299.39
45 58 1299.39
50 41 1299.39

Prêmios calculados com base no tempo de vida futuro utilizando as tábuas AT-83:

Tempo.de.Vida.Futuro.Homem Tempo.de.Vida.Futuro.Mulher Prêmio.Correspondente
71 60 636.393
38 54 636.393
68 50 636.393
60 74 636.393
53 42 636.393

Cálculo da Reserva Matemática:

### Condições
t_reserva <- 10
idades_reserva <- idades + t_reserva

### Cálculo da Reserva Determinística
## Função para o cálculo
calcular_reserva_det <- function(tabua, premio, n_pagamento, desconto, importancia, despesa) {
  seguro <- Axyzn(tablesList = tabua, x = idades_reserva, n = t_reserva, status = 'joint')
  pagamento <- axyzn(tablesList = tabua, x = idades_reserva, n = t_reserva, status = 'last', payment = 'advance')
  sobrevivencia <- desconto^t_reserva * pxyzt(tablesList = tabua, x = idades_reserva, t = t_reserva, status = 'joint')
  reserva_det <- (importancia * seguro) + (premio * (n_pagamento * (1 - despesa) * sobrevivencia - pagamento))
  return(reserva_det)
}

## Cálculo das Reservas Matemáticas
# Tábuas BR-EMS
reserva_brems_d <- calcular_reserva_det(tabua_brems, premio_brems_d, tempo, desconto, importancia, despesa)
# Tábuas AT-2000
reserva_at2000_d <- calcular_reserva_det(tabua_at, premio_at2000_d, tempo, desconto, importancia, despesa)
# Tábuas IBGE 2020
reserva_ibge_d <- calcular_reserva_det(tabua_ibge, premio_ibge_d, tempo, desconto, importancia, despesa)
# Tábuas AT-83
reserva_at83_d <- calcular_reserva_det(tabua_at83, premio_at83_d, tempo, desconto, importancia, despesa)

### Cálculo da Reserva Matemática Média
## Função para cálculo
calcular_reserva <- function(tabua, premio, n_pagamento, desconto, importancia, despesa) {
  seguro <- mean(rLifeContingenciesXyz(n = 1000, lifecontingency = 'Axyz', tablesList = tabua, x = idades_reserva, t = t_reserva, i = juros, status = 'joint'))
  pagamento <- mean(rLifeContingenciesXyz(n = 1000, lifecontingency = 'axyz', tablesList = tabua, x = idades_reserva, t = t_reserva, i = juros, status = 'last', payment = 'advance'))
  sobrevivencia <- mean(rLifeContingenciesXyz(n = 1000, lifecontingency = 'axyz', tablesList = tabua, x = idades_reserva, m = t_reserva, i = juros, status = 'joint', payment = 'advance')) / mean(rLifeContingenciesXyz(n = 1000, lifecontingency = 'axyz', tablesList = tabua, x = c(50, 45), i = juros, status = 'joint', payment = 'advance'))
  reserva_est <- (importancia * seguro) + (premio * (n_pagamento * (1 - despesa) * sobrevivencia - pagamento))
  return(reserva_est)
}

## Cálculo das Reservas Matemáticas Médias
# Tábuas BR-EMS 2021
reserva_brems_e <- calcular_reserva(tabua_brems, premio_brems_e, tempo, desconto, importancia, despesa)
# Tábuas AT-2000
reserva_at2000_e <- calcular_reserva(tabua_at, premio_at2000_e, tempo, desconto, importancia, despesa)
# Tábuas IBGE 2020
reserva_ibge_e <- calcular_reserva(tabua_ibge, premio_ibge_e, tempo, desconto, importancia, despesa)
# Tábuas AT-83
reserva_at83_e <- calcular_reserva(tabua_at83, premio_at83_e, tempo, desconto, importancia, despesa)

Resposta:

A Reserva Matemática será calculada por meio da expressão:

\[ {}_{10}V_{30;25} = 200.000 \cdot A^1_{40;35:\overline{10|}} + 20 \cdot P_{30} \cdot {}_{10}E_{40;35} \cdot (1-0,1) - P_{30} \cdot ä_{\overline{40;35}:\overline{10|}} \] Com pequenas manipulações algébricas podemos simplificar a expressão para:

\[ {}_{10}V_{30;25} = 200.000 \cdot A^1_{40;35:\overline{10|}} + P_{30} \cdot (18 \cdot {}_{10}E_{40;35} - ä_{\overline{40;35}:\overline{10|}}) \] Com base nas quatro tábuas de mortalidade, calculamos os valores das reserva matemáticas por meio determinístico e por valor médio, este último através de uma simulação estocática de 1.000 amostras, obtendo os valores da tabela a seguir.

Para o cálculo das Reservas Matemáticas Médias, de forma estocástica, utilizamos os prêmios médios de cada tábua, calculados anteriormente, a fim de que a Reserva Média calculada corresponda ao prêmio médio anterior.

Tábua Reserva.Estocástica Reserva.Determinística
BR-EMSmt-v.2021 7540.77 5925.28
AT-2000 4764.76 4716.13
IBGE 2020 9928.60 10294.73
AT-83 6228.26 5536.57