| # | ||||||
| #SPLUS VERSION | ||||||
| # | ||||||
| arfima.whittle<-function(series) | ||||||
| { | ||||||
| # | ||||||
| # Computes Whittle MLE for ARFIMA(0,d,0) models | ||||||
| # | ||||||
| nlminb(start = 0.25, whittle.loglik, lo = 0., up = 0.499, series = series)$parameters | ||||||
| } | ||||||
| # | ||||||
| # 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) | ||||||
| } | ||||||