Spectrum

Questions and discussions on Time Series Analysis

Spectrum

Postby ivory4 » Sat Jul 17, 2010 2:12 am

According to BN decomposition, Cycle is defined to be Psi(L)(et)
Psi(L) is defined to be (P(L)-P(1))/(1-L), P(L)=Theta(L)/Phi(L), Thetas are MA coefficients and Phis are AR coefficients.

C_t=Psi(L)e_t
Spe(C_t)=|PSI(L)|^2Sig_e^2/2PI

I tried to draw Spectrum of C_t and delta(C_t)

The latter seems to be
Code: Select all
equation(noconstant,coeffs=||-%beta(4), -%beta(5),-%beta(2), -%beta(3)||) arma22 y 2 2 

* %beta() is from Boxjenk function, I switch the order of AR and MA coefficients in order to get Theta(z)/Phi(z) directly

frequency 2 512
trfunc(equation=arma22) 1
cset 2 = %z(t,1)-%z(1,1)
cmult(scale=(2*%pi)/scale) 2 2

ctor 1 256
# 2
# ab
set bn_spect 1 256 = ab


But How to draw C_t?
Code: Select all
* continue from previous case
cset 1= 2/(1-%zlag(t,1)
cmult(scale=(2*%pi)/scale) 1 1

?

I end up with C_t's spectrum at zero frequency extremely high which is consistent with deltaCt's zero spectrum at zero frequency.
Is there a way that I use spectrum at some smal positive frequency to guess this zero frequency?
ivory4
 
Posts: 149
Joined: Mon Aug 24, 2009 12:16 pm

Re: Spectrum

Postby TomDoan » Sun Jul 18, 2010 5:02 pm

ivory4 wrote:According to BN decomposition, Cycle is defined to be Psi(L)(et)
Psi(L) is defined to be (P(L)-P(1))/(1-L), P(L)=Theta(L)/Phi(L), Thetas are MA coefficients and Phis are AR coefficients.

C_t=Psi(L)e_t
Spe(C_t)=|PSI(L)|^2Sig_e^2/2PI

I tried to draw Spectrum of C_t and delta(C_t)

The latter seems to be
Code: Select all
equation(noconstant,coeffs=||-%beta(4), -%beta(5),-%beta(2), -%beta(3)||) arma22 y 2 2 

* %beta() is from Boxjenk function, I switch the order of AR and MA coefficients in order to get Theta(z)/Phi(z) directly

frequency 2 512
trfunc(equation=arma22) 1
cset 2 = %z(t,1)-%z(1,1)
cmult(scale=(2*%pi)/scale) 2 2

ctor 1 256
# 2
# ab
set bn_spect 1 256 = ab


But How to draw C_t?
Code: Select all
* continue from previous case
cset 1= 2/(1-%zlag(t,1)
cmult(scale=(2*%pi)/scale) 1 1

?

I end up with C_t's spectrum at zero frequency extremely high which is consistent with deltaCt's zero spectrum at zero frequency.
Is there a way that I use spectrum at some smal positive frequency to guess this zero frequency?


Obviously, there is a problem evaluating this directly at 0 frequency:

(P(L)-P(1))/(1-L)

since it's 0/0. Because of round-off errors, you can get almost anything when you try to compute it. You can apply L'Hopital's rule to the z transform to evaluate it exactly at z=0, though you can also just use the limit of nearby values.
TomDoan
 
Posts: 2720
Joined: Wed Nov 01, 2006 5:36 pm

Re: Spectrum

Postby ivory4 » Sat Jul 31, 2010 1:16 pm

TomDoan wrote:since it's 0/0. Because of round-off errors, you can get almost anything when you try to compute it. You can apply L'Hopital's rule to the z transform to evaluate it exactly at z=0, though you can also just use the limit of nearby values.


The nearby ones, I think at least many of them are extremely high. If zero frequency is estimated using L'Hopital'rule, then a hump near zero frequency would be created. To adjust them using analytical spectrum (after L'Hopital's rule applied to the z transform to evaluate it exactly at z=0) or it is better to use right side values ( I mean frequency corresponding bigger w)
ivory4
 
Posts: 149
Joined: Mon Aug 24, 2009 12:16 pm

Re: Spectrum

Postby TomDoan » Mon Aug 02, 2010 9:40 am

Since L'Hopital's rule is exact, you would prefer that over an eyeball limit from nearby values.
TomDoan
 
Posts: 2720
Joined: Wed Nov 01, 2006 5:36 pm

Re: Spectrum

Postby ivory4 » Sat Dec 25, 2010 1:15 pm

If I would like to draw Theoretical spectrum of various ARIMA model, is it better to use @specth ?
I check the source and found that it requires ACFMORIN.SRC instead of ACF.SRC
And also the default for NCOV is 20 instead of 200.

I add this one to the original src and the example in the file, but RATS still says that ACFMORIN is not a procedure (did you forget to source?)
Code: Select all
Source(noecho) acfmorin.src


Code: Select all
 ALL 250
 DECL VECT a(2) b(1) c(1)
 INPUT(unit=keyboard) a b c
 -.3 .2
 .8
 .5

 SOURCE(NOECHO) POLYMULT.SRC
 @POLYMULT(span=12) a b ab
 DECL vect invec(15)
 DO i = 1,14
   COMPUTE invec(i) = ab(i)
 END DO
 COMPUTE invec(15) = c(1)
 SOURCE(noecho) ACFMORIN.SRC
 SOURCE(noecho) SPECTH.SRC
 @SPECTH(nfreq=201,ncov=250,ma=1) invec specs freqs
ivory4
 
Posts: 149
Joined: Mon Aug 24, 2009 12:16 pm

Re: Spectrum

Postby TomDoan » Sat Dec 25, 2010 3:26 pm

Use ARMASPECTRUM rather than SPETHE.
TomDoan
 
Posts: 2720
Joined: Wed Nov 01, 2006 5:36 pm

Re: Spectrum

Postby ivory4 » Sat Dec 25, 2010 4:10 pm

For comparison purpose;
Code: Select all
all 1000
set y = 0.0
equation(variance=1.0, coeffs=||0.0,1.4,-0.8||) arma y 2 0
simulate(from=3, step=998) 1
# arma y
@spectrum y
@armaspectrum y

When I try to simulate data with non-stationary coeffs like AR(1)=1.4 or AR(2)=1.9, -0.5; SIMULATE does not generate data but instead filled y with "F" ?
SPECTRUM in this case still generate graph if ALL 1000 while STEP=100; Otherwise it generates blank graph.

What is wrong here?
Last edited by ivory4 on Sun Dec 26, 2010 12:08 pm, edited 2 times in total.
ivory4
 
Posts: 149
Joined: Mon Aug 24, 2009 12:16 pm

Re: Spectrum

Postby TomDoan » Sun Dec 26, 2010 8:41 am

ivory4 wrote:For comparison purpose;
Code: Select all
all 1000
set y = 0.0
equation(variance=1.0, coeffs=||0.0,1.4,-0.8||) arma y 2 0
simulate(from=3, step=998) 1
# arma y
@spectrum y
@armaspectrum y


When I try to simulate data with non-stationary coeffs like AR(1)=1.4 or AR(2)=1.9, -0.5; SIMULATE does not generate data but instead filled y with "F" ?
SPECTRUM in this case still generate graph if ALL 1000 while STEP=100; Otherwise it generates blank graph.

What is wrong here?


The SPECTRUM seems to be OK. It's the ARMASPECTRUM, which takes the equation (ARMA) rather than the series Y as the input.
TomDoan
 
Posts: 2720
Joined: Wed Nov 01, 2006 5:36 pm

Re: Spectrum

Postby ivory4 » Sun Jan 23, 2011 11:03 pm

Question when (1-L) is involved
Equation looks like this: yt=PSI(L)(et-et-1) (Yt=Phi*1Y_t-1+Phi2*Y_t-2+e_t - e_t-1)

To draw arma spectrum of yt, which of the following is correct?
Code: Select all
equation(noconstant,coeffs=||@@, @@,-1||) arma21 y 2 1
frequency 1 512
com scale=@@^2
trfunc(equation=arma21) 1
cmult(scale=(2*%Pi)/scale) 1 1
cset 1 =1.0/%z(t,1)
ctor 1 256
# 1
# abc


OR

Code: Select all
equation(noconstant,coeffs=||@@, @@||) arma y 2 0
frequency 1 512
com scale=@@^2
trfunc(equation=arma) 1
cset 1 = (1-%zlag(t,1))/%z(t,1)
cmult(scale=(2*%Pi)/scale) 1 1
ctor 1 256
# 1
# abc


It seems that the graph look the same but the scale is different now. The former seems to be more reasonable.

How to fix it ?


Thanks :-)
ivory4
 
Posts: 149
Joined: Mon Aug 24, 2009 12:16 pm

Re: Spectrum

Postby TomDoan » Mon Jan 24, 2011 10:13 am

In the first case, you're squaring, then inverting; in the second, you're inverting, then squaring. But you're using the same scale factor in the square in both cases, which can't be correct. You need to multiply in one and divide in the other.
TomDoan
 
Posts: 2720
Joined: Wed Nov 01, 2006 5:36 pm

Re: Spectrum

Postby ivory4 » Wed Nov 09, 2011 10:27 pm

Equation: yt=PSI(L)(et-et-1) and assume we do not have MA terms here and only AR(2) terms.

I correct the squaring error in previous post

The spectrum are still not the same. What is the reason? Which calculation is wrong?


ivory4 wrote:
Code: Select all
equation(noconstant,coeffs=||@@, @@,-1||) arma21 y 2 1
frequency 1 512
com scale=@@^2
trfunc(equation=arma21) 1
cmult(scale=(2*%Pi)/scale) 1 1
cset 1 =1.0/%z(t,1)
ctor 1 256
# 1
# abc

*****same as******
cset 1 =(1.0-@@*%zlag(t,1)-@@*%zlag(t,2))/(1.0-%zlag(t,1))
com scale=@@^2
cmult(scale=(2*%Pi)/scale) 1 1
cset 1 =1.0/%z(t,1)
ctor 1 256
# 1
# abc



OR

Code: Select all
equation(noconstant,coeffs=||@@, @@||) arma y 2 0
frequency 1 512
com scale=@@^2
trfunc(equation=arma) 1
cmult(scale=(2*%Pi)/scale) 1 1
cset 1 = (1-%zlag(t,1))/%z(t,1)
ctor 1 256
# 1
# abc




Another problem is when we have MA terms, say et-et-1 follow MA(1), then the first approach (especially the part below ******the same as******) is very different from the second approach.

Code: Select all
****when MA terms exist***********
cset 1 = (1.0-@@*%zlag(t,1)-@*%zlag(t,2))/((1.0+##*%zlag(t,1))*(1.0-%zlag(t,1)))


Or I think the following is correct?

Code: Select all
equation(noconstant,coeffs=||%beta(4),%beta(5),%beta(6)-1.0,-1.0*%beta(6)||) arma y 2 2
          frequency 1 512
          trfunc(equation=arma) 1
          com scale = ###^2   
          cmult(scale=(2*%pi)/scale) 1 1
          cset 1 =1.0/%z(t,1)
          ctor 1 256
          # 1
          # ab

ivory4
 
Posts: 149
Joined: Mon Aug 24, 2009 12:16 pm

Re: Spectrum

Postby TomDoan » Thu Nov 10, 2011 1:43 pm

It might be easier to understand if ARMASPECTRUM had been written like this:

Code: Select all
trfunc(equation=eqn) 1
cmult 1 1
*
* Take the scaled reciprocal and send half of the resulting series back to the
* time domain.
*
cset 1 = (scale/(2*%pi))/%z(t,1)


Multiplying by sigma^2/(2pi) is the final step after you've finished manipulating the squared transfer function. The spectral density is

sigma^2/(2*pi)*|C(w)|^2

where C(w) is the transfer function from epsilon to y. Since TRFUNC generates the transfer from Y to epsilon (not epsilon to Y), you need the reciprocal of the squared transfer function to make the |C(w)|^2.
TomDoan
 
Posts: 2720
Joined: Wed Nov 01, 2006 5:36 pm

Re: Spectrum

Postby ivory4 » Thu Nov 10, 2011 4:29 pm

What I got wrong is the use of (1-%zlag(t,1) to represent (1-L) part after calculating |C(w)|^2, when I have the equation like (1-Phi(L))yt=THETA(L)(1-L)et

Now I define the EQUATION using parameters in Phi(L) and Theta(L) by expanding Theta(L)(1-L)

Code: Select all
equation(noconstant,coeffs=||phi1, phi2, theta1-1,-theta1||) arma21 y 2 1


Then with TRFUNC and CMULT to square, CSET to invert, it seems correct.
ivory4
 
Posts: 149
Joined: Mon Aug 24, 2009 12:16 pm


Return to Other Time Series Analysis

Who is online

Users browsing this forum: No registered users and 1 guest