Estoy en mis primeros días de aprendizaje R
y me topé con un obstáculo con un pequeño caso de uso de las finanzas.
(EDIT) Básicamente quiero saber cómo probar la aptitud de la muestra contra cualquier distribución. Digamos, encontrar el grado de libertad de una distribución t que tendría el mejor ajuste con la lista dada de los rendimientos de los activos. Pensé que el camino a seguir es generar un conjunto de datos aleatorios con propiedades dadas, y qqplot
con los datos reales, junto con un abline
para ver si es lineal o no. En la pregunta estoy usando normal/lognormal sólo como un ejemplo que pensé que sería más fácil de discutir.
Así, hay una lista de precios de acciones (presumiblemente una distribución lognormal), a partir de la cual calculo una lista de rendimientos (presumiblemente una distribución normal). Ahora quiero comprobar mis suposiciones sobre las distribuciones, así que grafico ambas:
par(mfcol=c(2,3))
#plot densities
plot(density(sbux.prices))
plot(density(sbux.returns))
#plot q-q probabilities for normal distribution
sbux.prices.norm = rnorm(n=1000, mean=mean(sbux.prices), sd=sd(sbux.prices))
qqplot(sbux.prices.norm, sbux.prices)
abline(0,1)
sbux.returns.norm = rnorm(n=1000, mean=mean(sbux.returns), sd=sd(sbux.returns))
qqplot(sbux.returns.norm, sbux.returns)
abline(0,1)
#plot q-q probabilities for lognormal distribution
sbux.prices.lnorm = rlnorm(n=1000, mean=mean(sbux.prices), sd=sd(sbux.prices))
qqplot(sbux.prices.lnorm, sbux.prices)
abline(0,1)
sbux.returns.lnorm = rlnorm(n=1000, mean=mean(sbux.returns), sd=sd(sbux.returns))
qqplot(sbux.returns.lnorm, sbux.returns)
abline(-1,1)
Dos preguntas.
- Con sólo mirar los gráficos anteriores, puedo decir que los precios siguen una distribución lognormal, porque el gráfico QQ correspondiente se ajusta mucho mejor a la lognormal que a la normal. Pero los rendimientos parecen ajustarse bien con ambas distribuciones - ¿es correcto o estoy haciendo algo mal?
- Obviamente, es mejor confiar en una estimación matemática de la forma física que en un humano que compruebe las tablas. Creo que puedo utilizar la prueba de Chi-cuadrado o Kolmogorov-Smirnov, pero no entiendo cómo hacerlo exactamente. Por ejemplo
ks.test(sbux.returns, sbux.returns.norm)
me dap-value = 0.007781
así que definitivamente me estoy perdiendo algo.