| # | |||||||
| # R VERSION | |||||||
| # | |||||||
| arfima.whittle<-function(series) | |||||||
| { | |||||||
| # | |||||||
| # Computes Whittle MLE for ARFIMA(0,d,0) models | |||||||
| # | |||||||
| optim(par = 0.25, whittle.loglik,gr=NULL,method = "L-BFGS-B", lo = 0., up = 0.499, series = series)$par | |||||||
| } | |||||||
| # | |||||||
| # AUXILIARY FUNCTIONS | |||||||
| # | |||||||
| whittle.loglik<-function(x, series) | |||||||
| { | |||||||
| # | |||||||
| # Whittle Loglikelihood | |||||||
| # | |||||||
| series <- series - mean(series) | |||||||
| a <- fft(series) | |||||||
| a <- Mod(a)^2 | |||||||
| n <- length(series) | |||||||
| a <- a/(2 * pi * n) | |||||||
| m <- n/2 | |||||||
| # | |||||||
| #Fourier frequencies | |||||||
| # | |||||||
| w <- (2 * pi * (1:m))/n | |||||||
| # | |||||||
| #Spectral Density: | |||||||
| # | |||||||
| b <- fn.density(w, x) | |||||||
| # | |||||||
| # Calculate sigma^2 | |||||||
| # | |||||||
| sigma2 <- (2 * sum(a[1:m]/b))/n | |||||||
| # | |||||||
| # Whittle Log-likelihood | |||||||
| # | |||||||
| loglik <- 2 * pi * (sum(log(b)) + sum(a[1:m]/b)/sigma2) | |||||||
| return(loglik/n + pi * log(sigma2)) | |||||||
| } | |||||||
| fn.density<-function(x, d) | |||||||
| { | |||||||
| # | |||||||
| # Spectral density of an ARFIMA(0,d,0) process | |||||||
| # | |||||||
| a <- (2 * sin(x/2))^(-2 * d) | |||||||
| a <- a/(2 * pi) | |||||||
| return(a) | |||||||
| } | |||||||