1 Cópulas

El siguiente documento proporciona una guía básica para hacer el ajuste de cópulas parámetricas utilizando datos de cancelación en seguros.

1.1 Marco Teórico

Para \(d \geq 2\) llameramos -cópula, a la función de distribución multivariada del vector \(( U_1,...,U_d)\) \[ C: [0,1]^d \longrightarrow [0,1] \] La cual denotaremos como: \[ C(\mathbf{u}) = C(u_1,...,u_d)\]

y tiene las siguienes caracteristicas:

  • \(C(u_1,...,u_d)\) es creciente en cada componente \(u_\textit{i}\).
  • \(C(1,...,1,u_\textit{i},1,...,1)= u_\textit{i} ~~~ \forall \textit{i} \in \{1,2,...,\textit{d}\}\), \(u_i \in [0,1]\)
  • \(\forall~ (a_1,...,a_d),(b_1,...,b_d)~\in [0,1]^d\) con \(\ a_\textit{i} \leq b_\textit{i}\) se tiene que:
    \[ \sum_{i_1=1}^2 ... \sum_{i_d=1}^2 (-1)^{i_1 +...+i_d}~~ C(u_{1i_d},...,u_{di_d})\, \geq \,0\]

donde \(u_{j1} = a_j \,\) y \(\, u_{j2} = b_j \,\, \forall \, j \in \{1,2,...d\}\)

Teorema de Sklar

Sea \(F(r_1,..., r_d)\), con funciones de distribución marginales \(F_{1}(r_1),..., F_d (r_d).\) Podemos garantizar que existe una función \(C\) tal que:

\[F(r_1,...,r_d) = \, C(F_1(r_1),..., F_d(r_d))\,\,\,\,\, \forall r \in \mathbb{R}^d\] Importante

Podemos concluir que el teorema de Sklar, se puede intepretar como la descomposición de la función de distribución multivariada en dos componentes: la estructura de dependencia y el comportamiento univariado. La primer componente corresponde a la cópula, mientras que la segunda esta asociada a las distribuciones marginales.

Implicaciones del teorema de Sklar

  • \(C(u_1,...,u_2) = F(F_1^\leftarrow(u_1),F_2^\leftarrow(u_2),...,F_d^\leftarrow(u_d))\)\

donde: \(F_i^\leftarrow\) denota a la función inversa generalizada

  • Meta distribuciones

Si conocemos la cópula \(C\) de un vector aleatorios \(d\)-dimesional y sus marginales \(F_1,...,F_d\), entonces:

\[F(r_1,r_2,...,r_d) = C(F_1(r_1),F_2(r_2),...,F_d(r_d))\]

1.2 Ejemplo Práctico

Es intuitivo asumir que existe una relación entre la antigüedad de una póliza y la probabilidad de cancelación. Ya que entre más antigüedad se asume que la probabilidad de cancelación puede ir disminuyendo.

Considerando los datos de una aseguradora tenemos lo siguiente:

    plot(lapse_orig, main = "Tasas brutas de cancelacion")

PREGUNTA 1 ¿Observas alguna relación entre los datos?

En el caso de la modelación los ceros en una variable pueden causar problemas, por ello los omitiremos

#   Los quito
  lapse_sincero <- lapse_orig[lapse_orig$Lapse > 0, ]
  
# Grafico  
    plot(lapse_sincero, main = "Tasas brutas de cancelacion")

Antes de comenzar a tratar de modelar la dependencia de las variables, vía una cópula, es importante validar si es que hay independencia entre los datos

1.2.1 Prueba de independencia

Se usan las funciones:

Paso 1: indepTestSim(n, p, m = p, N = 1000, verbose = TRUE) donde:

  • n = tamaño de muestra
  • p = dimensión del vector aleatorio
  • N = número de simulaciones del estadístico de prueba (1000 por default)
  • verbose = va reportando el avance de las simulaciones vía txtProgressBar

Paso 2: indepTest(x, d, alpha=0.05)

donde:

  • x = matriz de observaciones del vector aleatorio, una variable por cada columna
  • d = vector del paso 1 *alpha = nivel de la prueba (0.05 por default)

PREGUNTA 2 ¿Cúal es el estadístico de prueba de la función indepTestSim?

library("copula")

step1 <- indepTestSim(n_obs, p = 2, N = 1000)
step2 <- indepTest(lapse_sincero, step1, alpha = 0.05)

step2$global.statistic.pvalue
## [1] 0.0004995005

Debido a que el \(p-value < 0.05\) => Se rechaza el supuesto de independencia, ie, hay dependencia por modelar.

1.2.2 Bondad de Ajuste

Una vez que ya sabemos que podemos modelar, tenemos que tratar de modelar la cópula, ahora recordemos que la cópula debe contar con marginales \(( U_1,U_2) \sim (0,1)\). Y tanto como la anguigüedad y la tasa de cancelación no tienen valores entre 0 y 1.

PREGUNTA 3 Investigue que es la función de distribución empirica.

Hago la trasnformación necesaria:

uv <- pobs(lapse_sincero)

# Veamos el grafico de dispersion de nuestras Pseudo observaciones
plot(uv, xlim = c(0,1), ylim = c(0,1))
# Trazo una l?nea
a <- seq(0, 1, length = 1000)
lines(a, 1 - a,lwd = 2, col = "red")

Ahora que ya tengo los valores voy a tratar de ajustar alguna de las cópulas parámetricas que existen.

Principales familias modeladas en la libreria “copula” de R

  • c1 - clayton
  • c2 - frank
  • c3 - amh
  • c4 - gumbel
  • c5 - joe
  • c6 - normal
  • c7 - t-student

PREGUNTA 4 Investigue a que clase de cópulas pertecene cada una de las 7 opciones presentadas arriba. Ejemplo: Cópula Frank pertenece a la clase de cópulas Arquimedianas

1er intento: Cópula Gumbel

prueba.c4 <- gofCopula(gumbelCopula(), uv)
prueba.c4   
## 
##  Parametric bootstrap-based goodness-of-fit test of Gumbel copula, dim.
##  d = 2, with 'method'="Sn", 'estim.method'="mpl":
## 
## data:  x
## statistic = 0.093488, parameter = 1, p-value = 0.0004995

Debido a que el \(p-value < 0.05\) se puede decir que la cópula gumbel no ajusta a nuestros datos.

2do intento: Cópula Gausiana

    prueba.c6 <- gofCopula(normalCopula(), uv)
    prueba.c6  
## 
##  Parametric bootstrap-based goodness-of-fit test of Normal copula, dim.
##  d = 2, with 'method'="Sn", 'estim.method'="mpl":
## 
## data:  x
## statistic = 0.056857, parameter = -0.85646, p-value = 0.3352

Debido a que el \(p-value > 0.05\) se puede decir que la cópula normal ajusta bien a nuestros datos.

Algo que también se hace es ajustar sobre una transformación de los datos. Es decir decir en lugar de decir que las marginales de la cópula son del tipo \(( U_1,U_2) \sim (0,1)\) se asume o modela sobre el vector \(( 1- U_1,1-U_2) \sim (0,1)\)

PREGUNTA 5: Demuestre que si \(U_1 \sim (0,1)\) entonces \(1-U_1 \sim (0,1)\)

Tranformamos los datos:

tuv <- uv
 tuv[, 1] <- 1 - uv[, 1]      
 plot(tuv)

3er intento: Cópulas Joe

prueba.c5 <- gofCopula(joeCopula(), tuv)
prueba.c5  
## 
##  Parametric bootstrap-based goodness-of-fit test of Joe copula, dim. d
##  = 2, with 'method'="Sn", 'estim.method'="mpl":
## 
## data:  x
## statistic = 0.02635, parameter = 4.919, p-value = 0.9016

Para mas detalles puede consultar copulas link