Matemática Atuarial I

Múltiplas vidas - Anuidades (Tarefa 7)

Marcio Vaz

2022-05-09

Configurações iniciais

Definindo opções e pacotes

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 %>%, %$%

Definindo a base de dados

setwd("~/ATUARIA/Monitoria")
dados = read.table(file = 'bremsmt2015f.txt', header = T)

Conhecendo a base de dados

head(dados) %>% knitr::kable()
x qx
0 0.000415
1 0.000184
2 0.000105
3 0.000073
4 0.000060
5 0.000055
with(dados, smoothScatter(x = x, y = qx))

Construção de tábuas de mortalidade

Usando o pacote lifecontingencies, é possível obter tábuas de mortalidade de duas classes diferentes:

Classe lifetable

Apresenta uma tabela resumida, constando apenas funções demográficas. Pode ser construída a partir de dados de probabilidade (\(p_x\) ou \(q_x\)):

tvbrf = probs2lifetable(
  probs = dados$qx,
  type  = 'qx',
  radix = 10000,
  name  = 'BR EMS 2015 F'
)

print(tvbrf)
## Life table BR EMS 2015 F 
## 
##   x       lx       px      ex
## 1 0 10000.00 0.999585 84.1845
## 2 1  9995.85 0.999816 83.2195
## 3 2  9994.01 0.999895 82.2348
## 4 3  9992.96 0.999927 81.2434
## 5 4  9992.23 0.999940 80.2494
##  [ reached 'max' / getOption("max.print") -- omitted 113 rows ]

Classe actuarialtable

Apresenta uma tabela atuarial, contendo as funções de comutação (\(D_x\), \(M_x\), \(C_x\), \(N_x\) e \(R_x\)). É construída a partir do comando new, utlizando-se de um vetor de idades x, número de vivos lx e taxa de juros interest.

tcbrf = new(
  Class = 'actuarialtable',
  x  = tvbrf@x,
  lx = tvbrf@lx,
  interest = 0.04,
  name = 'BR EMS 2015 F'
)

print(tcbrf)
## Actuarial table  BR EMS 2015 F interest rate  4 % 
## 
##   x       lx       Dx     Nx      Cx      Mx      Rx
## 1 0 10000.00 10000.00 248662 3.99135 436.089 31595.8
## 2 1  9995.85  9611.39 238662 1.70325 432.098 31159.7
##  [ reached 'max' / getOption("max.print") -- omitted 117 rows ]

Cálculo de anuidades

Parâmetros de exemplo

Iremos tomar alguns valores de exemplo:

Exemplo = list(
  x = 110,                   # idade do segurado x
  y = 107,                   # idade do segurado y
  grupo = c(tcbrf, tcbrf),   # o grupo é formado por duas mulheres (mesma tábua)
  w = getOmega(tcbrf),       # idade limite da tábua
  m = 2,                     # valor de diferimento
  n = 2,                     # valor de temporalidade
  i = 0.04);                 # taxa de juros

attach(Exemplo)              # disponibiliza os objetos

Cálculo usando o pacote lifecontingencies

O cálculo de anuidades para múltiplas vidas pode ser facilmente realizado utilizando a função axyzn. Esta função utiliza um vetor de tábuas atuariais (objetos de classe 'actuarialtable') e um vetor de idades para o grupo de segurados. Modificando os argumentos n, m e k da função é possível editar informações de temporalidade, diferimento e fracionamento, respectivamente, referentes ao seguro calculado. É preciso definir se o status de sobrevivência do grupo é do tipo vida conjunta ('joint' ou 'Joint-Life') ou último sobrevivente ('last' ou 'Last-Survivor').
Ademais, é possível especificar se a série de pagamentos payment é antecipada ('advance' ou 'due') ou postecipada ('arrears' ou 'imediate'). Por definição, o resultado apresentado considera pagamentos antecipados.

axyzn(grupo, c(x,y), m = m, n = n, status = 'joint')
## [1] 0.0506188

# Interpretação: anuidade atuarial condicionada à sobrevidência do grupo formado por
#                x = 110 e y = 107, sob o status de vida conjunta, com pagamentos
#                antecipados, pelo período de 2 anos, a partir do deferimento de 2 anos

Cálculo manual no R

É possível conceber um método alternativo de cálculo de anuidades no R, que nao dependa das funções do pacote lifecontingencies. Primeiramente, devemos lembrar que a fórmula geral da anuidade atuarial antecipada para uma vida (\(x\)) é dada pelo somatório a seguir:

\[\sum_{t=0}^{\omega-x}v^{t}\cdot{}_{t}p_{x}\] Os limites do somatótio variam de acordo com o tipo de anuidade e, com base nisso, é possível entender que devemos iniciar definindo um intervalo t, que compreenda a temporalidade/diferimento desejados.

t = m:(m+n-1)
t
## [1] 2 3

#Interpretação: o seguro começa a partir do tempo t = 2 e tem duração de n = 2 períodos

Com isso já é possível obter o fator de desconto \(v^{t}\) para cada período.

v = 1/(1+i)
v^(t)
## [1] 0.924556 0.888996

# Interpretação: fatores de desconto financeiro que trazem a valor presente cada parcela
#                do somatório a ser calculado

Em seguida, a parte atuarial do cálculo. Primeiro iremos precisar do vetor \(l_x\) e podemos obtê-lo da tábua de mortalidade tvbrf definida. Como ambos os segurados do grupo nesse exemplo (x e y), pertencem à mesma tábua de mortalidade, teremos \(l_x=l_y\).

lx = ly = tvbrf@lx
print(lx)
##  [1] 10000.00  9995.85  9994.01  9992.96  9992.23  9991.63  9991.08  9990.54
##  [9]  9989.98  9989.39  9988.76  9988.09  9987.36  9986.57  9985.71  9984.76
## [17]  9983.68  9982.39  9980.74  9978.50
##  [ reached getOption("max.print") -- omitted 99 entries ]

# Interpretação: número de vivos à idade x (ou y)

Agora para a probabilidade de sobreviência do grupo (sob o status de vida conjunta), em função do número de vivos, deve-se lembrar da fórmula:

\[{}_{t}p_{xy}=\frac{l_{x+t}}{l_x}\cdot\frac{l_{y+t}}{l_y}\] Ou seja, a probabilidade deve ser calculada passando o intervalo t dentro dos vetores lx e ly, definidos.
Atenção: Os índices de qualquer objeto numerado no R começam por 1 e não 0. Em virtude disso, deve ser somado + 1 de modo a obter a indexação correta na chamada dos vetores.
Vejamos o cálculo no R:

pxyt = (lx[x+t+1]/lx[x+1]) * (ly[y+t+1]/ly[y+1])
pxyt
## [1] 0.0474493 0.0075920

# Intepretação: probabilidade de sobrevivência do grupo sob o status de vida conjunta
#               no intervalo t = (m, m+n-1).

Com efeito, o cálculo da anuidade atuarial depende tão somente da probabilidade de sobrevivência do grupo e do fator de desconto financeiro. Sendo assim, o somatório do produto dos valores encontratos resulta na anuidade anteriormente calculada.

sum(v^(t) * pxyt)
## [1] 0.0506188

# Interpretação: anuidade atuarial condicionada à sobrevidência do grupo formado por
#                x = 110 e y = 107, sob o status de vida conjunta, com pagamentos
#                antecipados, pelo período de 2 anos, a partir do deferimento de 2 anos

Comparando resultados

Vida conjunta

\({}_{t}p_{xy}={}_{t}p_{x}\cdot{}_{t}p_{y}\)

Anuidade antecipada diferida e temporária

\(\sum_{t=m}^{m+n-1}v^{t}\cdot{}_{t}p_{xy}\)

Usando axyzn

axyzn(
  grupo,
  c(x,y),
  m = m,
  n = n,
  status = 'joint')
## [1] 0.0506188

Calculando diretamente no R

t = m:(m+n-1)
lx = ly = tvbrf@lx
pxyt = (lx[x+t+1]/lx[x+1]) * (ly[y+t+1]/ly[y+1])
sum(v^(t) * pxyt)
## [1] 0.0506188

Anuidade antecipada diferida e vitalícia

\(\sum_{t=m}^{\omega-x}v^{t}\cdot{}_{t}p_{xy}\)

Usando axyzn

axyzn(
  grupo,
  c(x,y),
  m = m,
  status = 'joint')
## [1] 0.0514823

Calculando diretamente no R

t = m:(w-x)
lx = ly = tvbrf@lx
pxyt = (lx[x+t+1]/lx[x+1]) * (ly[y+t+1]/ly[y+1])
sum(v^(t) * pxyt)
## [1] 0.0514823

Anuidade antecipada imediata e temporária

\(\sum_{t=0}^{n-1}v^{t}\cdot{}_{t}p_{xy}\)

Usando axyzn

axyzn(
  grupo,
  c(x,y),
  n = n,
  status = 'joint')
## [1] 1.22932

Calculando diretamente no R

t = 0:(n-1)
lx = ly = tvbrf@lx
pxyt = (lx[x+t+1]/lx[x+1]) * (ly[y+t+1]/ly[y+1])
sum(v^(t) * pxyt)
## [1] 1.22932

Anuidade antecipada imediata e vitalícia

\(\sum_{t=0}^{\omega-x}v^{t}\cdot{}_{t}p_{xy}\)

Usando axyzn

axyzn(
  grupo,
  c(x,y),
  status = 'joint')
## [1] 1.2808

Calculando diretamente no R

t = 0:(w-x)
lx = ly = tvbrf@lx
pxyt = (lx[x+t+1]/lx[x+1]) * (ly[y+t+1]/ly[y+1])
sum(v^(t) * pxyt)
## [1] 1.2808

Último sobrevivente

\({}_{t}p_{\overline{xy}}={}_{t}p_{x}+{}_{t}p_{y}-{}_{t}p_{xy}\)

Anuidade antecipada diferida e temporária

\(\sum_{t=m}^{m+n-1}v^{t}\cdot{}_{t}p_{\overline{xy}}\)

Usando axyzn

axyzn(
  grupo,
  c(x,y),
  m = m,
  n = n,
  status = 'last')
## [1] 0.536271

Calculando diretamente no R

t = m:(m+n-1)
lx = ly = tvbrf@lx
pxt = lx[x+t+1]/lx[x+1]
pyt = ly[y+t+1]/ly[y+1]
sum(v^(t) * (pxt + pyt - pxt*pyt))
## [1] 0.536271

Anuidade antecipada diferida e vitalícia

\(\sum_{t=m}^{\omega-x}v^{t}\cdot{}_{t}p_{\overline{xy}}\)

Usando axyzn

axyzn(
  grupo,
  c(x,y),
  m = m,
  status = 'last')
## [1] 0.628899

Calculando diretamente no R

t = m:(w-x)
lx = ly = tvbrf@lx
pxt = lx[x+t+1]/lx[x+1]
pyt = ly[y+t+1]/ly[y+1]
sum(v^(t) * (pxt + pyt - pxt*pyt))
## [1] 0.628839

Anuidade antecipada imediata e temporária

\(\sum_{t=0}^{n-1}v^{t}\cdot{}_{t}p_{\overline{xy}}\)

Usando axyzn

axyzn(
  grupo,
  c(x,y),
  n = n,
  status = 'last')
## [1] 1.71672

Calculando diretamente no R

t = 0:(n-1)
lx = ly = tvbrf@lx
pxt = lx[x+t+1]/lx[x+1]
pyt = ly[y+t+1]/ly[y+1]
sum(v^(t) * (pxt + pyt - pxt*pyt))
## [1] 1.71672

Anuidade antecipada imediata e vitalícia

\(\sum_{t=0}^{\omega-x}v^{t}\cdot{}_{t}p_{\overline{xy}}\)

Usando axyzn

axyzn(
  grupo,
  c(x,y),
  status = 'last')
## [1] 2.34562

Calculando diretamente no R

t = 0:(w-x)
lx = ly = tvbrf@lx
pxt = lx[x+t+1]/lx[x+1]
pyt = ly[y+t+1]/ly[y+1]
sum(v^(t) * (pxt + pyt - pxt*pyt))
## [1] 2.34556