Matemática Atuarial I

Múltiplas vidas - Seguros (Tarefa 6)

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 seguros

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 seguros 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 o pagamentoo payment é antecipado ('advance' ou 'due') ou postecipado ('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.0411289

# Interpretação: seguro unitário temporário que cobre a probabilidade de extinção do grupo
#                formado por x = 110 e y = 107, sob o status de vida conjunta, no período 
#                de 2 anos, contado a partir do deferimento de também 2 anos.

Cálculo manual no R

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

\[\sum_{t=0}^{\omega-x}v^{t+1}\cdot{}_{t|}q_{x}=\sum_{t=0}^{\omega-x}v^{t+1}\cdot{}_{t}p_{x}\cdot{}_{}q_{x+t}\] Os limites do somatótio variam de acordo com o tipo de seguro 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+1}\) para cada período.

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

# 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).

Para que haja a extinção do grupo no intervalo t definido, devemos, novamente, lembrar da fórmula de \(q_{xy}\) em função do número de vivos (para o status vida conjunta):

\[{}_{}q_{x+t:y+t}=1-p_{x+t}\cdot p_{y+t}=1-\frac{l_{x+t+1}}{l_{x+t}}\cdot\frac{l_{y+t+1}}{l_{y+t}}\] Ou seja, a probabilidade aqui é de que o grupo seja extinto, contudo havendo sobrevivido até o limite do intervalo. Trata-se da probabilidade de falha do status vida conjunta entre as idades \((xy)+t\) e \((xy)+t+1\). Vejamos o cálculo no R:

qxy1 = 1 - (lx[x+t+1+1]/lx[x+t+1]) * (ly[y+t+1+1]/ly[y+t+1])
qxy1
## [1] 0.839998 0.877693

# Interpretação: probabilidade de falha do grupo sob o status vida conjunta, após 
#                ter sobrevivido no intervalo t = (m, m+n-1).

Enfim, o somatório do produto dos valores encontratos resulta no seguro anteriormente calculado.

sum(v^(t+1) * pxyt * qxy1)
## [1] 0.0411289

# Interpretação: seguro unitário temporário que cobre a probabilidade de extinção do grupo
#                formado por x = 110 e y = 107, sob o status de vida conjunta, no período 
#                de 2 anos, contado a partir do deferimento de também 2 anos.

Comparando resultados

Vida conjunta

\({}_{t}p_{xy}={}_{t}p_{x}\cdot{}_{t}p_{y}\)   e   \({}_{t|}q_{xy}={}_{t}p_{xy}\cdot{}_{}q_{x+t:y+t}\)

Seguro diferido e temporário

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

Usando Axyzn

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

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])
qxy1 = 1 - (lx[x+t+1+1]/lx[x+t+1]) * (ly[y+t+1+1]/ly[y+t+1])
sum(v^(t+1) * pxyt * qxy1)
## [1] 0.0411289

Seguro diferido e vitalício

\(\sum_{t=m}^{\omega-x-1}v^{t+1}\cdot{}_{t|}q_{xy}\)

Usando Axyzn

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

Calculando diretamente no R

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

Seguro imediato e temporário

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

Usando Axyzn

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

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])
qxy1 = 1 - (lx[x+t+1+1]/lx[x+t+1]) * (ly[y+t+1+1]/ly[y+t+1])
sum(v^(t+1) * pxyt * qxy1)
## [1] 0.908849

Seguro imediato e vitalício

\(\sum_{t=0}^{\omega-x-1}v^{t+1}\cdot{}_{t|}q_{xy}\)

Usando Axyzn

Axyzn(
  grupo,
  c(x,y),
  status = 'joint')
## [1] 0.950739

Calculando diretamente no R

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

Último sobrevivente

\({}_{t}p_{\overline{xy}}={}_{t}p_{x}+{}_{t}p_{y}-{}_{t}p_{xy}\)   e   \({}_{t|}q_{\overline{xy}}={}_tp_xq_{x+t}+{}_tp_yq_{y+t}-{}_tp_{xy}q_{x+t:y+t}\)

Seguro diferido e temporário

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

Usando Axyzn

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

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]
px1 = lx[x+t+1+1]/lx[x+t+1]
py1 = ly[y+t+1+1]/ly[y+t+1]
sum(v^(t+1) * (pxt*(1-px1) + pyt*(1-py1) - pxt*pyt*(1-px1*py1)))
## [1] 0.289768

Seguro diferido e vitalício

\(\sum_{t=m}^{\omega-x-1}v^{t+1}\cdot{}_{t|}q_{\overline{xy}}\)

Usando Axyzn

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

Calculando diretamente no R

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

Seguro imediato e temporário

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

Usando Axyzn

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

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]
px1 = lx[x+t+1+1]/lx[x+t+1]
py1 = ly[y+t+1+1]/ly[y+t+1]
sum(v^(t+1) * (pxt*(1-px1) + pyt*(1-py1) - pxt*pyt*(1-px1*py1)))
## [1] 0.560892

Seguro imediato e vitalício

\(\sum_{t=0}^{\omega-x-1}v^{t+1}\cdot{}_{t|}q_{\overline{xy}}\)

Usando Axyzn

Axyzn(
  grupo,
  c(x,y),
  status = 'last')
## [1] 0.909779

Calculando diretamente no R

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