Dear R-users,
I am trying to translate a matlab code for calculating the Local Whittle
estimator in time series with long memory originally written by Shimotsu and
available free in his webpage (
http://www.econ.queensu.ca/pub/faculty/shimotsu/ )
The Matlab code is
======================================================================================
function[r] = whittle(d,x,m)
% WHITTLE.M computes the local Whittle likelihood, which uses
% the periodogram of data x accoding to the definition
%
% Ixx(k) = w(x)*conj(w(x)),
%
% where
% N
% w(k) = (2*pi*n)^(-1/2) sum x(t)*exp(i*2*pi*(k-1)*t/N), 1 <= k
<N.
% t=1
%
% Katsumi Shimotsu, April 1999
%
% INPUT x: data (n*1 vector)
% m: truncation number
% d: parameter value
%____________________________________________________________________________
[n,nn] = size(x);
t = (0:1:n-1)';
lambda = 2*pi*t/n;
wx = (2*pi*n)^(-1/2)*conj(fft(conj(x))).*exp(i*lambda);
lambda = lambda(2:m+1);
wx = wx(2:m+1);
Ix = wx.*conj(wx);
g = mean((lambda.^(2*d)).*Ix);
r = log(g) - 2*d*mean(log(lambda));
================================================================================
and when you want to use it, you just call the function, and you minimize
it. (In other words you minimize the "r" expression on the last line
above.)
I have done a lot efforts to translate it and I have ended up with the
following :
======================================================================================
local.whittle <- function(d, x, m)
{
n <- length(x)
t <- matrix(c(0:n1), nrow = n, ncol=1)
lambda <- (2*pi*t)/n
wx <- (2*pi*n)^(-1/2)*Conj(fft( Conj(x)))*exp(1i*lambda)
M1 <- m+1
lambda2 <- lambda[2:M1]
wx2 <- wx[2:M1]
ix <- wx2*Conj(wx2)
g <- mean((lambda2^(2*d))*ix)
r <- log(mean((lambda2^(2*d))*ix)) - 2*d*mean(log(lambda2))
}
======================================================================================
which seems to run, but when I am trying to call the function and minimize
it using:
e <- optimize(local.whittle, x, m, c(-0.5, 0.5))
e1 <- e$minimum
I get the following error and I cannot find the reason why.
======================================================================================
Error in optimize(lw, x, m, c(-0.5, 0.5)) :
invalid function value in 'optimize'
In addition: Warning messages:
1: In 2:M1 : numerical expression has 2 elements: only the first used
2: In 2:M1 : numerical expression has 2 elements: only the first used
======================================================================================
Please help me.
thanks. fotis.
P.S.: as far as for a long memory estimator in time series introduced by
Robinson (1995) that I was asking some days ago, I have written a code. Send
me an e-mail if you need it, till I include it in some package.
--
fp
[[alternative HTML version deleted]]