Este informe presenta el analisis descriptivo de dos variables cualitativas (estado del mercado y dia de la semana) y dos variables cuantitativas (variacion diaria del oro y nivel del VIX), a partir de la base de datos construida sobre el oro (XAU/USD) y variables del mercado global entre 2010 y 2026.
Para cada variable se presenta su tabla de frecuencias y los indicadores estadisticos correspondientes segun su tipo.
datos <- read.csv("base_oro_riskoff.csv", stringsAsFactors = FALSE)
datos$fecha <- as.Date(datos$fecha)
str(datos)
## 'data.frame': 4174 obs. of 9 variables:
## $ fecha : Date, format: "2010-01-05" "2010-01-06" ...
## $ px_oro : num 1118 1136 1133 1138 1151 ...
## $ r_oro : num 0.000358 0.015795 -0.002468 0.004491 0.010922 ...
## $ px_vix : num 19.4 19.2 19.1 18.1 17.5 ...
## $ r_sp500 : num 0.003111 0.000545 0.003993 0.002878 0.001745 ...
## $ px_dxy : num 77.6 77.5 77.9 77.5 77 ...
## $ pctile_vix : num 0.5 0.333 0.25 0.2 0.167 ...
## $ estado_mercado: chr "normal" "normal" "normal" "normal" ...
## $ dow : chr "martes" "miércoles" "jueves" "viernes" ...
Esta variable clasifica cada dia como “risk-off” (dia de estres en el mercado) o “normal”, segun el nivel del VIX.
frec_abs <- table(datos$estado_mercado)
frec_rel <- prop.table(frec_abs)
frec_pct <- round(frec_rel * 100, 2)
tabla_estado <- data.frame(
Categoria = names(frec_abs),
Frecuencia_absoluta = as.vector(frec_abs),
Frecuencia_relativa = round(as.vector(frec_rel), 4),
Porcentaje = as.vector(frec_pct)
)
knitr::kable(tabla_estado, caption = "Tabla de frecuencias: estado del mercado")
| Categoria | Frecuencia_absoluta | Frecuencia_relativa | Porcentaje |
|---|---|---|---|
| normal | 3617 | 0.8666 | 86.66 |
| risk-off | 557 | 0.1334 | 13.34 |
barplot(frec_abs,
main = "Distribucion de dias segun estado del mercado",
ylab = "Numero de dias",
col = "gray70")
Interpretacion: la mayoria de los dias del periodo se clasifican como “normal”, mientras que los dias de “risk-off” representan una minoria, concentrada en periodos puntuales de estres (por ejemplo, crisis financieras o caidas fuertes del mercado accionario).
dow_normalizado <- chartr("áéíóú", "aeiou", tolower(trimws(datos$dow)))
orden_dias <- c("lunes", "martes", "miercoles", "jueves", "viernes")
datos$dow <- factor(dow_normalizado, levels = orden_dias)
frec_abs_dow <- table(datos$dow)
frec_rel_dow <- prop.table(frec_abs_dow)
frec_pct_dow <- round(frec_rel_dow * 100, 2)
tabla_dow <- data.frame(
Dia = names(frec_abs_dow),
Frecuencia_absoluta = as.vector(frec_abs_dow),
Frecuencia_relativa = round(as.vector(frec_rel_dow), 4),
Porcentaje = as.vector(frec_pct_dow)
)
knitr::kable(tabla_dow, caption = "Tabla de frecuencias: dia de la semana")
| Dia | Frecuencia_absoluta | Frecuencia_relativa | Porcentaje |
|---|---|---|---|
| lunes | 780 | 0.1869 | 18.69 |
| martes | 860 | 0.2060 | 20.60 |
| miercoles | 857 | 0.2053 | 20.53 |
| jueves | 842 | 0.2017 | 20.17 |
| viernes | 835 | 0.2000 | 20.00 |
barplot(frec_abs_dow,
main = "Distribucion de dias segun dia de la semana",
ylab = "Numero de dias",
col = "gray70")
Interpretacion: dado que el mercado no opera los fines de semana, los cinco dias habiles (lunes a viernes) deberian tener una frecuencia similar entre si; cualquier diferencia notable puede deberse a dias festivos que caen en dias especificos.
resumen_oro <- summary(datos$r_oro)
media <- mean(datos$r_oro, na.rm = TRUE)
mediana <- median(datos$r_oro, na.rm = TRUE)
desv_est <- sd(datos$r_oro, na.rm = TRUE)
varianza <- var(datos$r_oro, na.rm = TRUE)
rango <- diff(range(datos$r_oro, na.rm = TRUE))
cv <- (desv_est / media) * 100
tabla_indicadores_oro <- data.frame(
Indicador = c("Media", "Mediana", "Desviacion estandar", "Varianza",
"Minimo", "Maximo", "Rango", "Coeficiente de variacion (%)"),
Valor = c(media, mediana, desv_est, varianza,
min(datos$r_oro, na.rm = TRUE), max(datos$r_oro, na.rm = TRUE),
rango, cv)
)
tabla_indicadores_oro$Valor <- round(tabla_indicadores_oro$Valor, 6)
knitr::kable(tabla_indicadores_oro, caption = "Indicadores descriptivos: variacion diaria del oro")
| Indicador | Valor |
|---|---|
| Media | 0.000362 |
| Mediana | 0.000455 |
| Desviacion estandar | 0.010656 |
| Varianza | 0.000114 |
| Minimo | -0.098206 |
| Maximo | 0.059054 |
| Rango | 0.157260 |
| Coeficiente de variacion (%) | 2943.372296 |
# Tabla de frecuencias por intervalos (variable continua)
cortes_oro <- hist(datos$r_oro, breaks = "Sturges", plot = FALSE)
tabla_frec_oro <- data.frame(
Intervalo = paste(round(cortes_oro$breaks[-length(cortes_oro$breaks)], 4),
round(cortes_oro$breaks[-1], 4), sep = " a "),
Frecuencia_absoluta = cortes_oro$counts,
Frecuencia_relativa = round(cortes_oro$counts / sum(cortes_oro$counts), 4)
)
knitr::kable(tabla_frec_oro, caption = "Tabla de frecuencias por intervalos: variacion diaria del oro")
| Intervalo | Frecuencia_absoluta | Frecuencia_relativa |
|---|---|---|
| -0.1 a -0.09 | 1 | 0.0002 |
| -0.09 a -0.08 | 0 | 0.0000 |
| -0.08 a -0.07 | 0 | 0.0000 |
| -0.07 a -0.06 | 3 | 0.0007 |
| -0.06 a -0.05 | 3 | 0.0007 |
| -0.05 a -0.04 | 10 | 0.0024 |
| -0.04 a -0.03 | 26 | 0.0062 |
| -0.03 a -0.02 | 93 | 0.0223 |
| -0.02 a -0.01 | 382 | 0.0915 |
| -0.01 a 0 | 1451 | 0.3476 |
| 0 a 0.01 | 1633 | 0.3912 |
| 0.01 a 0.02 | 452 | 0.1083 |
| 0.02 a 0.03 | 89 | 0.0213 |
| 0.03 a 0.04 | 23 | 0.0055 |
| 0.04 a 0.05 | 5 | 0.0012 |
| 0.05 a 0.06 | 3 | 0.0007 |
hist(datos$r_oro,
main = "Distribucion de la variacion diaria del oro",
xlab = "Variacion diaria (proporcion)",
ylab = "Frecuencia",
col = "gray70")
boxplot(datos$r_oro,
main = "Diagrama de caja: variacion diaria del oro",
ylab = "Variacion diaria (proporcion)",
col = "gray70")
Interpretacion: la variacion diaria del oro se concentra alrededor de cero, lo cual es esperable en un activo financiero (la mayoria de los dias el precio cambia poco). El diagrama de caja permite identificar si existen datos atipicos (dias con variaciones inusualmente grandes).
media_vix <- mean(datos$px_vix, na.rm = TRUE)
mediana_vix <- median(datos$px_vix, na.rm = TRUE)
desv_est_vix <- sd(datos$px_vix, na.rm = TRUE)
varianza_vix <- var(datos$px_vix, na.rm = TRUE)
rango_vix <- diff(range(datos$px_vix, na.rm = TRUE))
cv_vix <- (desv_est_vix / media_vix) * 100
tabla_indicadores_vix <- data.frame(
Indicador = c("Media", "Mediana", "Desviacion estandar", "Varianza",
"Minimo", "Maximo", "Rango", "Coeficiente de variacion (%)"),
Valor = c(media_vix, mediana_vix, desv_est_vix, varianza_vix,
min(datos$px_vix, na.rm = TRUE), max(datos$px_vix, na.rm = TRUE),
rango_vix, cv_vix)
)
tabla_indicadores_vix$Valor <- round(tabla_indicadores_vix$Valor, 4)
knitr::kable(tabla_indicadores_vix, caption = "Indicadores descriptivos: nivel del VIX")
| Indicador | Valor |
|---|---|
| Media | 18.4304 |
| Mediana | 16.7550 |
| Desviacion estandar | 6.7821 |
| Varianza | 45.9970 |
| Minimo | 9.1400 |
| Maximo | 82.6900 |
| Rango | 73.5500 |
| Coeficiente de variacion (%) | 36.7984 |
cortes_vix <- hist(datos$px_vix, breaks = "Sturges", plot = FALSE)
tabla_frec_vix <- data.frame(
Intervalo = paste(round(cortes_vix$breaks[-length(cortes_vix$breaks)], 2),
round(cortes_vix$breaks[-1], 2), sep = " a "),
Frecuencia_absoluta = cortes_vix$counts,
Frecuencia_relativa = round(cortes_vix$counts / sum(cortes_vix$counts), 4)
)
knitr::kable(tabla_frec_vix, caption = "Tabla de frecuencias por intervalos: nivel del VIX")
| Intervalo | Frecuencia_absoluta | Frecuencia_relativa |
|---|---|---|
| 5 a 10 | 59 | 0.0141 |
| 10 a 15 | 1384 | 0.3316 |
| 15 a 20 | 1520 | 0.3642 |
| 20 a 25 | 656 | 0.1572 |
| 25 a 30 | 299 | 0.0716 |
| 30 a 35 | 154 | 0.0369 |
| 35 a 40 | 48 | 0.0115 |
| 40 a 45 | 25 | 0.0060 |
| 45 a 50 | 10 | 0.0024 |
| 50 a 55 | 5 | 0.0012 |
| 55 a 60 | 3 | 0.0007 |
| 60 a 65 | 4 | 0.0010 |
| 65 a 70 | 2 | 0.0005 |
| 70 a 75 | 1 | 0.0002 |
| 75 a 80 | 3 | 0.0007 |
| 80 a 85 | 1 | 0.0002 |
hist(datos$px_vix,
main = "Distribucion del nivel del VIX",
xlab = "Nivel del VIX",
ylab = "Frecuencia",
col = "gray70")
boxplot(datos$px_vix,
main = "Diagrama de caja: nivel del VIX",
ylab = "Nivel del VIX",
col = "gray70")
Interpretacion: el VIX suele mantenerse en niveles bajos la mayor parte del tiempo (mercado tranquilo), con picos ocasionales que reflejan momentos de mayor incertidumbre o estres en los mercados globales. Esto se refleja en una distribucion con cola hacia la derecha (algunos valores altos poco frecuentes).