2 votos

Regresión logística de los datos de las garrapatas

Me han dado algunos datos (son datos de ticks financieros) y quiero predecir, basándome en algunas variables observadas, si el próximo movimiento será al alza, a la baja o sin cambios.

Así que he estado tratando de utilizar la regresión logística multinomial, esta es mi primera vez haciendo la regresión logística por lo que quiero comprobar que he hecho esto correctamente y que mis resultados parecen razonables.

En este momento estoy haciendo 3 regresiones logísticas bivariadas.

Así que codifico los datos de forma que tengo tres nuevas series temporales etiquetadas como arriba, abajo y sin cambios. Éstas se generan comprobando si el movimiento n pasos por delante fue hacia arriba, hacia abajo o sin cambios en la serie original y añadiendo un uno a la matriz correspondiente y haciendo que todas las demás entradas sean cero.

A continuación, hago una regresión logística bi-variable de estas matrices de subida, bajada y sin cambios contra los regresores individualmente.

A continuación, puedo calcular la probabilidad de cada uno utilizando la transformación:

$$\textrm{prob} = 1/(1+\exp[-Bx])$$

donde $\beta$ son las betas de las regresiones logísticas bivariadas. Y $x$ es el valor de los regresores.

Esto me da la probabilidad de subir, bajar y no cambiar.

Entonces simplemente comparo si $\textrm{probability of UP} > \textrm{probability of Down}$ si es así, el modelo predice que será al alza y viceversa.

P.1) ¿Es correcta mi metodología? Ahora mismo estoy haciendo todos los cálculos sobre la serie de precios (no sobre la serie de rendimientos)?

P.2) Cuando pruebo esta precisión en la muestra estoy obteniendo un 70% de precisión en la muestra (tanto para los movimientos ascendentes como descendentes)? ¿Es esa una puntuación razonable para la prueba en la muestra?

P.3) La probabilidad del modelo sin cambios es muy baja, normalmente alrededor del 14%. Por lo tanto, nunca se selecciona la opción sin cambios (porque las probabilidades de los movimientos ascendentes y descendentes son siempre mucho mayores). Sin embargo, el cambio más comúnmente observado es sin cambios, con una probabilidad incondicional del 91%. ¿Existe alguna forma de corregir el modelo para que el modelo prevea con exactitud los cambios?

Actualización: ¡Aquí está el código, lamentablemente estoy obteniendo diferencias entre los resultados de la regresión de 2 variables y los resultados de 3 variables!

Posible error entre dos: regresión de 2 variables ejecutada con mnrfit() y una versión equivalente de 3 variables sobre los rendimientos de los activos. Los rendimientos se han clasificado como positivos, negativos o planos. La regresión logística se ejecuta entonces sobre las rtns frente a los rendimientos clasificados (se trata de una simple prueba para comprobar que la regresión funciona como se pretende). Cuando hago esto para la versión de 2 variables, es decir, rtns al alza frente a todo lo demás, la regresión da una estimación de la probabilidad de que una rentabilidad 0 no sea una rentabilidad al alza del 88%. A medida que se incrementa el tamaño de la rentabilidad, la probabilidad de que sea positiva aumenta, convergiendo finalmente a 1 (como cabría esperar). Asimismo, a medida que se introducen rtns cada vez más negativas en el modelo de regresión logística, la probabilidad de que la rtn sea positiva se reduce a cero. Lo mismo ocurre con la estimación de 2 variables de los rendimientos a la baja frente a todo lo demás. Las cifras son similares a las anteriores, pero con los signos de los rendimientos invertidos.

Ahora cuando ejecuto la versión de 3 variables. Inicialmente, las cosas se ven bien: cuando se da una rentabilidad de cero, se estima que la probabilidad de que sea cero es del 86%, con una probabilidad de un movimiento a la baja =6,4% y un movimiento al alza =7,6%, es decir, muy similar al caso de 2 variables. Además, cuando se introducen rentabilidades más y más grandes, la probabilidad de que sea una rentabilidad positiva converge a 1, como cabría esperar, pero cuando se introducen rentabilidades negativas más y más grandes, la probabilidad de que la rentabilidad sea negativa converge a cero, mientras que la probabilidad de que sea igual a cero aumenta a 1. Lo cual es claramente erróneo.

Data1 = LoadMat_SHFE_Range(Contract1, StartDate, EndDate);

rtn=(Data1.Mid(2:end)-Data1.Mid(1:end-1))./(Data1.Mid(1:end-1));

NStep=0;

Up=nan(length(rtn),1);
Down=nan(length(rtn),1);
Flat=nan(length(rtn),1);
RtnClass=nan(length(rtn),1);

for i=1:length(rtn)-NStep

if(rtn(i+NStep)>0)
    Up(i)=2;
    Down(i)=1;
    Flat(i)=1;
elseif(rtn(i+NStep)<0)
    Up(i)=1;
    Down(i)=2;
    Flat(i)=1;
elseif(rtn(i+NStep)==0)
    Up(i)=1;
    Down(i)=1;
    Flat(i)=2;
end

end

[BUp,dev,stats] = mnrfit(rtn,Up);
MatProbUp = mnrval(BUp,0.1);

[BDown,dev,stats] = mnrfit(rtn,Down);
MatProbDown = mnrval(BDown,0.1);

for i=1:length(rtn)

if(rtn(i)>0)
    RtnClass(i)=3;
elseif(rtn(i)<0)
    RtnClass(i)=2;
elseif(rtn(i)==0)
    RtnClass(i)=1;
end

end

[BM,dev,stats] = mnrfit(rtn,RtnClass,'model','ordinal');
[pihat,dlow,hi] = mnrval(BM,0,stats,'model','ordinal');

2voto

Nick Klauer Puntos 2837

El código que has puesto es erróneo ya que no modelas el comportamiento de la serie temporal del proceso de subida/bajada (es decir, si tienes 10 movimientos al alza y consecuentemente 10 a la baja no es lo mismo que lo contrario es decir 10 a la baja y después 10 al alza..). Te recomendaría utilizar los modelos Arma Garch aplican en los rendimientos en lugar de modelar el proceso de arriba / abajo. Estas son (al menos) las principales razones:

  1. si utiliza su proceso binario tendrá problemas para tener en cuenta la agrupación de la volatilidad y demás (la parte de la varianza condicional.).

  2. como utiliza datos de ticks, tendrá problemas de consistencia ya que puede obtener 1 movimiento en 5 segundos y después 100 movimientos en 5 segundos. Si utiliza modelos estándar, como los modelos Arma Garch, puede tratar este hecho remuestreando la comilla media cada x segundos (o cualquier otro método de agregación).

  3. Con los modelos estándar, podrá alcanzar sus objetivos eligiendo una regla sencilla: digamos que si la media condicional pronosticada de un paso adelante es positiva con un nivel de confianza del 0,05, podrá asumir que el siguiente movimiento será al alza. Además, puede añadir variables explicativas en los procesos de media y varianza condicionales.

  4. es probable que también le interese la magnitud del movimiento , y es más fácil obtenerla a través de la clase de modelos Box-Jenkins.

  5. También hay que tener en cuenta el movimiento del diferencial entre la oferta y la demanda, ya que si se utilizan los rendimientos se tienen en cuenta implícitamente.

1voto

tdyen Puntos 640

Estoy de acuerdo con Malick en el sentido de que un ARMA-GARCH es un mejor modelo, pero yo mejoraría el modelo haciendo un ARFIMA-FIGARCH, el FI significa Fractional Integrated que se utilizan para hacer frente a los procesos de larga memoria como los datos HF. Cuando se trata de ajustar el ARMA el enfoque normal sería ver el ACF y el PACF que mostrará mucha dependencia (casi todos los rezagos serían significativos) y lo mismo con el modelo GARCH, por lo que una forma común de tratar es con modelos FI.

Por otro lado, no descartes la regresión logística. Seguro que vas a tener algunos problemas con los grupos de Volatilidad, pero la información es útil. Te sugeriría que en lugar de un modelo 1,0 intentes realizar un Probit o Logit de orden para que puedas tener una probabilidad de la magnitud del incremento, (es un gran complemento al modelo ARFIMA-FIGARH). En este modelo la variable dependiente va a ser un número entero de 1 a 5 digamos y cada número representa un intervalo de aumento o disminución del precio. Digamos que 1 si el precio va a bajar entre 0 y 5, 2 si el precio va a subir entre 0 y 5 y así sucesivamente.

Finanhelp.com

FinanHelp es una comunidad para personas con conocimientos de economía y finanzas, o quiere aprender. Puedes hacer tus propias preguntas o resolver las de los demás.

Powered by:

X