2 votos

Ayuda en la comprensión de las nuevas pruebas de Pesaran y Timmermann (y la validación del código R)

Actualmente estoy trabajando con la versión de prueba de Pesaran & Timmermann del año 2009. Como no he podido encontrar ningún paquete de R que contenga la función para calcularlo ( rugarch tiene la versión de 1992 en DACTest ). Hace poco publiqué un hilo en un cruce validado con una pregunta similar en el que el amable usuario mlofton me aconsejó que mirara esta lista. Dado que la publicación cruzada no es una práctica aceptable, después de más de una semana de ardua investigación logré desarrollar un código R para newPT_test . Parece que es correcto, pero como tenía muchas dudas quizás alguien me aclare mis dudas.

Esta es la fórmula que he utilizado (Pönkä 2017):

$$PT=(T-1)(S^{-1}_{yy,w}S_{y\hat{y},w}S^{-1}_{\hat{y}\hat{y},w}S_{\hat{y}y,w}) \sim {\chi}^2_1, $$

$$S_{yy,w}=(T-1)^{-1}Y'M_wY, $$ $$S_{\hat{y}\hat{y},w}=(T-1)^{-1}\hat{Y}'M_w\hat{Y}, $$ $$S_{y\hat{y},w}=(T-1)^{-1}\hat{Y}'M_w\hat{Y},$$ $$S_{y\hat{y},w}=(T-1)^{-1}Y'M_w\hat{Y}, $$ $$M_w=I_{T-1}-W(W'W)^{-1}W', $$ $$W=(\tau_{T-1},Y_{-1},\hat{Y}_{-1}),$$

"...y $Y=(y_2,...,y_T)'$ ", $\hat{Y}=(\hat{y}_2,...,\hat{y}_T)$ , $Y_{-1}=(y_1,...,y_{T-1})$ , $\hat{Y}=(\hat{y}_1,...,\hat{y}_{T-1})$ y $\tau_t$ es como $(T-1)\times1$ vector de unos..." De otra fuente aprendí que $I_t$ es la matriz de identidad.

Mi principal problema era la notación. Entiendo que $y_t$ representa unos y ceros dependiendo de si el cambio entre el valor real y su última observación fue positivo ( $1$ ) o negativo ( $0$ )? Lo mismo para la previsión $\hat{y}_t$ . No estoy seguro de cómo entender los vectores: $Y=(y_2,...,y_t)'$ y $Y'$ en $S$ elementos. Sé que $'$ al final de $(y_2,...,y_t)'$ significa que es un vector de columnas, por lo que $Y'$ indica que ahora su vector de filas ahora?. También comienza desde $y_2$ lo que significa que elimino la primera observación de la serie binaria mientras que en $Y_{-1}=(y_1,...,y_{T-1})$ ¿Saco el último? Eso hace que $\tau_{t-1}$ a $(T-1)\times3$ matriz, ¿verdad?

Aquí está el código R:

nwPT_test=function(actual,forecast){

yt=actual #assign actual to yt to make code shorter  
xt=forecast #assign forecast to xt...  

delta_yt=as.matrix(cbind(ifelse(yt-lag(yt)>0,1,0)[-1])) #calc change of yt (delta)
delta_xt=as.matrix(cbind(ifelse(xt-lag(xt)>0,1,0)[-1])) #calc change of xt(delta)
nT=length(delta_yt) #number of Time periods
Yt=cbind(delta_yt[-1]) #Yt=(y2,...,yT) 
Xt=cbind(delta_xt[-1]) #Xt=(x2,...,xT)
Yt2=as.vector(rbind(delta_yt[-nT])) #Yt2=(y1,...,yT-1)
Xt2=as.vector(rbind(delta_xt[-nT])) #Xt2=(x1,...,xT-1)
teta=rep(1,nT-1) #T-1 vector of ones
I=diag(nT-1) #Identity matrix
W=cbind(teta,Yt2,Xt2) #W matrix as in formula

Mw=I-(W%*%((t(W)%*%W)^(-1))%*%t(W))#calcualting Mw as in formula

#calculating elements S as in formula
Syy.w=((nT-1)^(-1))*t(Yt)%*%Mw%*%Yt
Sxx.w=((nT-1)^(-1))*t(Xt)%*%Mw%*%Xt
Sxy.w=((nT-1)^(-1))*t(Xt)%*%Mw%*%Yt
Syx.w=((nT-1)^(-1))*t(Yt)%*%Mw%*%Xt

PT=(nT-1)*(Syy.w^(-1)*Syx.w*Sxx.w^(-1)*Sxy.w)#finally calculating PT 

p.value=1-pchisq(PT,df=1)#calculating p-value
#some code to make it looks nicer
summary=c(PT,p.value)
names(summary)=c("PT statistic","p.value")
summary
}

He conseguido resolver la mayoría de los problemas de mi hilo anterior. Aquí está el enlace:: https://stats.stackexchange.com/questions/372776/confusions-about-pesaran-timmermann-test-2009-version?noredirect=1#comment701286_372776 Podría ayudar a entender la forma en que lo abordé. Hasta ahora mi código parece dar resultados correctos.

Por favor, responda sólo a las preguntas del hilo actual. Espero haber actualizado mi pregunta lo suficiente como para no ser tratada como un doble post... Y gracias de nuevo a mlofton por informarme sobre este gran subsitio de SE.

1voto

metaleap Puntos 121

Cuidado, no estás calculando la inversa de la matriz. La inversa correcta es solve((t(W)%*%W)) no (t(W)%*%W)^(-1) .

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