Resultados
Buscando entender en su totalidad y explorar a profundidad el modelo
CAPM, realizaremos el analisis de un portafolio de inversión. Como
equipo decidimos en las acciónes de BIMBO, FIBRA DANHOS, COCACOLA FEMSA,
CEMEX y GRUPO CARSO, utilizando unicamente empresas nacionales. Nuestro
críterio de selección fue utilizar empresas que son nombres importantes
en diferentes mercados, empresas que el público en general haya
escuchado de ellas. Esto con el proposito de simular simplemente un
portafolio que no fue analizado a profundidad con modelos de asignación
de fondos, usando unicamente empresas que se pueden llegar a escuchar en
el día a día. Por esta misma razón, decidimos invertir en 50 acciones de
cada una, sin tomar en cuenta su costo ni rendimientos anteriores, para
simular un conocimiento base en temas de educación financiera. Lo que
buscamos sacar de esta tarea es ver que tan redituable sería crear un
portafolio con los críterios anteriormente mencionados, sin utilizar
toda la información que está disponible en el mercado. En diversas
clases de información financiera y mercados, se nos ha dicho que tomar
decisiones sin tomar en cuenta toda la informacion disponible es una
mala desicion, pero es esto cierto? Nuestros resultados nos dicen que
mientras no es la mejor decisión, puesto que comparando con nuestros
compañeros hay portafolios que dieron mayores rendimientos, nuestro
portafolio aún asi fue más redituable que invertir en el IPC.
El riesgo total del portafolio es de 35.291%, de los cuales se
atribuye 21.954% al riesgo sistematico y 13.336% al riesgo no
sistematico. El portafolio tiene una beta de 0.88117 y un alpha de
0.006.
Con una beta de 0.88117, el portafolio es menos volátil que el
mercado. Esto significa que está algo protegido en periodos de alta
volatilidad, moviéndose menos que el mercado general en términos
porcentuales.
Con un alpha de 0.006, el portafolio ha logrado generar un
rendimiento superior al esperado para su nivel de riesgo.
A continuación encontrará el código y procesos llevados a cabo para
encontrar los resultados anteriormente mencionados.
Código
Librerías Utilizadas
library(quantmod)
## Warning: package 'quantmod' was built under R version 4.2.3
## Loading required package: xts
## Loading required package: zoo
##
## Attaching package: 'zoo'
## The following objects are masked from 'package:base':
##
## as.Date, as.Date.numeric
## Loading required package: TTR
## Registered S3 method overwritten by 'quantmod':
## method from
## as.zoo.data.frame zoo
library(lubridate)
## Loading required package: timechange
##
## Attaching package: 'lubridate'
## The following objects are masked from 'package:base':
##
## date, intersect, setdiff, union
library(readxl)
library(xts)
Decidimos acciones, en este caso BIMBO, FIBRA DANHOS, COCACOLA
FEMSA, CEMEX y GRUPO CARSO. Creamos lista al mismo tiempo.
clave1 <- "BIMBOA.MX"
clave2 <- "DANHOS13.MX"
clave3 <- "KOF"
clave4 <- "CEMEXCPO.MX"
clave5 <- "GCARSOA1.MX"
datos <- new.env()
Descargamos los últimos 5 años de datos y asignamos las cotizaciones
de cada una cada acción a su propia constante
getSymbols(clave1 ,from=today()-(365*5),to=today(), env=datos)
## [1] "BIMBOA.MX"
getSymbols(clave2 ,from=today()-(365*5),to=today(), env=datos)
## [1] "DANHOS13.MX"
getSymbols(clave3 ,from=today()-(365*5),to=today(), env=datos)
## [1] "KOF"
getSymbols(clave4 ,from=today()-(365*5),to=today(), env=datos)
## [1] "CEMEXCPO.MX"
getSymbols(clave5 ,from=today()-(365*5),to=today(), env=datos)
## [1] "GCARSOA1.MX"
precio_1 <- datos[[clave1]][,6]
precio_2 <- datos[[clave2]][,6]
precio_3 <- datos[[clave3]][,6]
precio_4 <- datos[[clave2]][,6]
precio_5 <- datos[[clave3]][,6]
Definimos cuantas acciones de cada activo se quieren, para encontrar
el valor inicial del portafolio. Decidimos invertir en 50 acciones de
CU. El resultado es el comportamiento del precio a traves del
tiempo.
precio_portafolio <- (precio_1*50 + precio_2*50 + precio_3*50 + precio_4*50 + precio_5*50)
names(precio_portafolio) <- c("Valor_Portafolio")
head(precio_portafolio, 10)
## Valor_Portafolio
## 2019-09-30 8322.626
## 2019-10-01 8237.763
## 2019-10-02 8192.467
## 2019-10-03 8222.507
## 2019-10-04 8448.902
## 2019-10-07 8288.207
## 2019-10-08 8279.036
## 2019-10-09 8355.906
## 2019-10-10 8405.509
## 2019-10-11 8437.306
tail(precio_portafolio, 10)
## Valor_Portafolio
## 2024-09-12 14047.0
## 2024-09-13 14179.0
## 2024-09-17 14531.5
## 2024-09-18 14521.5
## 2024-09-19 14697.5
## 2024-09-20 14326.5
## 2024-09-23 14414.5
## 2024-09-24 14767.5
## 2024-09-25 14489.5
## 2024-09-26 14755.5
Descargamos el compartamiento del IPC para los mismos últimos 5
años
getSymbols("^MXX",from=today()-(365*5),to=today(),env=datos)
## [1] "MXX"
precio_ipc <- datos[["MXX"]][,6]
precio_portafolio_IPC <- (precio_ipc/5.168)
names(precio_portafolio_IPC) <- c("Valor_Portafolio")
head(precio_portafolio_IPC, 10)
## Valor_Portafolio
## 2019-09-30 8322.614
## 2019-10-01 8308.274
## 2019-10-02 8170.065
## 2019-10-03 8212.715
## 2019-10-04 8401.103
## 2019-10-07 8311.201
## 2019-10-08 8230.484
## 2019-10-09 8224.056
## 2019-10-10 8306.842
## 2019-10-11 8361.959
tail(precio_portafolio_IPC, 10)
## Valor_Portafolio
## 2024-09-12 10061.87
## 2024-09-13 10065.18
## 2024-09-17 10114.85
## 2024-09-18 10174.71
## 2024-09-19 10239.56
## 2024-09-20 10098.78
## 2024-09-23 10143.62
## 2024-09-24 10381.96
## 2024-09-25 10292.36
## 2024-09-26 10369.68
Volvemos los rendimientos diarios a mensuales tanto del portafolio
como del IPC
precio_portafolio_mensual <- to.monthly(precio_portafolio)
precio_portafolio_mensual <- precio_portafolio_mensual[,4]
precio_ipc_mensual <- to.monthly(precio_ipc)
precio_ipc_mensual <- precio_ipc_mensual[,4]
IPC VS PORTAFOLIO Gráfica en términos de rendimientos mensuales
r_portafolio <- monthlyReturn(precio_portafolio_mensual)
names(r_portafolio) <- "Portafolio"
r_ipc <- monthlyReturn(precio_ipc_mensual)
names(r_ipc) <- "IPC"
plot(merge.xts(r_portafolio, r_ipc), legend.loc = "bottom", main = "Comportamiento Mensual")

Descargamos los datos del excel
r_zero <- read_excel("tasa_cete.xlsx")
Cambiamos de porcentajes a decimales y hacemos que los rendimientos
sean mensuales
r_zero$SF43936 <- as.numeric(r_zero$SF43936)/100/12
Convertimos la fecha en serie de tiempo y cambiamos temporalidad a
meses
r_zero <- as.xts(r_zero$SF43936, order.by = r_zero$Fecha)
r_zero <- to.monthly(r_zero)[,4]
names(r_zero) <- "Cete"
Graficamos IPC VS CETES
plot(merge.xts(r_zero, r_ipc), legend.loc = "bottom", main = "Comportamiento Mensual")

Obtenemos ER del portafolio e IPC
ER_portafolio <- r_portafolio - r_zero
ER_ipc <- r_ipc - r_zero
Utilizamos CAPM
CAPM <- lm(ER_portafolio~ER_ipc)
summary(CAPM)
##
## Call:
## lm(formula = ER_portafolio ~ ER_ipc)
##
## Residuals:
## Min 1Q Median 3Q Max
## -0.067642 -0.029843 -0.003273 0.026139 0.090150
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 0.006001 0.004678 1.283 0.205
## ER_ipc 0.881172 0.089412 9.855 4.43e-14 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 0.03652 on 59 degrees of freedom
## Multiple R-squared: 0.6221, Adjusted R-squared: 0.6157
## F-statistic: 97.13 on 1 and 59 DF, p-value: 4.428e-14
Que porcentaje del riesgo total pertenece al riesgo sistematico
Resultados <- summary(CAPM)
R_Cuadrado <- Resultados$r.squared
R_Cuadrado
## [1] 0.6220989
Calculamos residuales
Resultados$sigma
## [1] 0.03651915
Calculamos el riesgo total del portafolio
RT <- (Resultados$sigma^2)/(1-R_Cuadrado)*100
RT
## [1] 0.3529093
Tabla Final
library(tibble)
tibble("Riesgo Total"=paste(format(RT*100,digits = 5),"%"),
"Riesgo Sistematico"=paste(format(R_Cuadrado*RT*100, digits = 5),"%"),
"Riesgo No Sistematico" = paste(format((Resultados$sigma^2)*10000, digits = 5),"%"),
"Beta" = format(Resultados$coefficients[2], digits = 5),
"Alpha" = format(Resultados$coefficients[1], digits = 5)
)
## # A tibble: 1 × 5
## `Riesgo Total` `Riesgo Sistematico` `Riesgo No Sistematico` Beta Alpha
## <chr> <chr> <chr> <chr> <chr>
## 1 35.291 % 21.954 % 13.336 % 0.88117 0.0060013
Analisis
El riesgo total del activo es de 35.291%, de los cuales se atribuye
21.954% al riesgo sistematico y 13.336% al riesgo no sistematico. El
portafolio tiene una beta de 0.88117 y un alpha de 0.006.
Con una beta de 0.88117, el portafolio es menos volátil que el
mercado. Esto significa que está algo protegido en periodos de alta
volatilidad, moviéndose menos que el mercado general en términos
porcentuales.
Con un alpha de 0.006, el portafolio ha logrado generar un
rendimiento superior al esperado para su nivel de riesgo.