El objetivo principal del artículo es evaluar si los Fondos de Inversión Colectiva (FIC) enfocados en acciones en Colombia generan valor para sus inversionistas. Para ello, los autores estiman el alfa de Jensen con el fin de determinar si los gestores logran obtener rendimientos anormales positivos, es decir, superiores a los explicados por el riesgo sistemático del mercado según el modelo CAPM.
El estudio utiliza información de 73 Fondos de Inversión Colectiva enfocados en renta variable, con datos provenientes de la Superintendencia Financiera de Colombia y Bloomberg. La variable dependiente corresponde al exceso de retorno de cada fondo respecto a la tasa libre de riesgo, mientras que la variable explicativa es el exceso de retorno del mercado, representado por el índice COLCAP.
La estimación se realiza mediante el modelo CAPM utilizando el método de Mínimos Cuadrados Ordinarios (MCO), con el objetivo de obtener el alfa de Jensen. Posteriormente, se evalúa la significancia estadística de dicho coeficiente a través del estadístico t y su respectivo p-value, lo que permite contrastar la hipótesis de que el alfa es igual a cero. En el caso de fondos menos diversificados, el retorno se contrasta frente al activo o índice que mejor represente su estructura de inversión. Todo el análisis econométrico fue desarrollado en el software EViews 9.
Los principales hallazgos indican que la mayoría de los FIC enfocados en acciones no presentan un alfa de Jensen positivo y estadísticamente significativo. Esto implica que, en promedio, los fondos no generan retornos anormales ajustados por riesgo frente a su benchmark. En consecuencia, la gestión activa no evidencia una creación sistemática de valor, situación que los autores asocian principalmente a costos de administración y transacción.
En cuanto a las limitaciones, una de las principales radica en la utilización del modelo CAPM en el contexto del mercado colombiano. Este modelo se basa en supuestos como mercados eficientes, ausencia de fricciones, homogeneidad de expectativas y acceso libre a la tasa libre de riesgo, condiciones que difícilmente se cumplen en un mercado emergente caracterizado por baja profundidad, limitada liquidez y un número reducido de activos listados. Estas características pueden afectar la capacidad explicativa del modelo.
La base de datos utilizada en este análisis fue obtenida a partir de Bloomberg e incluye información mensual de los fondos desde febrero de 2016 hasta diciembre de 2025. Para estimar el modelo CAPM, se utilizó como tasa libre de riesgo el rendimiento de los bonos del Gobierno colombiano a 10 años. En el caso de los fondos de renta variable, el rendimiento del mercado fue representado por el índice COLCAP, mientras que para los fondos de renta fija se empleó el índice COLTES como proxy del mercado de deuda pública. Todos los datos fueron descargados directamente de Bloomberg.
A continuación, se presentan las gráficas de precios y rendimientos para los fondos analizados. Estas permiten observar la evolución temporal de los valores y su volatilidad, así como identificar posibles cambios estructurales en el comportamiento de los activos a lo largo del periodo de estudio.
library(readxl)
library(dplyr)
library(lmtest)
library(tidyr)
library(ggplot2)
library(tseries)
library(forecast)
library(sandwich)
library(zoo)
library(plotly)
library(readxl)
Fondos <- read_excel("Fondos.xlsx")
View(Fondos)
RV <- read_excel("Fondos.xlsx", sheet = "RentaVariable")
RF <- read_excel("Fondos.xlsx", sheet = "RentaFija")
RV_precios <- RV
#Graficamos la serie de precios de forma indiviual para los fondos de RV
RV <- read_excel("Fondos.xlsx", sheet = "RentaVariable")
RF <- read_excel("Fondos.xlsx", sheet = "RentaFija")
RV_precios <- RV
#Graficamos la serie de precios de forma indiviual para los fondos de RV
RV_long <- RV_precios %>%
pivot_longer(-Dates, names_to = "Fondo", values_to = "Precio")
p <- ggplot(RV_long, aes(x = Dates, y = Precio, color = Fondo)) +
geom_line() +
theme_minimal() +
labs(title = "Precios Fondos de Renta Variable",
x = "Fecha",
y = "Precio")
ggplotly(p)
Ahora estas son las graficas de los fondos de renta varaible
# Convertimos a formato largo
RF_long <- RF %>%
pivot_longer(-Dates, names_to = "Fondo", values_to = "Precio") %>%
na.omit()
# Creamos el gráfico
p <- ggplot(RF_long, aes(x = Dates, y = Precio, color = Fondo)) +
geom_line() +
theme_minimal() +
labs(title = "Precios Fondos de Renta Fija",
x = "Fecha",
y = "Precio")
# Lo volvemos interactivo
ggplotly(p)
Ahora para los rendimientos de los fondos
# ===============================
# RENDIMIENTOS
# ===============================
calc_returns <- function(data){
returns <- data
for(i in 2:ncol(data)){
returns[[i]] <- c(NA, diff(log(data[[i]])))
}
return(returns)
}
RV_ret <- calc_returns(RV)
RF_ret <- calc_returns(RF)
# Convertimos a formato largo
RV_ret_long <- RV_ret %>%
pivot_longer(-Dates, names_to = "Fondo", values_to = "Rendimiento") %>%
filter(!Fondo %in% c("COLCAP Index", "D_COVID",
"COLTES",
"Dividend Yield of Market",
"GT10 Govt")) %>%
na.omit()
# Graficamos
p_ret_RV <- ggplot(RV_ret_long, aes(x = Dates, y = Rendimiento, color = Fondo)) +
geom_line() +
theme_minimal() +
labs(title = "Rendimientos Fondos de Renta Variable",
x = "Fecha",
y = "Rendimiento")
ggplotly(p_ret_RV)
#RENDIMIENTOS RENTA FIJA
RF_ret_long <- RF_ret %>%
pivot_longer(-Dates, names_to = "Fondo", values_to = "Rendimiento") %>%
filter(!Fondo %in% c("COLCAP Index",
"COLTES",
"Dividend Yield of Market",
"GT10 Govt")) %>%
na.omit()
p_ret_RF <-ggplot(RF_ret_long, aes(x = Dates, y = Rendimiento, color = Fondo)) +
geom_line() +
theme_minimal() +
labs(title = "Rendimientos Fondos de Renta Fija",
x = "Fecha",
y = "Rendimiento")
ggplotly(p_ret_RF)
A partir de las gráficas se observa que las series de precios presentan una tendencia marcada a lo largo del tiempo, lo que indica que no son estacionarias en niveles. Sin embargo, al transformar dichas series en rendimientos (mediante diferencias logarítmicas), la tendencia desaparece y las series se tornan estacionarias, condición fundamental para la correcta estimación de modelos econométricos como el CAPM.
De manera preliminar, también se evidencia que los fondos de renta variable exhiben una mayor volatilidad en comparación con los fondos de renta fija. Mientras los primeros presentan fluctuaciones más pronunciadas en sus rendimientos, los fondos de renta fija muestran un comportamiento más estable y menos disperso a lo largo del periodo analizado, consistente con su perfil de riesgo más conservador.
Todas estas series son de orden de integración 1 ya que es neesario diferenciar la serie una vez (obtener los rendimientos) para que esta se vuelva estacionaria,
Arima para Renta variable
# ===============================
# AUTO ARIMA Renta Variable (Resumen)
# ===============================
resultados_arima_RV <- data.frame()
for(i in 2:ncol(RV_ret)){
nombre <- colnames(RV_ret)[i]
# Excluir series que no queremos
if(nombre %in% c("GT10 Govt",
"COLTES",
"COLCAP Index",
"Dividend Yield of Market")){
next
}
serie <- na.omit(RV_ret[[i]])
modelo <- auto.arima(serie)
orden <- arimaorder(modelo)
resultados_arima_RV <- rbind(resultados_arima_RV,
data.frame(
Fondo = nombre,
p = orden[1],
d = orden[2],
q = orden[3],
AIC = modelo$aic,
BIC = modelo$bic,
Sigma2 = modelo$sigma2
))
}
knitr::kable(resultados_arima_RV,
digits = 4,
caption = "Modelos ARIMA estimados - Fondos de Renta Variable")
| Fondo | p | d | q | AIC | BIC | Sigma2 | |
|---|---|---|---|---|---|---|---|
| p | ALIACCA CB Equity | 0 | 0 | 0 | -286.6913 | -284.1064 | 0.0031 |
| p1 | CAMACLA CB Equity | 0 | 0 | 0 | -172.6901 | -170.7011 | 0.0023 |
| p2 | ACCCOLP CB Equity | 0 | 0 | 0 | -275.3330 | -270.1835 | 0.0033 |
| p3 | ANACION CB Equity | 0 | 0 | 0 | -367.8288 | -362.2874 | 0.0025 |
| p4 | FGDINRV CB Equity | 0 | 0 | 0 | -352.7872 | -347.2458 | 0.0029 |
| p5 | ACPPLUS CB Equity | 0 | 0 | 0 | -218.9719 | -216.5898 | 0.0037 |
| p6 | CAMAILA CB Equity | 0 | 1 | 0 | -89.9035 | -88.3200 | 0.0046 |
| p7 | HCOLSEL CB Equity | 0 | 0 | 0 | -342.3131 | -339.5424 | 0.0032 |
| p8 | SEGBOLI CB Equity | 0 | 0 | 0 | -359.1498 | -353.8419 | 0.0019 |
| p9 | FACCION CB Equity | 0 | 0 | 0 | -367.3776 | -364.6069 | 0.0026 |
| p10 | CAMACGA CB Equity | 0 | 0 | 0 | -426.8536 | -421.3122 | 0.0015 |
| p11 | FCPAGUN CB Equity | 0 | 0 | 0 | -17.3732 | -17.9869 | 0.0005 |
| p12 | FCEINDE CB Equity | 0 | 0 | 0 | -597.6702 | -592.1288 | 0.0004 |
Autoarima para renta fija
# ===============================
# AUTO ARIMA Renta Fija (Resumen)
# ===============================
resultados_arima_RF <- data.frame()
for(i in 2:ncol(RF_ret)){
nombre <- colnames(RF_ret)[i]
# Excluir series que no queremos
if(nombre %in% c("GT10 Govt",
"COLTES",
"COLCAP Index",
"Dividend Yield of Market")){
next
}
serie <- na.omit(RF_ret[[i]])
modelo <- auto.arima(serie)
orden <- arimaorder(modelo)
resultados_arima_RF <- rbind(resultados_arima_RF,
data.frame(
Fondo = nombre,
p = orden[1],
d = orden[2],
q = orden[3],
AIC = modelo$aic,
BIC = modelo$bic,
Sigma2 = modelo$sigma2
))
}
knitr::kable(resultados_arima_RF,
digits = 4,
caption = "Modelos ARIMA estimados - Fondos de Renta Fija")
| Fondo | p | d | q | AIC | BIC | Sigma2 | |
|---|---|---|---|---|---|---|---|
| p | CAMDCTA CB Equity | 0 | 0 | 0 | -189.5430 | -186.7723 | 0.0115 |
| p1 | RLVALBC CB Equity | 0 | 0 | 0 | -442.8361 | -440.0654 | 0.0013 |
| p2 | FCABBPU CB Equity | 0 | 0 | 0 | -239.3035 | -237.1926 | 0.0011 |
| p3 | FGLDEEM CB Equity | 0 | 0 | 0 | -596.0304 | -590.4890 | 0.0004 |
| p4 | ALICXCA CB Equity | 3 | 1 | 2 | -1100.1998 | -1083.6267 | 0.0000 |
| p5 | CRCCFEC CB Equity | 0 | 0 | 0 | -157.1312 | -155.1059 | 0.0034 |
| p6 | ALIGODB CB Equity | 0 | 1 | 1 | -678.0318 | -673.2678 | 0.0000 |
| p7 | ITCOPTC CB Equity | 0 | 0 | 0 | 198.5221 | 201.2928 | 0.3096 |
| p8 | PENSIO4 CB Equity | 1 | 1 | 0 | -1237.3696 | -1232.0809 | 0.0000 |
| p9 | ALT120A CB Equity | 1 | 0 | 0 | -339.1935 | -332.8608 | 0.0002 |
| p10 | FAAPPM1 CB Equity | 2 | 1 | 1 | -1037.1354 | -1026.0867 | 0.0000 |
| p11 | BBVEFEA CB Equity | 0 | 1 | 1 | -1058.1204 | -1052.5961 | 0.0000 |
| p12 | CONSOLI CB Equity | 0 | 1 | 2 | -994.6221 | -986.6890 | 0.0000 |
| p13 | FIDUCTA CB Equity | 0 | 1 | 2 | -1125.9699 | -1117.6833 | 0.0000 |
| p14 | DEREC26 CB Equity | 0 | 1 | 1 | -879.2411 | -874.4770 | 0.0000 |
| p15 | LIQBYRB CB Equity | 0 | 1 | 1 | -1005.5018 | -999.9775 | 0.0000 |
| p16 | OMEFECF CB Equity | 0 | 1 | 1 | -659.4894 | -654.2394 | 0.0001 |
| p17 | FINTERES CB Equity | 0 | 1 | 2 | -832.2350 | -823.9485 | 0.0000 |
| p18 | ABIERCA CB Equity | 0 | 1 | 1 | -935.9161 | -930.6082 | 0.0000 |
| p19 | ITMMKTC CB Equity | 0 | 1 | 2 | -1102.0212 | -1093.7347 | 0.0000 |
| p20 | CAMFVG2 CB Equity | 0 | 1 | 2 | -447.8227 | -441.9118 | 0.0000 |
| p21 | CCAPAIS CB Equity | 0 | 1 | 2 | -1091.6472 | -1083.3606 | 0.0000 |
| p22 | PARF901 CB Equity | 1 | 0 | 0 | -798.7388 | -790.7203 | 0.0000 |
| p23 | FIDUEXC CB Equity | 0 | 1 | 2 | -1106.6042 | -1098.3176 | 0.0000 |
| p24 | RENTFIP CB Equity | 2 | 0 | 0 | -818.4732 | -807.3904 | 0.0001 |
| p25 | COVPLT1 CB Equity | 0 | 1 | 2 | -958.3438 | -950.2974 | 0.0000 |
| p26 | ACCIVAL CB Equity | 0 | 1 | 2 | -1093.4092 | -1085.1227 | 0.0000 |
| p27 | BBVFAMA CB Equity | 0 | 1 | 2 | -1032.2324 | -1023.9459 | 0.0000 |
Para la estimación del modelo empírico del CAPM para cada uno de los fondos se adoptaron los siguientes supuestos metodológicos:
En el caso de los fondos de renta fija, el rendimiento del mercado (Rm) se aproximó mediante los rendimientos del índice COLTES, el cual refleja el comportamiento de los títulos de deuda pública en Colombia y constituye un benchmark representativo para este tipo de fondos.
Para los fondos de renta variable, el rendimiento del mercado se representó a través del índice COLCAP, principal indicador del mercado accionario colombiano y proxy adecuada del portafolio de mercado en el contexto local.
Como tasa libre de riesgo (Rf), se utilizó el primer dato disponible del rendimiento de los bonos del Gobierno colombiano a 10 años. Esta elección se justifica en la medida en que dicha tasa representa el retorno que habría obtenido un inversionista al inicio del periodo si hubiera optado por una alternativa libre de riesgo en lugar de invertir en un Fondo de Inversión Colectiva. Además, dado que el horizonte analizado abarca aproximadamente diez años, el uso de un bono soberano a 10 años resulta consistente con la duración del periodo de estudio.
# ===============================
# RENDIMIENTOS MERCADO
# ===============================
# ---- Renta Fija ----
COLTES_precio <- RF$`COLTES`
COLTES_ret <- c(NA, diff(log(COLTES_precio)))
Rm_RF <- COLTES_ret
# ---- Renta Variable ----
COLCAP_precio <- RV$`COLCAP Index`
COLCAP_ret <- c(NA, diff(log(COLCAP_precio)))
Rm_RV <- COLCAP_ret
# Tasa libre de riesgo
Rf <- RF$`GT10 Govt`[1]
Ahora desarollamos nuestro modelo CAPM para cada los fondos de renta variable
# ===============================
# CAPM RENTA FIJA LIMPIO
# ===============================
resultados_RF <- data.frame()
for(i in 2:ncol(RF_ret)){
nombre <- colnames(RF_ret)[i]
# Excluir variables que no son fondos
if(nombre %in% c("COLCAP Index","COLTES",
"GT10 Govt",
"Dividend Yield of Market")) next
Ri <- RF_ret[[i]]
Rm <- Rm_RF
# Unimos Ri y Rm
datos <- data.frame(Ri, Rm)
# Eliminamos NA conjuntos (el modelo empieza donde haya datos)
datos <- na.omit(datos)
# Excesos
datos$Ri_exceso <- datos$Ri - Rf
datos$Rm_exceso <- datos$Rm - Rf
modelo <- lm(Ri_exceso ~ Rm_exceso, data = datos)
resumen <- summary(modelo)
# Guardamos resultados
resultados_RF <- rbind(resultados_RF,
data.frame(
Fondo = nombre,
Observaciones = nrow(datos),
Alfa = coef(resumen)[1,1],
p_Alfa = coef(resumen)[1,4],
Beta = coef(resumen)[2,1],
p_Beta = coef(resumen)[2,4],
R2 = resumen$r.squared,
R2_Ajustado = resumen$adj.r.squared
))
}
knitr::kable(resultados_RF, digits = 4, caption = "Resultados CAPM - Fondos de Renta Fija")
| Fondo | Observaciones | Alfa | p_Alfa | Beta | p_Beta | R2 | R2_Ajustado |
|---|---|---|---|---|---|---|---|
| CAMDCTA CB Equity | 118 | -0.7744 | 0.4259 | 0.5563 | 0.3213 | 0.0085 | -0.0001 |
| RLVALBC CB Equity | 118 | -1.6644 | 0.0000 | 0.0403 | 0.8339 | 0.0004 | -0.0082 |
| FCABBPU CB Equity | 61 | -0.3223 | 0.4807 | 0.8129 | 0.0029 | 0.1410 | 0.1264 |
| FGLDEEM CB Equity | 118 | -0.5670 | 0.0000 | 0.6712 | 0.0000 | 0.3931 | 0.3879 |
| ALICXCA CB Equity | 118 | -1.6493 | 0.0000 | 0.0466 | 0.0024 | 0.0764 | 0.0685 |
| CRCCFEC CB Equity | 56 | -0.4425 | 0.6266 | 0.7428 | 0.1592 | 0.0364 | 0.0185 |
| ALIGODB CB Equity | 81 | -1.5773 | 0.0000 | 0.0881 | 0.0011 | 0.1268 | 0.1158 |
| ITCOPTC CB Equity | 118 | -1.0601 | 0.8333 | 0.4160 | 0.8860 | 0.0002 | -0.0084 |
| PENSIO4 CB Equity | 105 | -1.6984 | 0.0000 | 0.0177 | 0.0806 | 0.0294 | 0.0199 |
| ALT120A CB Equity | 61 | -1.7166 | 0.0000 | 0.0071 | 0.9554 | 0.0001 | -0.0169 |
| FAAPPM1 CB Equity | 118 | -1.5759 | 0.0000 | 0.0899 | 0.0000 | 0.1693 | 0.1621 |
| BBVEFEA CB Equity | 118 | -1.6095 | 0.0000 | 0.0697 | 0.0001 | 0.1209 | 0.1133 |
| CONSOLI CB Equity | 105 | -1.5721 | 0.0000 | 0.0917 | 0.0000 | 0.1871 | 0.1792 |
| FIDUCTA CB Equity | 118 | -1.6033 | 0.0000 | 0.0735 | 0.0001 | 0.1286 | 0.1211 |
| DEREC26 CB Equity | 81 | -1.6462 | 0.0000 | 0.0472 | 0.0013 | 0.1239 | 0.1128 |
| LIQBYRB CB Equity | 118 | -1.5748 | 0.0000 | 0.0900 | 0.0000 | 0.1527 | 0.1454 |
| OMEFECF CB Equity | 103 | -1.7374 | 0.0000 | -0.0036 | 0.9487 | 0.0000 | -0.0099 |
| FINTERES CB Equity | 118 | -1.6149 | 0.0000 | 0.0670 | 0.0731 | 0.0274 | 0.0190 |
| ABIERCA CB Equity | 106 | -1.5938 | 0.0000 | 0.0791 | 0.0001 | 0.1308 | 0.1225 |
| ITMMKTC CB Equity | 118 | -1.5936 | 0.0000 | 0.0790 | 0.0000 | 0.1488 | 0.1415 |
| CAMFVG2 CB Equity | 54 | -1.4224 | 0.0000 | 0.1765 | 0.0000 | 0.3294 | 0.3165 |
| CCAPAIS CB Equity | 118 | -1.5652 | 0.0000 | 0.0955 | 0.0000 | 0.2166 | 0.2099 |
| PARF901 CB Equity | 107 | -1.3987 | 0.0000 | 0.1917 | 0.0000 | 0.2532 | 0.2461 |
| FIDUEXC CB Equity | 118 | -1.5929 | 0.0000 | 0.0795 | 0.0000 | 0.1473 | 0.1399 |
| RENTFIP CB Equity | 118 | -1.3786 | 0.0000 | 0.2033 | 0.0000 | 0.2122 | 0.2054 |
| COVPLT1 CB Equity | 109 | -1.5632 | 0.0000 | 0.0970 | 0.0000 | 0.1670 | 0.1593 |
| ACCIVAL CB Equity | 118 | -1.5805 | 0.0000 | 0.0868 | 0.0000 | 0.1875 | 0.1805 |
| BBVFAMA CB Equity | 118 | -1.5215 | 0.0000 | 0.1207 | 0.0000 | 0.2791 | 0.2729 |
Los resultados del modelo CAPM muestran que, para la mayoría de los fondos, el alfa estimado es negativo y estadísticamente significativo. En particular, más del 80% de los fondos presentan valores de p-value < 0.05 p-value<0.05 para el intercepto, lo que indica que el alfa es significativamente distinto de cero. Sin embargo, dado que el coeficiente es negativo en casi todos los casos (entre aproximadamente -1.3 y -1.7), esto sugiere que los fondos, en promedio, destruyen valor en relación con el rendimiento ajustado por riesgo del mercado.
En cuanto al beta, los resultados muestran una heterogeneidad importante. Algunos fondos presentan betas estadísticamente significativos y positivos, lo que indica sensibilidad frente al mercado. Por ejemplo, fondos como FGLDEEM CB Equity y BBVFAMA CB Equity presentan betas altamente significativos y valores de R² relativamente altos. Sin embargo, otros fondos tienen betas no significativos, lo que sugiere que su comportamiento no está explicado por el factor de mercado utilizado en el modelo.
Respecto a la bondad de ajuste (R²), la mayoría de los fondos presentan valores entre 0.10 y 0.25, aunque algunos alcanzan niveles cercanos a 0.39. Esto indica que el mercado explica entre el 10% y el 40% de la variabilidad de los rendimientos, lo cual representa un poder explicativo moderado. En consecuencia, aunque el factor de mercado tiene cierta relevancia, existen otros factores no incluidos en el CAPM que influyen en el desempeño de los fondos.
Ahora realizamos el mismo proceso pero para los fondos de renta variable
# ===============================
# CAPM RENTA VARIABLE COMPLETO
# ===============================
resultados_RV <- data.frame()
for(i in 2:ncol(RV_ret)){
nombre <- colnames(RV_ret)[i]
# Excluir variables que no son fondos
if(nombre %in% c("COLCAP Index","COLTES",
"GT10 Govt",
"Dividend Yield of Market")) next
Ri <- RV_ret[[i]]
Rm <- Rm_RV
# Unimos Ri y Rm
datos <- data.frame(Ri, Rm)
# Eliminamos NA conjuntos (el modelo empieza donde haya datos)
datos <- na.omit(datos)
# Excesos
datos$Ri_exceso <- datos$Ri - Rf
datos$Rm_exceso <- datos$Rm - Rf
modelo <- lm(Ri_exceso ~ Rm_exceso, data = datos)
resumen <- summary(modelo)
# Guardamos resultados clave
resultados_RV <- rbind(resultados_RV,
data.frame(
Fondo = nombre,
Observaciones = nrow(datos),
Alfa = coef(resumen)[1,1],
p_Alfa = coef(resumen)[1,4],
Beta = coef(resumen)[2,1],
p_Beta = coef(resumen)[2,4],
R2 = resumen$r.squared,
R2_Ajustado = resumen$adj.r.squared
))
}
knitr::kable(resultados_RV, digits = 4, caption = "Resultados CAPM - Fondos de Renta Vriable")
| Fondo | Observaciones | Alfa | p_Alfa | Beta | p_Beta | R2 | R2_Ajustado |
|---|---|---|---|---|---|---|---|
| ALIACCA CB Equity | 98 | -0.1800 | 0.0002 | 0.8940 | 0.0000 | 0.9212 | 0.9203 |
| CAMACLA CB Equity | 54 | -1.2494 | 0.0000 | 0.2814 | 0.0271 | 0.0904 | 0.0729 |
| ACCCOLP CB Equity | 97 | -0.1090 | 0.0165 | 0.9336 | 0.0000 | 0.9325 | 0.9318 |
| ANACION CB Equity | 118 | -0.1978 | 0.0000 | 0.8843 | 0.0000 | 0.9617 | 0.9613 |
| FGDINRV CB Equity | 118 | -0.1199 | 0.0034 | 0.9281 | 0.0000 | 0.9326 | 0.9320 |
| ACPPLUS CB Equity | 80 | -0.0638 | 0.0419 | 0.9614 | 0.0000 | 0.9740 | 0.9737 |
| CAMAILA CB Equity | 37 | -1.6599 | 0.0025 | 0.0534 | 0.8575 | 0.0009 | -0.0276 |
| HCOLSEL CB Equity | 118 | -0.0987 | 0.0888 | 0.9421 | 0.0000 | 0.8742 | 0.8731 |
| SEGBOLI CB Equity | 105 | -0.4539 | 0.0000 | 0.7363 | 0.0000 | 0.9688 | 0.9685 |
| FACCION CB Equity | 118 | -0.4544 | 0.0000 | 0.7396 | 0.0000 | 0.6590 | 0.6561 |
| CAMACGA CB Equity | 118 | -1.2422 | 0.0000 | 0.2802 | 0.0000 | 0.1592 | 0.1520 |
| FCPAGUN CB Equity | 4 | -1.3497 | 0.3125 | 0.2231 | 0.7418 | 0.0666 | -0.4000 |
| FCEINDE CB Equity | 118 | -1.2895 | 0.0000 | 0.2544 | 0.0000 | 0.5582 | 0.5544 |
Distinto al observado en renta fija. En este caso, la mayoría de los fondos presentan un beta altamente significativo y cercano a 1, lo que indica una fuerte sensibilidad frente al mercado representado por el COLCAP. De hecho, varios fondos como ALIACCA CB Equity, ANACION CB Equity, FGDINRV CB Equity y ACPPLUS CB Equity presentan valores de R² superiores a 0.90, lo que implica que más del 90% de la variabilidad de sus rendimientos es explicada por el factor de mercado. Esto sugiere que estos fondos se comportan prácticamente como un portafolio que replica el índice, mostrando una alta dependencia del riesgo sistemático.
En cuanto al alfa, aunque en muchos casos resulta estadísticamente significativo (p-value < 0.05), el signo es predominantemente negativo. Esto indica que, aun después de ajustar por riesgo sistemático, los fondos no generan rendimientos anormales positivos. En otras palabras, no se evidencia creación de valor ajustada por riesgo. La significancia estadística del alfa negativo podría estar reflejando costos de administración, fricciones de mercado o diferencias en la estructura de los portafolios frente al índice.
Por otro lado, algunos fondos como CAMAILA CB Equity o FCPAGUN CB Equity presentan betas no significativos y bajos niveles de R², lo que indica que su comportamiento no está fuertemente explicado por el mercado. Sin embargo, estos casos son minoritarios dentro del conjunto analizado.
En el caso de los fondos de renta variable, el modelo CAPM presenta un alto poder explicativo, con valores de R² en muchos casos superiores al 90%. Esto indica que el comportamiento de los fondos está fuertemente determinado por el mercado accionario (COLCAP). En términos prácticos, muchos de estos fondos se comportan como réplicas del índice, es decir, asumen riesgo sistemático similar al del mercado. Sin embargo, el alfa estimado es predominantemente negativo, incluso cuando es estadísticamente significativo. Esto sugiere que, ajustando por riesgo, la gestión activa no está generando valor adicional y que los costos de administración podrían estar afectando el rendimiento neto del inversionista.
En los fondos de renta fija, el poder explicativo del modelo es menor y más heterogéneo. El mercado (COLTES) explica solo una fracción moderada de la variabilidad de los rendimientos, lo que indica que estos fondos pueden estar expuestos a otros factores como duración, riesgo crediticio o decisiones activas de portafolio. No obstante, también se observa una predominancia de alfas negativos, lo que sugiere que tampoco en este segmento se evidencia creación sistemática de valor ajustada por riesgo.
El mercado colombiano de fondos parece presentar características consistentes con un entorno relativamente eficiente:
En renta variable, el riesgo sistemático explica casi todo el rendimiento. Es difícil obtener retornos anormales positivos de forma persistente. La gestión activa no muestra evidencia clara de generación de alfa.
Esto sugiere que el mercado accionario colombiano refleja de manera relativamente eficiente la información disponible, al menos en el periodo estudiado. En renta fija, aunque el mercado explica menos, tampoco se observan retornos extraordinarios consistentes.
Si el objetivo es exposición al mercado accionario, podría ser más eficiente invertir en fondos con bajo costo o estrategias pasivas que repliquen el índice, dado que la mayoría de los fondos activos no genera alfa positivo.
Sí, es conveniente participar, pero con expectativas realistas. El mercado colombiano permite obtener rendimientos acordes al riesgo asumido, especialmente en renta variable, donde el desempeño está fuertemente ligado al mercado general. Sin embargo, no parece ser un mercado donde la gestión activa genere retornos anormales sistemáticos.
En conclusión, el mercado colombiano de fondos durante el periodo analizado muestra eficiencia en términos de riesgo sistemático, limitada generación de alfa y una estructura donde la diversificación y el control de costos son determinantes para el desempeño del inversionista.
Para nuestro grupo de renta variable
RV_ret$Dates <- as.Date(RV_ret$Dates)
# Crear dummy COVID (desde marzo 2020)
RV_ret$D_COVID <- ifelse(RV_ret$Dates >= as.Date("2020-03-01"), 1, 0)
resultados_RV_covid <- data.frame()
for(i in 2:ncol(RV_ret)){
nombre <- colnames(RV_ret)[i]
if(nombre %in% c("COLCAP Index", "COLTES",
"GT10 Govt",
"Dividend Yield of Market",
"D_COVID")) next
Ri <- RV_ret[[i]]
Rm <- Rm_RV
D <- RV_ret$D_COVID
datos <- data.frame(Ri, Rm, D)
datos <- na.omit(datos)
# Si no hay suficientes datos, saltar
if(nrow(datos) < 10) next
datos$Ri_exceso <- datos$Ri - Rf
datos$Rm_exceso <- datos$Rm - Rf
modelo <- lm(Ri_exceso ~ Rm_exceso + D, data = datos)
resumen <- summary(modelo)
coefs <- coef(resumen)
# Verificar si la dummy existe en el modelo
if("D" %in% rownames(coefs)){
gamma <- coefs["D", 1]
p_gamma <- coefs["D", 4]
} else {
gamma <- NA
p_gamma <- NA
}
resultados_RV_covid <- rbind(resultados_RV_covid,
data.frame(
Fondo = nombre,
Alfa = coefs[1,1],
Beta = coefs[2,1],
Gamma_COVID = gamma,
p_Gamma = p_gamma,
R2 = resumen$r.squared
))
}
knitr::kable(resultados_RV_covid, digits = 4, caption = "Resultados CAPM ajustado - Fondos de Renta Variable")
| Fondo | Alfa | Beta | Gamma_COVID | p_Gamma | R2 |
|---|---|---|---|---|---|
| ALIACCA CB Equity | -0.1836 | 0.8937 | 0.0043 | 0.2149 | 0.9224 |
| CAMACLA CB Equity | -1.2494 | 0.2814 | NA | NA | 0.0904 |
| ACCCOLP CB Equity | -0.1157 | 0.9329 | 0.0077 | 0.0230 | 0.9362 |
| ANACION CB Equity | -0.2016 | 0.8845 | 0.0070 | 0.0001 | 0.9664 |
| FGDINRV CB Equity | -0.1236 | 0.9284 | 0.0070 | 0.0071 | 0.9367 |
| ACPPLUS CB Equity | -0.0688 | 0.9607 | 0.0044 | 0.1924 | 0.9746 |
| CAMAILA CB Equity | -1.6599 | 0.0534 | NA | NA | 0.0009 |
| HCOLSEL CB Equity | -0.1001 | 0.9422 | 0.0027 | 0.4817 | 0.8747 |
| SEGBOLI CB Equity | -0.4572 | 0.7362 | 0.0046 | 0.0036 | 0.9713 |
| FACCION CB Equity | -0.4517 | 0.7394 | -0.0052 | 0.3538 | 0.6616 |
| CAMACGA CB Equity | -1.2423 | 0.2802 | 0.0002 | 0.9720 | 0.1593 |
| FCEINDE CB Equity | -1.2902 | 0.2545 | 0.0012 | 0.6068 | 0.5593 |
Al incluir la variable dummy de pandemia, los resultados muestran que el riesgo sistemático (beta) sigue siendo el principal determinante del desempeño de los fondos de renta variable, con valores altos y R² elevados en la mayoría de los casos. Esto confirma que el comportamiento de los fondos está fuertemente ligado al mercado accionario.
El alfa continúa siendo mayoritariamente negativo, lo que indica que no hay evidencia de generación sostenida de valor ajustado por riesgo. En cuanto al efecto de la pandemia, solo algunos fondos presentan un coeficiente positivo y significativo, lo que sugiere que lograron un desempeño adicional durante ese periodo. Sin embargo, en la mayoría de los casos el efecto no es significativo, lo que implica que el impacto del COVID-19 fue principalmente absorbido por el mercado en su conjunto.
Ahora para nuestros fondos de renta fija
RF_ret$Dates <- as.Date(RF_ret$Dates)
RF_ret$D_COVID <- ifelse(RF_ret$Dates >= as.Date("2020-03-01"), 1, 0)
# ===============================
# CAPM RENTA FIJA CON DUMMY COVID
# ===============================
resultados_RF_covid <- data.frame()
for(i in 2:ncol(RF_ret)){
nombre <- colnames(RF_ret)[i]
# Excluir variables que no son fondos
if(nombre %in% c("COLTES", "Dividend Yield of Market", "COLCAP Index",
"GT10 Govt",
"D_COVID")) next
Ri <- RF_ret[[i]]
Rm <- Rm_RF
D <- RF_ret$D_COVID
datos <- data.frame(Ri, Rm, D)
datos <- na.omit(datos)
# Si hay muy pocos datos, saltar
if(nrow(datos) < 10) next
datos$Ri_exceso <- datos$Ri - Rf
datos$Rm_exceso <- datos$Rm - Rf
modelo <- lm(Ri_exceso ~ Rm_exceso + D, data = datos)
resumen <- summary(modelo)
coefs <- coef(resumen)
# Verificar si la dummy fue incluida
if("D" %in% rownames(coefs)){
gamma <- coefs["D", 1]
p_gamma <- coefs["D", 4]
} else {
gamma <- NA
p_gamma <- NA
}
resultados_RF_covid <- rbind(resultados_RF_covid,
data.frame(
Fondo = nombre,
Alfa = coefs[1,1],
Beta = coefs[2,1],
Gamma_COVID = gamma,
p_Gamma = p_gamma,
R2 = resumen$r.squared
))
}
knitr::kable(resultados_RF_covid, digits = 4, caption = "Resultados CAPM ajustado - Fondos de Renta Fija")
| Fondo | Alfa | Beta | Gamma_COVID | p_Gamma | R2 |
|---|---|---|---|---|---|
| CAMDCTA CB Equity | -0.8568 | 0.5048 | -0.0117 | 0.5714 | 0.0113 |
| RLVALBC CB Equity | -1.6924 | 0.0228 | -0.0040 | 0.5756 | 0.0031 |
| FCABBPU CB Equity | -0.3223 | 0.8129 | NA | NA | 0.1410 |
| FGLDEEM CB Equity | -0.5632 | 0.6736 | 0.0005 | 0.8521 | 0.3933 |
| ALICXCA CB Equity | -1.6452 | 0.0491 | 0.0006 | 0.3010 | 0.0850 |
| CRCCFEC CB Equity | -0.4425 | 0.7428 | NA | NA | 0.0364 |
| ALIGODB CB Equity | -1.5712 | 0.0938 | 0.0044 | 0.0011 | 0.2383 |
| ITCOPTC CB Equity | -0.1128 | 1.0078 | 0.1340 | 0.2083 | 0.0139 |
| PENSIO4 CB Equity | -1.6974 | 0.0184 | 0.0003 | 0.3617 | 0.0373 |
| ALT120A CB Equity | -1.7166 | 0.0071 | NA | NA | 0.0001 |
| FAAPPM1 CB Equity | -1.5633 | 0.0978 | 0.0018 | 0.0078 | 0.2191 |
| BBVEFEA CB Equity | -1.5940 | 0.0794 | 0.0022 | 0.0005 | 0.2092 |
| CONSOLI CB Equity | -1.5647 | 0.0968 | 0.0024 | 0.0003 | 0.2857 |
| FIDUCTA CB Equity | -1.5877 | 0.0833 | 0.0022 | 0.0006 | 0.2148 |
| DEREC26 CB Equity | -1.6435 | 0.0497 | 0.0019 | 0.0093 | 0.1971 |
| LIQBYRB CB Equity | -1.5600 | 0.0992 | 0.0021 | 0.0034 | 0.2137 |
| OMEFECF CB Equity | -1.7270 | 0.0044 | 0.0052 | 0.0100 | 0.0646 |
| FINTERES CB Equity | -1.6053 | 0.0730 | 0.0014 | 0.3190 | 0.0358 |
| ABIERCA CB Equity | -1.5843 | 0.0855 | 0.0025 | 0.0005 | 0.2268 |
| ITMMKTC CB Equity | -1.5758 | 0.0901 | 0.0025 | 0.0001 | 0.2618 |
| CAMFVG2 CB Equity | -1.4224 | 0.1765 | NA | NA | 0.3294 |
| CCAPAIS CB Equity | -1.5506 | 0.1046 | 0.0021 | 0.0007 | 0.2916 |
| PARF901 CB Equity | -1.3929 | 0.1957 | 0.0017 | 0.1500 | 0.2680 |
| FIDUEXC CB Equity | -1.5766 | 0.0897 | 0.0023 | 0.0003 | 0.2396 |
| RENTFIP CB Equity | -1.3769 | 0.2043 | 0.0002 | 0.8618 | 0.2124 |
| COVPLT1 CB Equity | -1.5515 | 0.1047 | 0.0026 | 0.0004 | 0.2606 |
| ACCIVAL CB Equity | -1.5655 | 0.0962 | 0.0021 | 0.0004 | 0.2710 |
| BBVFAMA CB Equity | -1.5076 | 0.1294 | 0.0020 | 0.0025 | 0.3344 |
Al incluir la variable dummy de pandemia en los fondos de renta fija, se observa que la mayoría presenta betas bajas, cercanas a cero, lo que confirma su reducida exposición al riesgo sistemático del mercado accionario. Además, los valores de R² son en general bajos o moderados, indicando que el mercado explica una parte limitada del comportamiento de estos fondos, como es consistente con su naturaleza conservadora.
El alfa es negativo en prácticamente todos los casos, lo que sugiere ausencia de generación de retornos anormales positivos ajustados por riesgo. En cuanto al efecto de la pandemia, varios fondos presentan un coeficiente Gamma_COVID positivo y estadísticamente significativo, lo que indica que durante ese periodo algunos fondos de renta fija tuvieron un rendimiento adicional promedio. Sin embargo, el impacto no fue generalizado, sino específico a ciertos portafolios.
En conjunto, los resultados reflejan que el mercado de renta fija colombiano es menos sensible a choques sistemáticos y que la pandemia tuvo efectos diferenciados, pero limitados, sobre su desempeño.