En el fichero se encuentran 2059 cotizaciones en bolsa diarias de acciones de Endesa. Recuperamos sus valores en el marco de datos mediante el comando
###comenzar aqui
library(readr)
library(tidyverse)
## ── Attaching core tidyverse packages ──────────────────────── tidyverse 2.0.0 ──
## ✔ dplyr 1.1.4 ✔ purrr 1.0.2
## ✔ forcats 1.0.0 ✔ stringr 1.5.1
## ✔ ggplot2 3.4.4 ✔ tibble 3.2.1
## ✔ lubridate 1.9.3 ✔ tidyr 1.3.0
## ── Conflicts ────────────────────────────────────────── tidyverse_conflicts() ──
## ✖ dplyr::filter() masks stats::filter()
## ✖ dplyr::lag() masks stats::lag()
## ℹ Use the conflicted package (<http://conflicted.r-lib.org/>) to force all conflicts to become errors
Endesa <- read_csv("C:/Users/Víctor/OneDrive - UNIVERSIDAD DE MURCIA/2º CID/Fundamentos-Inferencia/data/Endesa.txt",
col_names = FALSE)
## Rows: 2059 Columns: 1
## ── Column specification ────────────────────────────────────────────────────────
## Delimiter: ","
## dbl (1): X1
##
## ℹ Use `spec()` to retrieve the full column specification for this data.
## ℹ Specify the column types or set `show_col_types = FALSE` to quiet this message.
###terminar aqui
Consideramos los datos de un año, aproximadamente, y los pasamos a un vector de datos, tomando
###comenzar aqui
endesa <- unlist(c(Endesa[1:240, 1]))
###terminar aqui
Estamos interesados en estudiar los retornos semanales. Es decir, los valores \[ \frac{X_t-X_{t-5}}{X_{t-5}}, \] donde \(X_t\) es el valor de cotización en bolsa de una empresa en el día \(t\).
Estos retornos los podemos obtener mediante la siguiente función general, que podremos aplicar posteriormente a otros datos,
###comenzar aqui
weekly.return <- function(X=X)
{
ret <- NULL
n = length(X) - 5
for (k in 1:n) {
ret <- c(ret, (X[k] - X[k+5])/X[k+5])
}
ret
}
###terminar aqui
Obtenemos entonces los retornos semanales de Endesa mediante:
###comenzar aqui
return.endesa <- weekly.return(endesa)
###terminar aqui
Mediante el paquete podemos realizar un análisis más completo del ajuste de un modelo. Veamos el caso de una distribución normal.
Para ello creamos el siguiente objeto mediante
###comenzar aqui
library(fitdistrplus)
## Loading required package: MASS
##
## Attaching package: 'MASS'
## The following object is masked from 'package:dplyr':
##
## select
## Loading required package: survival
ajuste_endnorm <- fitdist(return.endesa, "norm")
###terminar aqui
donde se guarda el análisis del ajuste a una distribución normal. Veamos que podemos recuperar de este objeto.
Mediante
###comenzar aqui
summary(ajuste_endnorm)
## Fitting of the distribution ' norm ' by maximum likelihood
## Parameters :
## estimate Std. Error
## mean -0.004923045 0.002219577
## sd 0.034025470 0.001563382
## Loglikelihood: 461.0012 AIC: -918.0025 BIC: -911.0833
## Correlation matrix:
## mean sd
## mean 1 0
## sd 0 1
mean<-unlist(ajuste_endnorm['estimate'])[1]
sd<-unlist(ajuste_endnorm['estimate'])[2]
###terminar aqui
obtenemos la estimación de los parámetros del modelo en cuestión. En nuestro caso, especificamos en el último argumento para especificar que se trata de la distribución normal.
De los resultados señalamos las estimaciones de los parámetros:
En la columna tenemos las estimaciones de la media () con valor -0.004923 y de la desviación típica () con valor 0.0340255. Hay que señalar que tanto en este modelo como para cualquier otro modelo la estimación se realiza mediante el método de máxima verosimilitud.
Mediante la opción
###comenzar aqui
gofstat(ajuste_endnorm)$chisq
## [1] 8.199773
###terminar aqui
obtenemos el estadístico de contraste del test de bondad de ajuste chi-cuadrado, donde la hipótesis nula es que los datos provienen del modelo especificado, en este caso el modelo de la distribución normal, y la hipótesis alternativa es que no sigue el modelo.
El p-valor se obtiene mediante
###comenzar aqui
gofstat(ajuste_endnorm)$chisqpvalue
## [1] 0.8303461
###terminar aqui
que en este caso es un valor bastante alto.
También podemos realizar una análisis gráfico que incluye la comparación de distintas funciones de los datos con las teóricas del modelo considerado, mediante
###comenzar aqui
plot(ajuste_endnorm)
###terminar aqui
Así tenemos el histograma de frecuencias con la densidad del modelo considerado y la función de distribución empírica con la teórica. De estos gráficos destacamos la gráfica Q-Q donde tenemos los pares \((F^{-1}(p),F^{-1}_n(p))\) y la gráfica P-P donde tenemos los pares \((F(x),F_n(x))\) siendo \(F\) y \(F_n\) la función de distribución teórica del modelo considerado y \(F_n\) la función de distribución empírica. En ambos casos si el ajuste es bueno los puntos anteriores deberían estar alineados sobre una recta.
En este caso los gráficos Q-Q y P-P parecen ajustarse muy bien con el modelo de la distribución normal, hecho que queda reflejado en el p-valor, que toma un valor alto.
Consideramos ahora otro modelo para ver si puede ajustar mejor la distribución de los retornos. En este caso vamos a considerar una distribución t de Student generalizada. Veamos primero como se define este modelo.
Este modelo se obtiene como una transformación de la t de Student usual en la forma \(X=\mu + \sqrt{\frac{\nu - 2}{\nu}}\sigma Y,\) donde \(Y\sim t_{\nu}\), y tiene soporte en todo \(\mathbb R\). Se denota por \(X\sim t_{\alpha}(\mu,\sigma^2)\). Y tiene como media y varianza los valores \(E[X]=\mu\) si \(\nu >1\) y \(Var[X]=\sigma ^2\) si \(\nu >2\).
En algunos modelos, como el de la t de Student generalizada, el comando necesita unos valores iniciales para empezar la búsqueda de las estimaciones máximo verosímiles de los parámetros. Como forma de asegurarnos un buen punto de arranque podemos optar por hacer una estimación de máxima verosimilitud mediante el comando alternativo dentro del paquete . En concreto mediante
###comenzar aqui
library(MASS)
fitdistr(return.endesa, "t")
## m s df
## -0.004852511 0.032951699 27.820524707
## ( 0.002223765) ( 0.001874942) (26.448390949)
m<-unlist(fitdistr(return.endesa, "t"))[1]
s<-unlist(fitdistr(return.endesa, "t"))[2]
df<-unlist(fitdistr(return.endesa, "t"))[3]
###terminar aqui
obtenemos los estimadores de máxima verosimilitud de \(\mu\), \(\sigma\sqrt{(\nu-2)/\nu}\) y \(\nu\) como -0.0048525, 0.0329517 y 27.8205247, respectivamente. Hay que observar que aunque en este caso hemos indicado el modelo , este se refiere, dentro del paquete , a una reparametrización de la t de Student generalizada. Por ello hemos de recuperar el valor estimado de \(\sigma\) como \(\hat{\sigma}=0.032951699\sqrt{\frac{27.820524707}{27.820524707-2}}=0.03420408197\).
El modelo tal y como los hemos presentado está dentro del paquete .
Una vez visto esto podemos pasar al análisis de los datos incluyendo, en la opción , las estimaciones anteriores. En concreto utilizamos el comando:
###comenzar aqui
library(fGarch)
## NOTE: Packages 'fBasics', 'timeDate', and 'timeSeries' are no longer
## attached to the search() path when 'fGarch' is attached.
##
## If needed attach them yourself in your R script by e.g.,
## require("timeSeries")
###terminar aqui
Como estimaciones obtenemos
###comenzar aqui
ajuste_endt <- fitdist(return.endesa, "std", start = list(mean = -0.004852511,
sd = 0.03420408197,
nu = 27.820524707))
summary(ajuste_endt)
## Fitting of the distribution ' std ' by maximum likelihood
## Parameters :
## estimate Std. Error
## mean -4.918415e-03 NA
## sd 3.402331e-02 NA
## nu 5.405647e+05 NA
## Loglikelihood: 461.0012 AIC: -916.0024 BIC: -905.6237
## Correlation matrix:
## [1] NA
###terminar aqui
En este caso el contraste chi-cuadrado nos devuelve los siguientes valores para el estadístico y el p-valor
###comenzar aqui
gofstat(ajuste_endt)$chisq
## [1] 8.201265
gofstat(ajuste_endt)$chisqpvalue
## [1] 0.769211
###terminar aqui
que en este caso nos muestra también alto grado de compatibilidad entre los datos y la hipótesis nula de que los datos siguen una distribución t-Student generalizada.
En el análisis gráfico obtenemos
###comenzar aqui
plot(ajuste_endt)
###terminar aqui
En este caso los gráficos Q-Q y P-P señalan un ajuste muy bueno de los datos, hecho que ha sido confirmado por el contraste chi-cuadrado.
En este ejemplo tenemos dos modelos que permiten ajustar los datos que tenemos, aunque parece que uno es mejor que otro. En estos casos en los que tenemos dos o más modelos de distribuciones paramétricas que dan un buen ajuste a los datos, hemos de utilizar información adicional para decidir con que modelo quedarnos. Para ello podemos utilizar dos medidas para discriminar que modelo es el mejor.
La primera es el coeficiente de información de Akaike definido como \[ AIC=2k - 2 \ln L(\mathbf x, \hat \theta), \] siendo \(k\) el número de parámetros a estimar del modelo y \(\hat \theta\) el EMV del vector paramétrico \(\theta\). Aquel modelo con el valor más pequeño para \(AIC\) es el que mejor se ajusta.
La otra medida se conoce criterio de información bayesiano que viene dado por \[ BIC = k \ln n - 2 \ln L(\mathbf x, \hat \theta).\]
En este caso se trata de seleccionar el modelo con un menor valor de \(BIC\).
Los valores anteriores se facilitan cuando usamos la función como los valores y .
Los resultados para el ajuste a la distribución normal son:
AIC: -918.0025
BIC: -911.0833
Los resultados para el ajuste a la distribución t-Student generalizada son:
AIC: -916.0024
BIC: -905.6237
Observamos que en el caso de la normal estas medidas son menores que en el caso de la t-Student generalizada, lo que apoya la elección del modelo de la normal.
A continuación, haremos una estimación de la mediana, calcularemos el error de la estimación y un intervalo de confianza al 90% para la mediana utilizando la metodología de remuestreo bootstrap.
Obtenemos una estimación de la mediana de la población a partir de la mediana de la muestra:
str_glue("El error estándar estimado de la mediana muestral es: {summary(endesa)[3]}")
## El error estándar estimado de la mediana muestral es: 19.675
set.seed(314159)
# Completar aquí
lista_muestras_bootstrap <- replicate(
1000,
sample(endesa, replace = TRUE)
)
# Fin Completar aquí
head(lista_muestras_bootstrap[[1]])
## [1] 18.95
medianas_bootstrap que contenga
las medianas de las muestras bootstrap que hemos simulado# Completar aquí
medianas_bootstrap <- lista_muestras_bootstrap |>
map_dbl(median)
# Fin Completar aquí
head(medianas_bootstrap)
## [1] 18.95 22.06 18.66 18.95 21.32 19.77
se_mediana <- sd(medianas_bootstrap)
# Fin Completar aquí
str_glue("El error estándar estimado de la mediana muestral es: {se_mediana}")
## El error estándar estimado de la mediana muestral es: 1.61934711660449
# Completar aquí
tibble(mediana = medianas_bootstrap) |>
ggplot(aes(x = mediana)) +
geom_histogram(fill = "lightblue")
## `stat_bin()` using `bins = 30`. Pick better value with `binwidth`.
# Completar aquí
str_glue("Un IC al 90% aproximado para la mediana poblacional basado en percentiles bootstrap es:\n [{round(quantile(medianas_bootstrap, 0.05), 3)}, {round(quantile(medianas_bootstrap, 0.95), 3)}]")
## Un IC al 90% aproximado para la mediana poblacional basado en percentiles bootstrap es:
## [17.88, 22.85]
# Fin Completar aquí
En el fichero se encuentran 2059 cotizaciones en bolsa diarias de acciones de BBVA. Recuperamos sus valores en el marco de datos mediante el comando
###comenzar aqui library(readr)
BBVA <- read_csv("C:/Users/Víctor/OneDrive - UNIVERSIDAD DE MURCIA/2º CID/Fundamentos-Inferencia/data/BBVA.txt",
col_names = FALSE)
## Rows: 2059 Columns: 1
## ── Column specification ────────────────────────────────────────────────────────
## Delimiter: ","
## dbl (1): X1
##
## ℹ Use `spec()` to retrieve the full column specification for this data.
## ℹ Specify the column types or set `show_col_types = FALSE` to quiet this message.
###terminar aqui
Consideramos los datos de un año, aproximadamente, y los pasamos a un vector de datos, tomando
###comenzar aqui
bbva <- unlist(c(BBVA[1:240, 1]))
###terminar aqui
Estamos interesados en estudiar los retornos semanales. Es decir, los valores \[ \frac{X_t-X_{t-5}}{X_{t-5}}, \] donde \(X_t\) es el valor de cotización en bolsa de una empresa en el día \(t\).
Estos retornos los podemos obtener mediante la anterior función
weekly.return.Obtenemos entonces los retornos semanales de
Endesa mediante:
###comenzar aqui
return.bbva <- weekly.return(bbva)
###terminar aqui
Mediante el paquete podemos realizar un análisis más completo del ajuste de un modelo. Veamos el caso de una distribución normal.
Para ello creamos el objeto mediante
###comenzar aqui
ajuste_bbnorm <- fitdist(return.bbva, "norm")
###terminar aqui
donde se guarda el análisis del ajuste a una distribución normal. Veamos que podemos recuperar de este objeto.
Mediante
###comenzar aqui
summary(ajuste_bbnorm)
## Fitting of the distribution ' norm ' by maximum likelihood
## Parameters :
## estimate Std. Error
## mean -0.008178475 0.004066107
## sd 0.062332236 0.002871842
## Loglikelihood: 318.7394 AIC: -633.4789 BIC: -626.5597
## Correlation matrix:
## mean sd
## mean 1.000000e+00 -8.297162e-14
## sd -8.297162e-14 1.000000e+00
mean<-unlist(ajuste_bbnorm['estimate'])[1]
sd<-unlist(ajuste_bbnorm['estimate'])[2]
###terminar aqui
obtenemos la estimación de los parámetros del modelo en cuestión. En nuestro caso, especificamos en el último argumento para especificar que se trata de la distribución normal. Otros modelos se especifican teniendo en cuenta la sintaxis de los modelos de distribuciones de .
De los resultados señalamos las estimaciones de los parámetros:
En la columna tenemos las estimaciones de la media () con valor -0.0081785 y de la desviación típica () con valor 0.0623322. Hay que señalar que tanto en este modelo como para cualquier otro modelo la estimación se realiza mediante el método de máxima verosimilitud.
Mediante la opción
###comenzar aqui
gofstat(ajuste_bbnorm)$chisq
## [1] 18.42659
###terminar aqui
obtenemos el estadístico de contraste del test de bondad de ajuste chi-cuadrado, donde la hipótesis nula es que los datos provienen del modelo especificado, en este caso el modelo de la distribución normal, y la hipótesis alternativa es que no sigue el modelo.
El p-valor se obtiene mediante
###comenzar aqui
gofstat(ajuste_bbnorm)$chisqpvalue
## [1] 0.1419835
###terminar aqui
que en este caso es un valor bajo, aunque no lo suficiente como para rechazar la hipótesis nula.
También podemos realizar una análisis gráfico que incluye la comparación de distintas funciones de los datos con las teóricas del modelo considerado, mediante
###comenzar aqui
plot(ajuste_bbnorm)
###terminar aqui
En este caso los gráficos Q-Q y P-P parecen señalar alguna diferencia con el modelo de la distribución normal, hecho que queda reflejado en que el p-valor toma un valor bajo.
Consideramos ahora otro modelo para ver si puede ajustar mejor la distribución de los retornos. En este caso vamos a considerar una distribución t de Student generalizada.
Para asegurarnos un buen punto de arranque podemos optar por hacer una estimación de máxima verosimilitud mediante el comando alternativo dentro del paquete . En concreto mediante
###comenzar aqui library(MASS)
fitdistr(return.bbva, "t")
## m s df
## -0.009213930 0.057623815 11.905319348
## ( 0.004072628) ( 0.003736127) ( 6.557204213)
m<-unlist(fitdistr(return.bbva, "t"))[1]
s<-unlist(fitdistr(return.bbva, "t"))[2]
df<-unlist(fitdistr(return.bbva, "t"))[3]
###terminar aqui
obtenemos los estimadores de máxima verosimilitud de \(\mu\), \(\sigma\sqrt{(\nu-2)/\nu}\) y \(\nu\) como -0.0092139, 0.0576238 y 11.9053193, respectivamente. Hay que observar que aunque en este caso hemos indicado el modelo , este se refiere, dentro del paquete , a una reparametrización de la t de Student generalizada. Por ello hemos de recuperar el valor estimado de \(\sigma\) como \(\hat{\sigma}=0.057623815\sqrt{\frac{11.905319348}{11.905319348-2}}=0.06317398767\).
El modelo tal y como los hemos presentado está dentro del paquete .
Una vez visto esto podemos pasar al análisis de los datos incluyendo, en la opción , las estimaciones anteriores. Como estimaciones obtenemos
###comenzar aqui
ajuste_bbt <- fitdist(return.bbva, "std", start = list(mean = -0.009213930,
sd = 0.06317398767,
nu = 11.905319348))
summary(ajuste_bbt)
## Fitting of the distribution ' std ' by maximum likelihood
## Parameters :
## estimate Std. Error
## mean -0.008374573 4.155449e-03
## sd 0.062334522 2.939137e-03
## nu 67.722725462 2.947787e+02
## Loglikelihood: 318.7665 AIC: -631.533 BIC: -621.1543
## Correlation matrix:
## mean sd nu
## mean 1.000000000 -0.006094169 0.20899111
## sd -0.006094169 1.000000000 -0.05099975
## nu 0.208991112 -0.050999755 1.00000000
###terminar aqui}
En este caso el contraste chi-cuadrado nos devuelve los siguientes valores para el estadístico y el p-valor
###comenzar aqui
gofstat(ajuste_bbt)$chisq
## [1] 18.13022
gofstat(ajuste_bbt)$chisqpvalue
## [1] 0.1117935
###terminar aqui
que en este caso nos muestra un menor grado de compatibilidad entre los datos y la hipótesis nula de que los datos siguen una distribución t-Student generalizada.
En el análisis gráfico obtenemos
###comenzar aqui
plot(ajuste_bbt)
###terminar aqui
En este caso los gráficos Q-Q y P-P parecen señalar que el modelo de la distribución t de Student generalizada no mejora el ajuste de los datos, hecho que ha sido confirmado por el contraste chi-cuadrado.
Para sacar conclusiones comparamos los coeficiente AIC y BIC.
Los resultados para el ajuste a la distribución normal son:
AIC: -633.4789
BIC: -626.5597
Los resultados para el ajuste a la distribución t-Student generalizada son:
AIC: -631.533
BIC: -621.1543
Observamos que en el caso de la normal estas medidas son menores que en el caso de la t-Student generalizada, lo que apoya la elección del modelo de la normal.
A continuación, haremos una estimación de la mediana, calcularemos el error de la estimación y un intervalo de confianza al 90% para la mediana utilizando la metodología de remuestreo bootstrap.
Obtenemos una estimación de la mediana de la población a partir de la mediana de la muestra:
str_glue("El error estándar estimado de la mediana muestral es: {summary(bbva)[3]}")
## El error estándar estimado de la mediana muestral es: 9.815
set.seed(314159)
# Completar aquí
lista_muestras_bootstrap <- replicate(
1000,
sample(bbva, replace = TRUE)
)
# Fin Completar aquí
head(lista_muestras_bootstrap[[1]])
## [1] 9.89
medianas_bootstrap que contenga
las medianas de las muestras bootstrap que hemos simulado# Completar aquí
medianas_bootstrap <- lista_muestras_bootstrap |>
map_dbl(median)
# Fin Completar aquí
head(medianas_bootstrap)
## [1] 9.89 11.10 8.49 9.83 10.54 9.83
se_mediana <- sd(medianas_bootstrap)
# Fin Completar aquí
str_glue("El error estándar estimado de la mediana muestral es: {se_mediana}")
## El error estándar estimado de la mediana muestral es: 1.15892203925738
# Completar aquí
tibble(mediana = medianas_bootstrap) |>
ggplot(aes(x = mediana)) +
geom_histogram(fill = "lightblue")
## `stat_bin()` using `bins = 30`. Pick better value with `binwidth`.
# Completar aquí
str_glue("Un IC al 90% aproximado para la mediana poblacional basado en percentiles bootstrap es:\n [{round(quantile(medianas_bootstrap, 0.05), 3)}, {round(quantile(medianas_bootstrap, 0.95), 3)}]")
## Un IC al 90% aproximado para la mediana poblacional basado en percentiles bootstrap es:
## [7.76, 11.31]
# Fin Completar aquí
En el fichero se encuentran 2059 cotizaciones en bolsa diarias de acciones de Santander. Recuperamos sus valores en el marco de datos mediante el comando
###comenzar aqui
Santander <- read_csv("C:/Users/Víctor/OneDrive - UNIVERSIDAD DE MURCIA/2º CID/Fundamentos-Inferencia/data/Santander.txt",
col_names = FALSE)
## Rows: 2059 Columns: 1
## ── Column specification ────────────────────────────────────────────────────────
## Delimiter: ","
## dbl (1): X1
##
## ℹ Use `spec()` to retrieve the full column specification for this data.
## ℹ Specify the column types or set `show_col_types = FALSE` to quiet this message.
###terminar aqui
Consideramos los datos de un año, aproximadamente, y los pasamos a un vector de datos, tomando
###comenzar aqui
santander <- unlist(c(Santander[1:240, 1]))
###terminar aqui
Estamos interesados en estudiar los retornos semanales. Es decir, los valores \[ \frac{X_t-X_{t-5}}{X_{t-5}}, \] donde \(X_t\) es el valor de cotización en bolsa de una empresa en el día \(t\).
Estos retornos los podemos obtener mediante la anterior función
weekly.return.Obtenemos entonces los retornos semanales de
Endesa mediante:
###comenzar aqui
return.santander <- weekly.return(santander)
###terminar aqui
Mediante el paquete podemos realizar un análisis más completo del ajuste de un modelo. Veamos el caso de una distribución normal.
Para ello creamos el objeto mediante
###comenzar aqui
ajuste_sannorm <- fitdist(return.santander, "norm")
###terminar aqui
donde se guarda el análisis del ajuste a una distribución normal. Veamos que podemos recuperar de este objeto.
Mediante
###comenzar aqui
summary(ajuste_sannorm)
## Fitting of the distribution ' norm ' by maximum likelihood
## Parameters :
## estimate Std. Error
## mean -0.00531568 0.004007003
## sd 0.06142619 0.002830000
## Loglikelihood: 322.1804 AIC: -640.3608 BIC: -633.4417
## Correlation matrix:
## mean sd
## mean 1 0
## sd 0 1
mean <- unlist(ajuste_sannorm['estimate'])[1]
sd <- unlist(ajuste_sannorm['estimate'])[2]
###terminar aqui
obtenemos la estimación de los parámetros del modelo en cuestión. En nuestro caso, especificamos en el último argumento para especificar que se trata de la distribución normal. Otros modelos se especifican teniendo en cuenta la sintaxis de los modelos de distribuciones de .
De los resultados señalamos las estimaciones de los parámetros:
En la columna tenemos las estimaciones de la media () con valor -0.0053157 y de la desviación típica () con valor 0.0614262. Hay que señalar que tanto en este modelo como para cualquier otro modelo la estimación se realiza mediante el método de máxima verosimilitud.
Mediante la opción
###comenzar aqui
gofstat(ajuste_sannorm)$chisq
## [1] 20.70459
###terminar aqui
obtenemos el estadístico de contraste del test de bondad de ajuste chi-cuadrado, donde la hipótesis nula es que los datos provienen del modelo especificado, en este caso el modelo de la distribución normal, y la hipótesis alternativa es que no sigue el modelo.
El p-valor se obtiene mediante
###comenzar aqui
gofstat(ajuste_sannorm)$chisqpvalue
## [1] 0.07898075
###terminar aqui
que en este caso es un valor bajo, aunque no lo suficiente como para rechazar la hipótesis nula.
También podemos realizar una análisis gráfico que incluye la comparación de distintas funciones de los datos con las teóricas del modelo considerado, mediante
###comenzar aqui
plot(ajuste_sannorm)
###terminar aqui
En este caso los gráficos Q-Q y P-P parecen señalar alguna diferencia con el modelo de la distribución normal, hecho que queda reflejado en que el p-valor toma un valor bajo.
Ahora vamos a considerar una distribución t de Student generalizada.
Para asegurarnos un buen punto de arranque podemos optar por hacer una estimación de máxima verosimilitud mediante el comando alternativo dentro del paquete . En concreto mediante
###comenzar aqui library(MASS)
fitdistr(return.santander, "t")
## m s df
## -0.007553174 0.054720229 9.688109025
## ( 0.004076843) ( 0.004815650) ( 6.904808590)
m<-unlist(fitdistr(return.santander, "t"))[1]
s<-unlist(fitdistr(return.santander, "t"))[2]
df<-unlist(fitdistr(return.santander, "t"))[3]
###terminar aqui
obtenemos los estimadores de máxima verosimilitud de \(\mu\), \(\sigma\sqrt{(\nu-2)/\nu}\) y \(\nu\) como -0.0075532, 0.0547202 y 9.688109, respectivamente. Hay que observar que aunque en este caso hemos indicado el modelo , este se refiere, dentro del paquete , a una reparametrización de la t de Student generalizada. Por ello hemos de recuperar el valor estimado de \(\sigma\) como \(\hat{\sigma}=0.054720229\sqrt{\frac{9.688109024}{9.688109024-2}}=0.06142676559\).
El modelo tal y como los hemos presentado está dentro del paquete .
Una vez visto esto podemos pasar al análisis de los datos incluyendo, en la opción , las estimaciones anteriores. Como estimaciones obtenemos
###comenzar aqui
ajuste_sant <- fitdist(return.santander, "std", start = list(mean = -0.007553174,
sd = 0.06142676559,
nu = 9.688109025))
summary(ajuste_sant)
## Fitting of the distribution ' std ' by maximum likelihood
## Parameters :
## estimate Std. Error
## mean -0.007763286 0.004015964
## sd 0.061703353 0.003654060
## nu 8.609269650 4.938866608
## Loglikelihood: 324.1801 AIC: -642.3602 BIC: -631.9815
## Correlation matrix:
## mean sd nu
## mean 1.00000000 -0.07339998 0.2597979
## sd -0.07339998 1.00000000 -0.4222009
## nu 0.25979794 -0.42220085 1.0000000
###terminar aqui
En este caso el contraste chi-cuadrado nos devuelve los siguientes valores para el estadístico y el p-valor
###comenzar aqui
gofstat(ajuste_sant)$chisq
## [1] 17.36425
gofstat(ajuste_sant)$chisqpvalue
## [1] 0.1364017
###terminar aqui
que en este caso nos muestra un mayor grado de compatibilidad entre los datos y la hipótesis nula de que los datos siguen una distribución t de Student generalizada.
En el análisis gráfico obtenemos
###comenzar aqui
plot(ajuste_sant)
###terminar aqui
En este caso los gráficos Q-Q y P-P parecen señalar que el modelo de la distribución t de Student generalizada mejora el ajuste delos datos, hecho que ha sido confirmado por el contraste chi-cuadrado.
Para sacar conclusiones comparamos los coeficiente AIC y BIC.
Los resultados para el ajuste a la distribución normal son:
AIC: -640.3608
BIC: -633.4417
Los resultados para el ajuste a la distribución t-Student generalizada son:
AIC: -642.3602
BIC: -631.9815
Observamos que las medidas están muy igualadas al comparar ambos ajustes. AIC es menor en el ajuste a la distribución normal y BIC es menor en el ajuste a la t-Student generalizada. Podríamos utilizar el principio de simplicidad y nos quedaríamos entonces con el ajuste a la normal.
A continuación, haremos una estimación de la mediana, calcularemos el error de la estimación y un intervalo de confianza al 90% para la mediana utilizando la metodología de remuestreo bootstrap.
Obtenemos una estimación de la mediana de la población a partir de la mediana de la muestra:
str_glue("El error estándar estimado de la mediana muestral es: {summary(santander)[3]}")
## El error estándar estimado de la mediana muestral es: 9.525
set.seed(314159)
# Completar aquí
lista_muestras_bootstrap <- replicate(
1000,
sample(santander, replace = TRUE)
)
# Fin Completar aquí
head(lista_muestras_bootstrap[[1]])
## [1] 9.66
medianas_bootstrap que contenga
las medianas de las muestras bootstrap que hemos simulado# Completar aquí
medianas_bootstrap <- lista_muestras_bootstrap |>
map_dbl(median)
# Fin Completar aquí
head(medianas_bootstrap)
## [1] 9.66 10.30 8.21 9.35 10.16 9.25
se_mediana <- sd(medianas_bootstrap)
# Fin Completar aquí
str_glue("El error estándar estimado de la mediana muestral es: {se_mediana}")
## El error estándar estimado de la mediana muestral es: 0.894515588491726
# Completar aquí
tibble(mediana = medianas_bootstrap) |>
ggplot(aes(x = mediana)) +
geom_histogram(fill = "lightblue")
## `stat_bin()` using `bins = 30`. Pick better value with `binwidth`.
# Completar aquí
str_glue("Un IC al 90% aproximado para la mediana poblacional basado en percentiles bootstrap es:\n [{round(quantile(medianas_bootstrap, 0.05), 3)}, {round(quantile(medianas_bootstrap, 0.95), 3)}]")
## Un IC al 90% aproximado para la mediana poblacional basado en percentiles bootstrap es:
## [7.82, 10.74]
# Fin Completar aquí