Elaborado por: Lic. Roger Andy Miranda Tarija
Economista y Analista de datos
▶️ YouTube
🎵 TikTok
Los datos de sección cruzada (\(i\)) corresponden a aquellos que son tomados en un tiempo dado y a una población dada: sujetos, empresas, gobiernos, países, entre otros, etc.; también son llamados datos de corte transversal. Para ello y a partir de Moré (2005), se realizará la réplica de una estimación econométrica con datos para 34 fondos de inversión, donde se considerarán dos variables: la dependiente corresponde al Retorno (\(\hat{R}_i\)), medido como el rendimiento promedio del período; y una variable explicativa medida por el riesgo, el cual está calculado mediante la desviación estándar del rendimiento de cada fondo respectivo (\(\sigma_i\)). Este tipo de modelos se constituye en un análisis de regresión simple toda vez que únicamente incluye una sola variable independiente. En consecuencia, se desea estimar el siguiente modelo:
\[\hat{R}_i = \hat{\alpha}_0 + \hat{\alpha}_1 \sigma_i + \hat{\epsilon}_i \quad \forall i = 1, 2, ..., 34 \tag{1}\]
Hipótesis: a mayor riesgo, mayor retorno (rendimiento); \(\hat{\alpha}_1 > 0\) y corresponde al parámetro pendiente; mientras \(\hat{\alpha}_0\) corresponde a la constante o intercepto.
Se utilizará la base de datos en Excel con el nombre de: data_riesgo_retorno.xlsx, con la importación respectiva desde la ubicación del archivo y se le asignará el nombre de “datos”.
Copiar la dirección del Excel y reemplazar en la ruta de la lectura de “read_excel()” para la parte de importación de los datos; también al momento de copiar cambiar “\” por “/”.
# 1. Importar datos
# install.packages("readxl") # Instalar la paqueteria si no detecta library()
library(readxl)
# Ruta corregida con slashes "/"
datos <- read_excel("C:/Users/LENOVO/Downloads/Relación Riesgo y Rendimiento/data_riesgo_retorno.xlsx")
names(datos)## [1] "Retorno" "Riesgo"
## # A tibble: 15 × 2
## Retorno Riesgo
## <dbl> <dbl>
## 1 15.6 14
## 2 9 8.2
## 3 10.5 12.5
## 4 11 15.3
## 5 12.9 14.6
## 6 13.4 11.1
## 7 14.8 15.8
## 8 15.7 18.3
## 9 11.9 12.7
## 10 14.3 20.4
## 11 14.3 14.9
## 12 11.5 10.9
## 13 14.2 18.2
## 14 14.6 17.7
## 15 16 22.5
La función attach() perimte adjuntar la base de datos al lenguaje de programación; mientras la función names() muestra el nombre de las variables; finalmente, la función head() muestra los primeros datos.
De forma seguida instalamos las Paqueterias y librerías utilizadas en RStudio, de forma inicial con install.packages(“…”), tanto para análisis estadístico como para análisis econométrico.
Nota: Verificar antes con library() para evitar volver a instalar nuevamente la paqueteria, en caso de que no este instalado eliminar “#” antes para habilitar install.packages().
#2. Instalacion de paqueterias
#2.A Paqueterma y librerma estadmstica
# install.packages("psych")
library(psych)
#2.B Paquetermas y librermas para analisis economitrico
# install.packages("lmtest") #<-Pruebas de especificacisn para modelos de regresisn lineal
# install.packages("PerformanceAnalytics")# Econometric tools for performance and risk analysis
# install.packages("tseries") #<-Para series de tiempo
# install.packages("car") #<-acompaqante de funciones de regresisn
library(lmtest)
library(PerformanceAnalytics)
library(tseries)
library(car)Cabe recalcar que es normal que las librarias presentes algunos mensajes adicionales al habilitar la paqueteria.
De forma seguida, un procedimiento usual es realizar un gráfico de diagrama de dispersión entre las variables, con elipses entre el 50% y 90% de las observaciones. Asimismo, se realiza un análisis de correlación para variables Retorno y Riesgo respectivamente.
# Analisis de los datos
# Correlaciones, diagramas de dispersion y graficos
scatterplot(Retorno~Riesgo, regLine=TRUE, smooth=FALSE, boxplots='xy',
ellipse=list(levels=c(.5, .9)), xlab="Riesgo", ylab="Retorno",
main="GRÁFICA 1: DIAGRAMA DE DISPERSION \nRiesgo & Retorno")En la gráfica 1, se puede apreciar la relación directa entre el riesgo y el retorno. El circulo más oscuro representa la concentración del 50% de los datos, mientras el circulo más grande comprende el 90% de las observaciones.
## Retorno Riesgo
## Retorno 1.0000000 0.7244311
## Riesgo 0.7244311 1.0000000
# Diagrama de correlacion
chart.Correlation(datos[1:2],
main = "GRÁFICA 2: ANÁLISIS DE CORRELACIÓN")Acorde a la gráfica 2, existe una asociación lineal
positiva, de grado fuerte y estadisticamente significativa entre el
riesgo y el entorno: +1% de variación del riesgo, se
relaciona directamente con +0.72% de variación en el
retorno. Acorde a Mejía (2013, Pg. 18), la correlación
(| r > 0.70 |) se considera como una asociación
fuerte; (| r < 0.50 |) se considera una relación
débil y moderada en niveles intermedios (| 0.50 < r < 0.70
|)
Veamos un poco mas de los datos por medio de los 4 momentos estadisticos:
## vars n mean sd median trimmed mad min max range skew kurtosis
## Retorno 1 34 13.73 2.5 14.00 13.61 3.34 9.0 18.6 9.6 0.22 -0.92
## Riesgo 2 34 16.06 4.3 15.85 16.08 5.11 8.2 24.5 16.3 -0.02 -1.11
## se
## Retorno 0.43
## Riesgo 0.74
En función del comando describe() nos representa los estadísticos descriptivos como los valores de tendencia central del riesgo exceden a los valores centrales del retorno [momento 1], y a la vez presentan mayor dispersión y amplitud [momento 2, dispersión]; el retorno presenta un sesgo positivo y el riesgo una asimetria negativa (menor cantidad de observaciones por debajo de su media, sesgo negativo) [momento 3], mientras que ambos casos, la curtosis es platicúrtica: con pesadez en las colas, valores positivos y negativos en el retorno y valores con bajo y alto riesgo respectivamente [momento 4].
library(ggplot2)
library(patchwork)
library(ggthemes)
# Histograma y Boxplot de Retorno
p1 <- ggplot(data = datos, aes(x = Retorno)) +
geom_histogram(bins = 10, color = "black", fill = "#228B22") +
labs(title = "Histograma del Retorno", x = "Retorno", y = "Frecuencia") +
theme_calc()
p2 <- ggplot(data = datos, aes(y = Retorno)) +
geom_boxplot(fill = "#90EE90", color = "black", outlier.colour = "red") +
labs(title = "Diagrama de Caja del Retorno",
y = "Retorno") +
theme_calc() +
theme(axis.text.x = element_blank(), axis.ticks.x = element_blank())
# Visualizacion
p1 | p2## Error : The fig.showtext code chunk option must be TRUE
Posteriormente, otro análisis que se hace para la estadística descriptiva se da por medio del histograma de barras donde se nos presenta la frecuencia de los datos del Retorno donde por medio de la presentación nos da una forma acampanada, mismo que se debe constractar por medio de una prueba de Jarque-Bera o Shapiro Wilk.
Por otro lado, la representación de los boxplot o diagrama de cajas nos indica el valor minimo, el 1er cuantil (25%), la mendiana (50%), el 3er cuantil (75%) y el valor máximo.
p1 <- ggplot(data = datos, aes(x = Riesgo)) +
geom_histogram(bins = 10, color = "black", fill = "blue") +
labs(title = "Histograma del Riesgo", x = "Riesgo", y = "Frecuencia") +
theme_calc()
p2 <- ggplot(data = datos, aes(y = Riesgo)) +
geom_boxplot(fill = "lightblue", color = "black", outlier.colour = "red") +
labs(title = "Diagrama de Caja del Riesgo",
y = "Riesgo") +
theme_calc() +
theme(axis.text.x = element_blank(), axis.ticks.x = element_blank())
# Visualizacion
p1 | p2## Error : The fig.showtext code chunk option must be TRUE
En el caso de la variable Riesgo se presenta por medio del histograma de barras donde se nos presenta la frecuencia de datos del Riesgo donde por medio de la presentación nos da una forma acampanada, mismo que se debe constractar por medio de una prueba de Jarque-Bera o Shapiro Wilk.
Por otro lado, la representación de los boxplot o diagrama de cajas nos indica el valor minimo, el 1er cuantil (25%), la mendiana (50%), el 3er cuantil (75%) y el valor máximo.
## [1] 18.22764
## 10% 20% 30% 40% 50% 60% 70% 80% 90%
## 11.00 11.30 11.49 13.00 14.00 14.30 14.87 15.82 16.50
## 10% 20% 30% 40% 50% 60% 70% 80% 90%
## 10.93 11.98 13.06 14.92 15.85 18.02 18.45 20.10 21.43
En cuanto al retorno el percentil 10% más bajo del retorno equivale 11%; mientras el percentil más alto el 16.5%; el riesgo se mueve un rango de percentiles del 10 al 21%.
## 25% 50% 75%
## 11.400 14.000 15.575
## 25% 50% 75%
## 12.550 15.850 19.575
Los cuartiles se pueden interpretar como los tres escenarios para el riesgo y rendimiento respectivamente:
Pesimista para el retorno y optimista para el riesgo (cuartil inferior, 25%).
Esperado [cuartil medio (mediana), 50%]
Optimista para el retorno y pesimista para el riesgo (cuartil superior, 75%).
# Umbral menores de 10 y superiores de 15 en el Retorno
length(Retorno[Retorno < 10]) / length(Retorno) * 100## [1] 2.941176
## [1] 29.41176
# Umbral menores de 10 y superiores de 15 en el Riesgo
length(Riesgo[Riesgo < 10]) / length(Riesgo) * 100## [1] 8.823529
## [1] 55.88235
En esta sección se realiza la estimación de los betas del modelo de regresión lineal por medio del método matricial, usando la siguiente expresión algebraica:
# Regresion manual y matricial
X <- cbind(1,Riesgo) # Matriz de X
Y <- cbind(Retorno) # Matriz de Y
head(X)## Riesgo
## [1,] 1 14.0
## [2,] 1 8.2
## [3,] 1 12.5
## [4,] 1 15.3
## [5,] 1 14.6
## [6,] 1 11.1
## Retorno
## [1,] 15.6
## [2,] 9.0
## [3,] 10.5
## [4,] 11.0
## [5,] 12.9
## [6,] 13.4
## Riesgo
## 34.0 546.10
## Riesgo 546.1 9380.43
## [,1] [,2]
## [1,] 0.45295496 -0.026369655
## [2,] -0.02636966 0.001641766
## Retorno
## 466.80
## Riesgo 7754.66
## Retorno
## [1,] 6.9516658
## [2,] 0.4219802
## Retorno
## [1,] 12.85939
## [2,] 10.41190
## [3,] 12.22642
## [4,] 13.40796
## [5,] 13.11258
## [6,] 11.63565
## [7,] 13.61895
## [8,] 14.67390
## [9,] 12.31081
## [10,] 15.56006
## [11,] 13.23917
## [12,] 11.55125
## [13,] 14.63170
## [14,] 14.42071
## [15,] 16.44622
## [16,] 16.23523
## [17,] 15.68666
## [18,] 14.58951
## [19,] 12.47961
## [20,] 17.29018
## [21,] 15.72885
## [22,] 11.80444
## [23,] 10.91828
## [24,] 15.30687
## [25,] 16.10864
## [26,] 14.92709
## [27,] 14.04093
## [28,] 10.83388
## [29,] 13.28137
## [30,] 12.14202
## [31,] 14.71610
## [32,] 15.34907
## [33,] 11.59345
## [34,] 13.66115
## Error : The fig.showtext code chunk option must be TRUE
## Retorno
## [1,] 2.74061202
## [2,] -1.41190309
## [3,] -1.72641775
## [4,] -2.40796218
## [5,] -0.21257607
## [6,] 1.76435446
## [7,] 1.18104775
## [8,] 1.02609736
## [9,] -0.41081378
## [10,] -1.26006096
## [11,] 1.06082988
## [12,] -0.05124950
## [13,] -0.43170462
## [14,] 0.17928546
## [15,] -0.44621928
## [16,] -0.73522920
## [17,] 0.81334500
## [18,] -0.48950661
## [19,] -1.07960584
## [20,] -2.79017959
## [21,] 0.67114698
## [22,] 0.49556240
## [23,] 0.08172073
## [24,] 1.19312713
## [25,] 2.49136484
## [26,] 3.37290927
## [27,] 4.45906759
## [28,] 0.56611676
## [29,] -2.18136813
## [30,] -1.44202172
## [31,] -3.41610065
## [32,] -1.44907088
## [33,] -0.29344752
## [34,] 0.13884973
## Error : The fig.showtext code chunk option must be TRUE
## vars n mean sd median trimmed mad min max range skew kurtosis se
## X1 1 34 0 1.73 -0.13 -0.07 1.69 -3.42 4.46 7.88 0.41 0.04 0.3
## [1] 5.175373
## [1] -3.416101
## [1] 4.459068
H0: Los errores siguen una distribución Normal (0,1)
H1: Los errores NO siguen una distribución Normal (0,1)
##
## Jarque Bera Test
##
## data: error
## X-squared = 1.1092, df = 2, p-value = 0.5743
##
## Shapiro-Wilk normality test
##
## data: error
## W = 0.98121, p-value = 0.8102
## Error : The fig.showtext code chunk option must be TRUE
La prueba Jarque - Bera (J-B) no rechaza la hipótesis nula de normalidad en los residuos, al igual que la prueba de Shapiro - Wilk (Sh-W) tampoco no rechaza la hipótesis nula de normalidad (Prob. > 5 y 10% respectivamente).
## [1] 13.72941
## [1] 108.4608
## [1] 0.5248004
## [1] 0.5248004
## [1] 34
## [1] 0.5099504
Por otra parte, el riesgo explica al retorno al 51% (ajustando después de los grados de libertad).
## [1] 3.069055
## [,1] [,2]
## [1,] 1.39014389 -0.08092993
## [2,] -0.08092993 0.00503867
## [1] 1.179044
## [1] 0.07098359
## Retorno
## [1,] 6.9516658
## [2,] 0.4219802
## Retorno
## 5.896021
## Retorno
## 5.944756
## [1] 1.693889 2.036933 2.738481
## Retorno
## 1.466934e-06
## Retorno
## 1.273716e-06
##
## Call:
## lm(formula = Retorno ~ Riesgo)
##
## Residuals:
## Min 1Q Median 3Q Max
## -3.4161 -1.2149 -0.1319 0.9729 4.4591
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 6.95167 1.17904 5.896 1.47e-06 ***
## Riesgo 0.42198 0.07098 5.945 1.27e-06 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 1.752 on 32 degrees of freedom
## Multiple R-squared: 0.5248, Adjusted R-squared: 0.51
## F-statistic: 35.34 on 1 and 32 DF, p-value: 1.274e-06
##
## Jarque Bera Test
##
## data: resid
## X-squared = 1.1092, df = 2, p-value = 0.5743
##
## Shapiro-Wilk normality test
##
## data: resid
## W = 0.98121, p-value = 0.8102
En tal sentido, de acuerdo con el modelo MCO, se encuentra evidencia empirica al nivel de significancia estadistica del 0.01, por tanto, a mayor riesgo, existe mayor retorno: por cada 1% de incremento en el riesgo financiero (variabilidad del rendimiento), el retorno se incrementa en 0.42% (\(\hat{\alpha}_1\)). Por otra parte, si el riesgo es cero, el rendimiento libre de riesgo equivale al 6.95% (\(\hat{\alpha}_0\)); es decir ambos parámetros son estadísticamente significativos.