A matemática atuarial é um campo interdisciplinar que
combina conceitos de matemática, probabilidade e estatística para
analisar e gerenciar riscos financeiros. Ela é aplicada em diversas
áreas, como seguros, previdência, investimentos e finanças corporativas,
ajudando a avaliar a probabilidade de eventos futuros e seus impactos
financeiros. Os atuários utilizam modelos matemáticos para prever a
probabilidade de eventos como morte, invalidez ou morbidez, e calcular o
valor esperado de pagamentos ou recebimentos futuros. A precisão desses
cálculos pode ter um grande impacto nos resultados financeiros das
empresas e indivíduos envolvidos.
O presente trabalho
visa explorar as principais técnicas e conceitos da matemática atuarial,
com foco nos cálculos de seguros e anuidades em suas formas discretas e
contínuas. Serão utilizados tanto o pacote lifecontingencies para o
software R quanto fórmulas manuais para realizar os cálculos
necessários. O relatório apresenta uma análise detalhada das principais
fórmulas e conceitos utilizados na matemática atuarial, com exemplos
práticos que ilustram sua aplicação.
É importante
enfatizar que ass tábuas de mortalidades são ferramentas essenciais no
campo dos seguros, pois fornece informações valiosas sobre a
probabilidade de morte em diferentes idades. Ela é uma tabela
estatística que descreve a taxa de mortalidade em uma determinada
população, levando em consideração fatores como idade, sexo e outros
atributos relevantes. O gráfico abaixo mostra o comportamento que as
diferentes tábuas de mortalidade podem apresentar:
Ao calcular os prêmios e benefícios dos seguros, as
seguradoras utilizam a tábua de mortalidade como base para estimar as
probabilidades de ocorrência de eventos, e no presente relatório não foi
diferente, para os cálculos dos seguros e anuidades utilizei como ponto
de partida a probabilidade de morte (qx) da tábua
BR.EMSsb.v.2015.m que pode ser encontrada no Banco de tábuas do
IBA.
Limpando o console:
rm(list = ls())
Retirando a notação ciêntífica:
options(scipen = 9999)
options(max.print = 100000)
Carreganto os pacotes necessários:
if (!require("lifecontingencies")) {
install.packages("lifecontingencies")
library("lifecontingencies")
}
Base de dados:
setwd("C:/Users/55819/Desktop/RMarkdown - Relatorio")
dados <- read.table("tabua.txt", header = TRUE)
dados_tabuas = read.delim('banco_de_tabuas.txt',dec = ',', header = T)
Visualização da base de dados:
# Construção da tábua de vida
tv <- probs2lifetable(dados$qx, type = "qx", radix = 10000, name = "Tábua de vida BR-EMS-mt 2015 feminina")
# Construção da tábua de comutação
tc <- new("actuarialtable", x = tv@x, lx = tv@lx, name = "Tábua de comutação BR-EMS-mt 2015 feminina", interest = 0.04)
# Cálculo de seguros
l <- tv@lx
Formulação geral: \[ \boxed{A = \sum {v^{t+1} \cdot _{t\scriptsize{|}}q_x}} \\ _{t\scriptsize{|}}q_x = \frac{l_{x+t}-l_{x+t+1}}{l_x} \\ v^{t+1} \rightarrow \text{é utilizado por conta que normalmente a indenização é paga não no momento da morte (t) e sim em t+1} \] Dados exercícios seguros individuais e discretos:
x = 107
w = 118
n = 2
m = 2
i = 0.05
v <- 1 / (1 + i)
Manual 📝:
tpx <- l[x + n + 1] / l[x + 1]
nEx <- (v^n) * (tpx)
nEx
## [1] 0.2573713
Pacote 💻:
Exn(tc, x=x, n=n, i=i) # OK
## [1] 0.2573713
Manual:
t <- 0:(w - x)
t.qx <- (l[x + t + 1] - l[x + t + 1 + 1]) / l[x + 1]
t.qx <- c(t.qx[!is.na(t.qx)], rep(0, 1))
Ax <- sum((v^(t + 1)) * t.qx)
Ax
## [1] 0.9060899
Pacote:
Axn(tc, x=x, i=i) # OK
## [1] 0.90609
Manual:
t <- m:(w-x-1)
t.qx <- (l[x + t + 1] - l[x + t + 1 + 1]) / l[x + 1]
t.qx <- c(t.qx[!is.na(t.qx)])
total = 0
for (aux in m:(w-x-1)) {
parcela <- v^(aux+1)*t.qx[aux-m+1]
print(paste0("O valor da ", aux, "ª parcela é: ", parcela))
total = total + parcela
}
## [1] "O valor da 2ª parcela é: 0.128611952483387"
## [1] "O valor da 3ª parcela é: 0.062951792814492"
## [1] "O valor da 4ª parcela é: 0.0280474830087585"
## [1] "O valor da 5ª parcela é: 0.0111638954201148"
## [1] "O valor da 6ª parcela é: 0.00387018559753873"
## [1] "O valor da 7ª parcela é: 0.00112671893766834"
## [1] "O valor da 8ª parcela é: 0.000260351220929722"
## [1] "O valor da 9ª parcela é: 0.0000432520482294242"
## [1] "O valor da 10ª parcela é: 0.00000414826716066645"
print(paste0("O valor total é: ", total))
## [1] "O valor total é: 0.236079779798279"
mAx <- sum((v^(t + 1)) * t.qx)
mAx
## [1] 0.2360798
Pacote:
Axn(tc, x=x, i=i, m=m) # OK
## [1] 0.2360799
Manual:
t <- 0:(n-1)
t.qx <- (l[x + t + 1] - l[x + t + 1 + 1]) / l[x + 1]
Axn <- sum((v^(t + 1)) * t.qx)
Axn
## [1] 0.6700101
Pacote:
Axn(tc, x=x, i=i, n=n) # OK
## [1] 0.6700101
Manual:
t <- m:(n+m-1)
t.qx <- (l[x + t + 1] - l[x + t + 1 + 1]) / l[x + 1]
Axn <- sum((v^(t + 1)) * t.qx)
Axn
## [1] 0.1915637
Pacote:
Axn(tc, x=x, i=i, n=n, m=m) # OK
## [1] 0.1915637
Manual:
t <- 0:(n-1)
t.qx <- (l[x + t + 1] - l[x + t + 1 + 1]) / l[x + 1]
AxnMISTO <- sum((v^(t + 1)) * t.qx)
tpx <- l[x + n + 1] / l[x + 1]
nEx <- (v^n) * (tpx)
AxnMISTO+nEx
## [1] 0.9273815
Pacote:
AExn(tc, x=x, i=i, n=n) #OK
## [1] 0.9273815
Manual
t <- m:(n+m-1)
t.qx <- (l[x + t + 1] - l[x + t + 1 + 1]) / l[x + 1]
AxnMISTO <- sum((v^(t + 1)) * t.qx)
tpx <- l[x + n + 1] / l[x + 1]
nEx <- (v^n) * (tpx)
AxnMISTO+nEx
## [1] 0.4489351
Pacote:
# Não há como checar, essa anuidade é apenas para fins didáticos
Formulação geral: \[ \bar{A} = \int{v^t \cdot _{t\scriptsize{|}}q_x \ \ \ dt} \] \[ v^t \rightarrow \ e^{-\delta t}\\ _{t\scriptsize{|}}q_x \rightarrow \ _tp_x \cdot \mu_{x+t}\] \[ \boxed {\bar{A} = \int{e^{-\delta t}\cdot _tp_x \cdot \mu_{x+t} \ \ \ dt}} \] Dados utilizados para o cálculo dos seguros individuais e contínuos:
IS = "?"
x = 30
n = 20
m = 10
i = 0.05
v <- 1 / (1 + i)
delta = log(1+i)
tpx <- l[x + n + 1] / l[x + 1]
nEx <- (v^n) * (tpx)
nEx
## [1] 0.3678396
t <- 0:(w - x)
tpx <- function(t) l[x + t + 1] / l[x + 1]
uxt <- function(t) (l[x + t - 1 + 1] - l[x + t + 1 + 1]) / (2 * l[x + t + 1])
ft <- function(t) exp(-d * t) * tpx(t) * uxt(t)
integrate(ft, min(t), max(t), subdivisions = 1000)$value
## [1] 0.1436236
t <- m:(w - x - 1)
tpx <- function(t) l[x + t + 1] / l[x + 1]
uxt <- function(t) (l[x + t - 1 + 1] - l[x + t + 1 + 1]) / (2 * l[x + t + 1])
ft <- function(t) exp(-d * t) * tpx(t) * uxt(t)
integrate(ft, min(t), max(t), subdivisions = 1000)$value
## [1] 0.1367496
t <- 0:(n - 1)
tpx <- function(t) l[x + t + 1] / l[x + 1]
uxt <- function(t) (l[x + t - 1 + 1] - l[x + t + 1 + 1]) / (2 * l[x + t + 1])
ft <- function(t) exp(-d * t) * tpx(t) * uxt(t)
integrate(ft, min(t), max(t), subdivisions = 1000)$value
## [1] 0.01404499
t <- m:(n+m-1)
tpx <- function(t) l[x + t + 1] / l[x + 1]
uxt <- function(t) (l[x + t - 1 + 1] - l[x + t + 1 + 1]) / (2 * l[x + t + 1])
ft <- function(t) exp(-d * t) * tpx(t) * uxt(t)
integrate(ft, min(t), max(t), subdivisions = 1000)$value
## [1] 0.01941989
t <- 0:(n-1)
tpx <- function(t) l[x + t + 1] / l[x + 1]
uxt <- function(t) (l[x + t - 1 + 1] - l[x + t + 1 + 1]) / (2 * l[x + t + 1])
ft <- function(t) exp(-d * t) * tpx(t) * uxt(t)
A1xn <- integrate(ft, min(t), max(t), subdivisions = 1000)$value
tpx <- l[x + n + 1] / l[x + 1]
nEx <- (v^n) * (tpx)
A1xn+nEx
## [1] 0.3818846
t <- m:(n+m-1)
tpx <- function(t) l[x + t + 1] / l[x + 1]
uxt <- function(t) (l[x + t - 1 + 1] - l[x + t + 1 + 1]) / (2 * l[x + t + 1])
ft <- function(t) exp(-d * t) * tpx(t) * uxt(t)
mA1xn <- integrate(ft, min(t), max(t), subdivisions = 1000)$value
tpx <- l[x + n + m + 1] / l[x + 1]
mnEx <- (v^(n+m)) * (tpx)
mA1xn+mnEx
## [1] 0.2367414
i <- 0.04
v <- 1 / (1 + i)
x <- 40 # Relembrando os valores
m <- 30
n <- 20
t <- 0:(w - x)
t.px <- l[x + t + 1] / l[x + 1]
axna <- sum(v^t * t.px)
axna
## [1] 20.70628
axn(tc, x = x)
## [1] 20.70628
Manual
t <- 1:(w - x)
t.px <- l[x + t + 1] / l[x + 1]
axnb <- sum(v^t * t.px)
axnb
## [1] 19.70628
Pacote
axn(tc, x = x, payment = "arrears")
## [1] 19.70628
Manual
t <- m:(w - x)
t.px <- l[x + t + 1] / l[x + 1]
axnc <- sum(v^t * t.px)
axnc
## [1] 3.248938
Pacote
axn(tc, x = x, m = m)
## [1] 3.248938
Manual
t <- (m + 1):(w - x)
t.px <- l[x + t + 1] / l[x + 1]
axnd <- sum(v^t * t.px)
axnd
## [1] 2.983107
Pacote
axn(tc, x = x, m = m, payment = "arrears")
## [1] 2.983107
Manual
t <- 0:(n - 1)
t.px <- l[x + t + 1] / l[x + 1]
axne <- sum(v^t * t.px)
axne
## [1] 13.92536
Pacote
axn(tc, x = x, n = n)
## [1] 13.92536
Manual
t <- 1:(n)
t.px <- l[x + t + 1] / l[x + 1]
axne <- sum(v^t * t.px)
axne
## [1] 13.35773
Pacote
axn(tc, x = x, n = n, payment = "arrears")
## [1] 13.35773
Manual
t <- m:(m + n - 1)
t.px <- l[x + t + 1] / l[x + 1]
axne <- sum(v^t * t.px)
axne
## [1] 3.004472
Pacote
axn(tc, x = x, m = m, n = n)
## [1] 3.004472
Manual
t <- (m + 1):(m + n - 1)
t.px <- l[x + t + 1] / l[x + 1]
axnh <- sum(v^t * t.px)
axnh
## [1] 2.738641
Pacote
axn(tc, x = x, m = m, n = n, payment = "arrears")
## [1] 2.785162
IS <- 1
i <- 0.04
v <- 1 / (1 + i)
x <- 30 # Relembrando os valores
m <- 20
n <- 20
d <- 0.06
u <- 0.04
w <- 100
t <- 0:(w - x)
tpx <- function(t) exp(-u*t)
ft <- function(t) IS*exp(-d * t) * tpx(t)
integrate(ft, min(t), max(t), subdivisions = 1000)$value
## [1] 9.990881
t <- 0:(n)
tpx <- function(t) exp(-u*t)
ft <- function(t) IS*exp(-d * t) * tpx(t)
integrate(ft, min(t), max(t), subdivisions = 1000)$value
## [1] 8.646647
t <- m:(w-x)
tpx <- function(t) exp(-u*t)
ft <- function(t) IS*exp(-d * t) * tpx(t)
integrate(ft, min(t), max(t), subdivisions = 1000)$value
## [1] 1.344234
t <- m:(m+n)
tpx <- function(t) exp(-u*t)
ft <- function(t) IS*exp(-d * t) * tpx(t)
integrate(ft, min(t), max(t), subdivisions = 1000)$value
## [1] 1.170196
# Dados das fórmulas
formulas <- c("$fórmula_1$", "$fórmula_2$", "$fórmula_3$", "$fórmula_4$")
# Criar o quadro
quadro <- matrix(formulas, nrow = 2, ncol = 2, byrow = TRUE)
# Personalizar o estilo do quadro
estilo <- kable(quadro, format = "html", table.attr = 'style="border-collapse:collapse;"') %>%
kable_styling(c("striped", "bordered"), full_width = TRUE) %>%
add_header_above(c("Vida conjunta" = 1, "Último sobrevivente" = 1))
# Exibir o quadro
estilo
| \(fórmula_1\) | \(fórmula_2\) |
| \(fórmula_3\) | \(fórmula_4\) |
Formulação geral (para seguros que cobrem exclusivamente a morte) - VIDA CONJUNTA: \[\boxed{A = \sum_{t=?}^?{v^{t+1}\cdot (\frac{l_{x+t}- l_{y+t}}{l_{xy}})}}\] Lembrar que para dotal misto, é necessário adicionar a probabilidade de sobrevivência na fórmula
Manual 📝:
Pacote 💻:
Manual 📝:
Pacote 💻:
Manual 📝:
Pacote 💻:
Manual 📝:
Pacote 💻:
Manual 📝:
Pacote 💻:
Manual 📝:
Pacote 💻:
Manual 📝:
Pacote 💻:
Manual 📝:
Pacote 💻:
Manual 📝:
Pacote 💻:
\(a_{x|y}\rightarrow \text{caso x faleça, a renda é revertida para y}\) morte de x -> inicio da reversão morte de y -> fim da reversão ## 7.0 Dados utilizados: