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 objetosCá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 anosCá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íodosCom 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 calculadoEm 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 anosComparando 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.0506188Calculando 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.0506188Anuidade 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.0514823Calculando 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.0514823Anuidade 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.22932Calculando 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.22932Anuidade 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.2808Calculando 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.536271Calculando 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.536271Anuidade 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.628899Calculando 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.628839Anuidade 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.71672Calculando 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.71672Anuidade 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.34562Calculando 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