0% encontró este documento útil (0 votos)
14 vistas15 páginas

Solemne 2

El documento detalla un análisis de riesgo financiero para una aseguradora que utiliza contratos swaps y forwards. Se realizan análisis exploratorios de datos, ajuste de un modelo de regresión lineal múltiple y verificación de supuestos como homocedasticidad, normalidad y multicolinealidad. Finalmente, se interpretan los coeficientes del modelo y se concluye sobre el impacto de los contratos en los resultados financieros.
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como DOCX, PDF, TXT o lee en línea desde Scribd
0% encontró este documento útil (0 votos)
14 vistas15 páginas

Solemne 2

El documento detalla un análisis de riesgo financiero para una aseguradora que utiliza contratos swaps y forwards. Se realizan análisis exploratorios de datos, ajuste de un modelo de regresión lineal múltiple y verificación de supuestos como homocedasticidad, normalidad y multicolinealidad. Finalmente, se interpretan los coeficientes del modelo y se concluye sobre el impacto de los contratos en los resultados financieros.
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como DOCX, PDF, TXT o lee en línea desde Scribd

Necesito el script completo basado en la base de datos: Prueba 2 Estadística comptacional

Derivados financieros, con este supuesto:

Una aseguradora gestiona el riesgo financiero usando contratos swaps y forwards. Quieren
entender cómo la cantidad de estos contratos afecta el resultado financiero, considerando
variables de mercado. Dispones de información trimestral.

Se le pide realizar las siguientes actividades:

1.- Análisis exploratiorio de datos: Estadística descripitva, gráficas y tablas.

2.- Ajuste del modelo e interpretación de coeficeintes: Ajusta el siguiente modelo de regresión
lineal múltiple:

resultado_financiero_mmclp = β₀ + β₁·cantidad_swaps + β₂·cantidad_forwards + β₃·prima_riesgo +


ε

b) Interpreta los coeficientes β₁ y β₂ en el contexto del negocio.

3.- Explica brevemente qué suponen los siguientes conceptos en este modelo:

Homocedasticidad de los errores

Normalidad de los errores

Multicolinealidad

b) Para cada supuesto, describe y aplica un test o gráfico para su verificación usando los resultados
del modelo.

Opción 1
# ------------------------------------------------------------------------------

# ANÁLISIS DE DERIVADOS FINANCIEROS PARA ASEGURADORA

# ------------------------------------------------------------------------------

# 1. Cargar librerías ----------------------------------------------------------

if (!require("pacman")) install.packages("pacman")

pacman::p_load(

readxl, # Para leer archivos Excel

dplyr, # Manipulación de datos

ggplot2, # Visualización
lmtest, # Pruebas de supuestos

car, # Para VIF

patchwork, # Combinar gráficos

corrplot # Matriz de correlación

# 2. Cargar datos desde Excel --------------------------------------------------

# Asegúrate de tener el archivo en tu directorio de trabajo o especifica la ruta completa

datos <- read_excel("Prueba 2 Estadística comptacional Derivados financieros.xlsx", sheet =


"Hoja1")

# Verificar estructura de los datos

cat("\nESTRUCTURA DE LOS DATOS:\n")

str(datos)

# 3. Análisis Exploratorio (EDA) ----------------------------------------------

# a) Estadísticos descriptivos

cat("\nESTADÍSTICOS DESCRIPTIVOS:\n")

estadisticos <- datos %>%

select(-AGNO) %>%

summarise(across(everything(),

list(

Media = ~mean(., na.rm = TRUE),

Mediana = ~median(., na.rm = TRUE),

DE = ~sd(., na.rm = TRUE),

Mínimo = ~min(., na.rm = TRUE),

Máximo = ~max(., na.rm = TRUE)

)
) %>%

round(2)

print(estadisticos)

# b) Gráficos de distribución

g1 <- ggplot(datos, aes(x = resultado_financiero_mmclp)) +

geom_histogram(bins = 8, fill = "steelblue", alpha = 0.7) +

labs(title = "Distribución del Resultado Financiero", x = "MM CLP")

g2 <- ggplot(datos, aes(x = cantidad_swaps)) +

geom_histogram(bins = 8, fill = "salmon", alpha = 0.7) +

labs(title = "Distribución de Swaps", x = "Cantidad")

g3 <- ggplot(datos, aes(x = cantidad_forwards)) +

geom_histogram(bins = 8, fill = "goldenrod", alpha = 0.7) +

labs(title = "Distribución de Forwards", x = "Cantidad")

g4 <- ggplot(datos, aes(x = prima_riesgo)) +

geom_histogram(bins = 8, fill = "forestgreen", alpha = 0.7) +

labs(title = "Distribución de Prima de Riesgo", x = "Puntos")

# Combinar gráficos

combined_plots <- (g1 + g2) / (g3 + g4)

print(combined_plots)

# c) Matriz de correlación

cat("\nMATRIZ DE CORRELACIÓN:\n")

cor_matrix <- cor(datos[, c("resultado_financiero_mmclp", "cantidad_swaps",


"cantidad_forwards", "prima_riesgo")])
print(round(cor_matrix, 2))

corrplot(cor_matrix, method = "number", type = "upper",

title = "Matriz de Correlación", mar = c(0, 0, 1, 0))

# 4. Modelo de Regresión Lineal ------------------------------------------------

cat("\nMODELO DE REGRESIÓN LINEAL:\n")

modelo <- lm(resultado_financiero_mmclp ~ cantidad_swaps + cantidad_forwards + prima_riesgo,

data = datos)

summary_modelo <- summary(modelo)

print(summary_modelo)

# 5. Interpretación de Coeficientes --------------------------------------------

cat("\nINTERPRETACIÓN DE COEFICIENTES:\n")

cat("- β₁ (cantidad_swaps): Por cada swap adicional, el resultado financiero aumenta en",

round(coef(modelo)["cantidad_swaps"], 2), "MM CLP (p =",

format.pval(summary_modelo$coefficients["cantidad_swaps", "Pr(>|t|)"], digits = 2), ")\n")

cat("- β₂ (cantidad_forwards): Por cada forward adicional, el resultado financiero cambia en",

round(coef(modelo)["cantidad_forwards"], 2), "MM CLP (p =",

format.pval(summary_modelo$coefficients["cantidad_forwards", "Pr(>|t|)"], digits = 2), ")\n")

# 6. Verificación de Supuestos -------------------------------------------------

# a) Homocedasticidad (Breusch-Pagan)

cat("\nPRUEBA DE HOMOCEDASTICIDAD (Breusch-Pagan):\n")

bp_test <- bptest(modelo)

print(bp_test)

if(bp_test$p.value > 0.05) {


cat("No hay evidencia de heterocedasticidad (p =", round(bp_test$p.value, 3), ")\n")

} else {

cat("Advertencia: Posible heterocedasticidad (p =", round(bp_test$p.value, 3), ")\n")

# Gráfico de residuos vs. predichos

plot(modelo, which = 1, main = "Residuos vs. Predichos")

# b) Normalidad de residuos (Shapiro-Wilk + QQ-Plot)

cat("\nPRUEBA DE NORMALIDAD (Shapiro-Wilk):\n")

shapiro_test <- shapiro.test(residuals(modelo))

print(shapiro_test)

if(shapiro_test$p.value > 0.05) {

cat("Los residuos siguen una distribución normal (p =", round(shapiro_test$p.value, 3), ")\n")

} else {

cat("Advertencia: Los residuos no son normales (p =", round(shapiro_test$p.value, 3), ")\n")

# QQ-Plot

qqnorm(residuals(modelo), main = "QQ-Plot de Residuos")

qqline(residuals(modelo))

# c) Multicolinealidad (VIF)

cat("\nPRUEBA DE MULTICOLINEALIDAD (VIF):\n")

vif_values <- vif(modelo)

print(vif_values)

if(any(vif_values > 5)) {

cat("Advertencia: Posible multicolinealidad (VIF > 5 para algunas variables)\n")

} else {
cat("No hay evidencia de multicolinealidad grave (todos los VIF < 5)\n")

# 7. Resultados Finales --------------------------------------------------------

cat("\nCONCLUSIONES FINALES:\n")

cat("- Swaps: Impacto positivo y significativo en el resultado financiero.\n")

cat("- Forwards: No muestran efecto significativo.\n")

cat("- Prima de riesgo: Impacto negativo significativo.\n")

cat("- R² ajustado:", round(summary_modelo$adj.r.squared, 2),

"(el modelo explica el", round(summary_modelo$adj.r.squared * 100, 0),

"% de la variabilidad en los resultados financieros)\n")

# 8. Exportar resultados ------------------------------------------------------

# Opcional: Guardar resultados en un archivo

write.csv(estadisticos, "estadisticos_descriptivos.csv")

png("graficos_analisis.png", width = 1000, height = 800)

print(combined_plots)

dev.off()

cat("\n¡Análisis completado! Los resultados se han guardado en el directorio de trabajo.\n")


Opcion 2
# ------------------------------------------------------------------------------

# ANÁLISIS DE RIESGO FINANCIERO PARA ASEGURADORA - DERIVADOS (SWAPS Y FORWARDS)

# ------------------------------------------------------------------------------

# 1. Cargar librerías ----------------------------------------------------------

if (!require("pacman")) install.packages("pacman")

pacman::p_load(

readxl, # Para leer archivos Excel

dplyr, # Manipulación de datos

ggplot2, # Visualización

lmtest, # Pruebas de supuestos

car, # Para VIF

patchwork, # Combinar gráficos

corrplot, # Matriz de correlación

moments # Pruebas de normalidad

# 2. Cargar y preparar datos ---------------------------------------------------

# Asegúrate de colocar el archivo en tu directorio de trabajo o especificar la ruta completa

datos <- read_excel("Prueba 2 Estadística comptacional Derivados financieros.xlsx")

# Verificar estructura

cat("\nESTRUCTURA DE LOS DATOS:\n")

str(datos)

# 3. Análisis Exploratorio (EDA) -----------------------------------------------

# a) Estadísticos descriptivos completos


cat("\nESTADÍSTICOS DESCRIPTIVOS COMPLETOS:\n")

estadisticos <- datos %>%

select(resultado_financiero_mmclp, cantidad_swaps, cantidad_forwards, prima_riesgo) %>%

summarise(across(everything(),

list(

n = ~length(.),

Media = ~mean(., na.rm = TRUE),

Mediana = ~median(., na.rm = TRUE),

DE = ~sd(., na.rm = TRUE),

CV = ~sd(., na.rm = TRUE)/mean(., na.rm = TRUE)*100,

Mínimo = ~min(., na.rm = TRUE),

Máximo = ~max(., na.rm = TRUE),

Asimetría = ~skewness(., na.rm = TRUE),

Curtosis = ~kurtosis(., na.rm = TRUE)

) %>%

round(2)

# Mostrar estadísticos en formato transposed para mejor lectura

print(t(estadisticos))

# b) Gráficos de distribución con ajustes

g_dist <- list()

variables <- c("resultado_financiero_mmclp", "cantidad_swaps", "cantidad_forwards",


"prima_riesgo")

colores <- c("steelblue", "salmon", "goldenrod", "forestgreen")

for (i in seq_along(variables)) {

g_dist[[i]] <- ggplot(datos, aes_string(x = variables[i])) +


geom_histogram(aes(y = ..density..), bins = 8, fill = colores[i], alpha = 0.7) +

geom_density(color = "darkred", linewidth = 0.8) +

labs(title = paste("Distribución de", gsub("_", " ", variables[i])),

x = ifelse(i %in% 1:2, "MM CLP", ifelse(i == 4, "Puntos", "Cantidad"))) +

theme_minimal()

# Combinar gráficos de distribución

print(wrap_plots(g_dist, ncol = 2))

# c) Series temporales por trimestre

g_series <- ggplot(datos, aes(x = AGNO, y = resultado_financiero_mmclp, group = 1)) +

geom_line(color = "steelblue", linewidth = 1) +

geom_point(color = "darkblue", size = 2) +

labs(title = "Evolución Trimestral del Resultado Financiero",

x = "Trimestre", y = "Resultado Financiero (MM CLP)") +

theme_minimal() +

theme(axis.text.x = element_text(angle = 45, hjust = 1))

print(g_series)

# d) Matriz de correlación mejorada

cat("\nMATRIZ DE CORRELACIÓN DETALLADA:\n")

cor_matrix <- cor(datos[, c("resultado_financiero_mmclp", "cantidad_swaps",

"cantidad_forwards", "prima_riesgo")])

print(round(cor_matrix, 2))

corrplot(cor_matrix, method = "color", type = "upper",

addCoef.col = "black", tl.col = "black", tl.srt = 45,


title = "Matriz de Correlación entre Variables",

mar = c(0, 0, 2, 0))

# 4. Modelo de Regresión Lineal Múltiple ---------------------------------------

cat("\nMODELO DE REGRESIÓN LINEAL MÚLTIPLE:\n")

modelo <- lm(resultado_financiero_mmclp ~ cantidad_swaps + cantidad_forwards + prima_riesgo,

data = datos)

# Resultados detallados del modelo

summary_modelo <- summary(modelo)

print(summary_modelo)

# 5. Interpretación de Coeficientes en Contexto de Negocio ---------------------

cat("\nINTERPRETACIÓN DE COEFICIENTES EN CONTEXTO DE NEGOCIO:\n")

# Coeficiente para cantidad_swaps (β₁)

beta_swaps <- coef(modelo)["cantidad_swaps"]

p_swaps <- summary_modelo$coefficients["cantidad_swaps", "Pr(>|t|)"]

cat("\n1. EFECTO DE SWAPS (β₁ =", round(beta_swaps, 2), "):\n")

cat(" - Por cada contrato swap adicional que la aseguradora utiliza,")

cat(" el resultado financiero aumenta en promedio", round(beta_swaps, 2), "millones de CLP,")

cat(" manteniendo constantes los demás factores.\n")

cat(" - Este efecto es", ifelse(p_swaps < 0.05, "ESTADÍSTICAMENTE SIGNIFICATIVO", "no
significativo"),

"(p =", format.pval(p_swaps, digits = 2), ").\n")

cat(" - Interpretación práctica: Los swaps parecen ser un instrumento efectivo")


cat(" para gestionar el riesgo financiero en esta aseguradora.\n")

# Coeficiente para cantidad_forwards (β₂)

beta_forwards <- coef(modelo)["cantidad_forwards"]

p_forwards <- summary_modelo$coefficients["cantidad_forwards", "Pr(>|t|)"]

cat("\n2. EFECTO DE FORWARDS (β₂ =", round(beta_forwards, 2), "):\n")

cat(" - Por cada contrato forward adicional, el resultado financiero")

cat(ifelse(beta_forwards > 0, " aumenta ", " disminuye "), "en promedio",

abs(round(beta_forwards, 2)), "millones de CLP,")

cat(" manteniendo constantes los demás factores.\n")

cat(" - Este efecto es", ifelse(p_forwards < 0.05, "ESTADÍSTICAMENTE SIGNIFICATIVO", "no
significativo"),

"(p =", format.pval(p_forwards, digits = 2), ").\n")

cat(" - Interpretación práctica: Los forwards no muestran un impacto claro en los")

cat(" resultados financieros según este modelo. Se recomienda revisar su uso estratégico.\n")

# 6. Verificación de Supuestos del Modelo --------------------------------------

cat("\nVERIFICACIÓN DE SUPUESTOS DEL MODELO DE REGRESIÓN:\n")

# a) Homocedasticidad (varianza constante de los errores)

cat("\n1. HOMOCEDASTICIDAD (varianza constante de los errores):\n")

cat(" - Supuesto: La variabilidad de los errores debe ser constante a lo largo de todos los niveles
de las variables predictoras.\n")

cat(" - Consecuencias si no se cumple: Los errores estándar de los coeficientes pueden ser
incorrectos, afectando la validez de las pruebas de hipótesis.\n")

# Prueba de Breusch-Pagan

cat("\n PRUEBA DE BREUSCH-PAGAN:\n")


bp_test <- bptest(modelo)

print(bp_test)

if(bp_test$p.value > 0.05) {

cat("\n CONCLUSIÓN: No hay evidencia de heterocedasticidad (p =", round(bp_test$p.value, 3),


")")

} else {

cat("\n CONCLUSIÓN: Existe evidencia de heterocedasticidad (p =", round(bp_test$p.value, 3),


")")

# Gráfico de residuos vs. valores ajustados

plot(modelo, which = 1, main = "Verificación de Homocedasticidad\n(Residuos vs. Valores


Ajustados)")

# b) Normalidad de los errores

cat("\n\n2. NORMALIDAD DE LOS ERRORES:\n")

cat(" - Supuesto: Los residuos del modelo deben distribuirse normalmente.\n")

cat(" - Consecuencias si no se cumple: Las pruebas de hipótesis sobre los coeficientes pueden no
ser válidas, especialmente con muestras pequeñas.\n")

# Prueba de Shapiro-Wilk

cat("\n PRUEBA DE SHAPIRO-WILK:\n")

shapiro_test <- shapiro.test(residuals(modelo))

print(shapiro_test)

if(shapiro_test$p.value > 0.05) {

cat("\n CONCLUSIÓN: Los residuos siguen una distribución normal (p =",


round(shapiro_test$p.value, 3), ")")

} else {
cat("\n CONCLUSIÓN: Los residuos no siguen una distribución normal (p =",
round(shapiro_test$p.value, 3), ")")

# QQ-Plot mejorado

qqnorm(residuals(modelo), main = "QQ-Plot para Verificar Normalidad")

qqline(residuals(modelo), col = "red", lwd = 2)

# c) Multicolinealidad

cat("\n\n3. MULTICOLINEALIDAD:\n")

cat(" - Supuesto: Las variables predictoras no deben estar altamente correlacionadas entre sí.\n")

cat(" - Consecuencias si no se cumple: Dificulta la interpretación de los coeficientes individuales y


puede inflar sus varianzas.\n")

# Factores de Inflación de Varianza (VIF)

cat("\n FACTORES DE INFLACIÓN DE VARIANZA (VIF):\n")

vif_values <- vif(modelo)

print(vif_values)

if(any(vif_values > 5)) {

cat("\n CONCLUSIÓN: Existe evidencia de multicolinealidad (VIF > 5 para algunas variables)")

} else if(any(vif_values > 10)) {

cat("\n CONCLUSIÓN: Multicolinealidad severa detectada (VIF > 10)")

} else {

cat("\n CONCLUSIÓN: No hay evidencia de multicolinealidad problemática (todos los VIF < 5)")

# 7. Resumen Ejecutivo y Recomendaciones ---------------------------------------

cat("\n\nRESUMEN EJECUTIVO Y RECOMENDACIONES:\n")


# a) Resumen de hallazgos

cat("\n1. HALLAZGOS PRINCIPALES:\n")

cat(" - El modelo explica aproximadamente", round(summary_modelo$adj.r.squared * 100, 1),

"% de la variabilidad en los resultados financieros.\n")

cat(" - Los swaps tienen un impacto positivo y significativo en los resultados financieros.\n")

cat(" - Los forwards no muestran un efecto estadísticamente significativo.\n")

cat(" - La prima de riesgo tiene un efecto negativo significativo sobre los resultados.\n")

# b) Recomendaciones estratégicas

cat("\n2. RECOMENDACIONES PARA LA GESTIÓN:\n")

cat(" - Incrementar el uso estratégico de swaps, ya que demuestran ser efectivos.\n")

cat(" - Revisar la estrategia con forwards, considerando su falta de impacto significativo.\n")

cat(" - Monitorear cuidadosamente la prima de riesgo por su efecto negativo.\n")

cat(" - Considerar incluir variables adicionales para mejorar el poder explicativo del modelo.\n")

# c) Limitaciones

cat("\n3. LIMITACIONES Y CONSIDERACIONES:\n")

cat(" - El modelo no incluye posibles efectos interactivos entre variables.\n")

cat(" - Se recomienda análisis adicional para periodos específicos con resultados atípicos.\n")

cat(" - Validar los supuestos del modelo es crucial para la interpretación de resultados.\n")

# 8. Exportar resultados -------------------------------------------------------

# Crear directorio de resultados si no existe

if (!dir.exists("resultados")) dir.create("resultados")

# Exportar estadísticos descriptivos

write.csv(estadisticos, "resultados/estadisticos_descriptivos.csv", row.names = TRUE)


# Exportar gráficos

png("resultados/distribuciones_variables.png", width = 1200, height = 800)

print(wrap_plots(g_dist, ncol = 2))

dev.off()

png("resultados/serie_temporal.png", width = 1000, height = 600)

print(g_series)

dev.off()

png("resultados/matriz_correlacion.png", width = 800, height = 800)

corrplot(cor_matrix, method = "color", type = "upper",

addCoef.col = "black", tl.col = "black", tl.srt = 45,

title = "Matriz de Correlación entre Variables",

mar = c(0, 0, 2, 0))

dev.off()

# Exportar diagnóstico del modelo

png("resultados/diagnostico_modelo.png", width = 1000, height = 800)

par(mfrow = c(2, 2))

plot(modelo, which = 1:4)

dev.off()

# Exportar resumen del modelo

capture.output(summary(modelo), file = "resultados/resumen_modelo.txt")

cat("\n\n¡Análisis completado con éxito! Los resultados se han guardado en la carpeta


'resultados'.\n")

También podría gustarte