Skip to content

Commit

Permalink
version 2.0-4
Browse files Browse the repository at this point in the history
  • Loading branch information
angusian authored and gaborcsardi committed Mar 11, 2013
1 parent 37f7882 commit d49d7e5
Show file tree
Hide file tree
Showing 33 changed files with 1,237 additions and 26 deletions.
21 changes: 11 additions & 10 deletions DESCRIPTION
@@ -1,20 +1,21 @@
Package: FGN
Version: 2.0-1
Date: 2012-12-10
Title: Fractional Gaussian Noise (FGN) and simple models for hyperbolic
decay time series
Version: 2.0-4
Date: 2013-03-11
Title: Fractional Gaussian Noise and hyperbolic decay time series model
fitting
Author: A.I. McLeod and Justin Veenstra
Maintainer: A.I. McLeod <aimcleod@uwo.ca>
Depends: R (>= 2.1.0), ltsa, hypergeo, akima
Description: Efficient exact MLE and Whittle MLE estimation of four
simple long memory time series models.
Depends: R (>= 2.1.0), ltsa, akima
Description: Exact MLE and Whittle MLE estimation for various
hyperbolic decay time series models.
Classification/ACM: G.3, G.4, I.5.1
Classification/MSC: 62M10, 91B84
Imports: ltsa
LazyLoad: yes
LazyData: yes
License: GPL (>= 2)
License: CC BY-NC-SA 3.0
URL: http://www.stats.uwo.ca/faculty/aim
Packaged: 2012-12-12 21:38:51 UTC; aim
Packaged: 2013-03-11 21:33:58 UTC; IanMcLeod
NeedsCompilation: yes
Repository: CRAN
Date/Publication: 2012-12-13 06:28:49
Date/Publication: 2013-03-12 09:52:55
40 changes: 32 additions & 8 deletions MD5
@@ -1,6 +1,7 @@
b279b982743e0147d98d56be3ef9260d *DESCRIPTION
fdd4c4b1c7a8527c187ca4675d807a14 *NAMESPACE
c950a7d49e88cd14c1c12455a95234a4 *NEWS
a37e37c98cba50713fed67db5d94c434 *DESCRIPTION
a9855741039676ef7f98d35072f057da *NAMESPACE
d17fc5f58160cdef66fb7fa326f123a1 *NEWS
b834c996deb14ac0ba270e839cdd415f *R/ARToPacf.R
cfb49e32b1bbe8aaf7d5c8a33cf46d6b *R/Boot.FitFGN.R
e870fb2bd451cd03745e026240c577f2 *R/Boot.R
b5619b07cdd130178edfaf5d7ddb202a *R/FitFGN.R
Expand All @@ -10,64 +11,81 @@ b3f970139344ae95920036eb1e451810 *R/GetFitFGN.R
ce44c2b00a3bcb600d61285a0ec9caf2 *R/GetFitPLA.R
efb5fc369bff9ace118cb96b2a1dee39 *R/GetFitPLS.R
892e13c848b48f456dcb82b0dff66fde *R/HurstK.R
6df0a23f79587e7b750ae04d5434a100 *R/InvertibleQ.R
204b18bbb9c14e7dc9969370705f1a40 *R/LLFD.R
b0aa7a4eca77558df5e20eac27090f69 *R/LLFGN.R
2dfd54adfcbc825b3c9c3a6ccd348bdb *R/LLPLA.R
14be5981f8f9a13c1e132145e5043c46 *R/LLPLS.R
31ce5d4ae6a0b392f08edb6c0f0abb03 *R/PacfToAR.R
116f46848e1d7386304283810c657057 *R/Reimann.R
80bf6f73e5dac213b797f006ce1da07b *R/SimulateFD.R
9ab875662fa07a2c44cb015ba7ca8b9b *R/SimulateFGN.R
8e4e3ae3dcffdc8014bfe02c44cde8a4 *R/WLoglikelihood.R
4e5c9f8c3623cf874cdb07c3b78717ca *R/acvfFD.R
b5717727508fef59300c2a572d56540d *R/acvfFGN.R
e294fa616ca8e97529ce72b537ade626 *R/acvfPLA.R
affa8ca353982d8bc6467807f3cc81e3 *R/acvfPLSA.R
0052fa030a9d0ef0785daf1366ed1411 *R/coef.FitFGN.R
a8f43feec290e15137e892cb52c8723b *R/earfima.R
f638720000b1401c6333ad085cd7cb34 *R/plot.FitFGN.R
640cf7f5d682447e746fdfb090d172cb *R/predict.FitFGN.R
4bd6e768e68fab8bdb79bdabbe2dfe54 *R/print.FitFGN.R
1ee58102d5d58c5fd6b1954a0dd9b797 *R/residuals.FitFGN.R
4546bde7f9f7a1ef6801b16131af799a *R/sdfFD.R
6eba875379217f71854e9811c757b31a *R/sdfFGN.R
da9373db3fa66c6ce89805229eff8653 *R/sdfPLA.R
9c2740679621ff0fcba12c846473f84d *R/sdfPLA.R
3f9598f9af247411657e8082484c0419 *R/sdfPLS.R
4565fe84482cd26f6551c418ee0c4205 *R/sdfarma.R
09cadf380cb853e51d5bf49c64435154 *R/sdfhd.R
758e97148aab910686c504d157d1a780 *R/summary.FitFGN.R
5f8d2d4fe369d57c038386dc77491821 *data/NileFlowCMS.rda
560728c6cc3b74c995c191a734c9b3ac *data/NileMin.rda
6df07ceddbbec6beabc28ce40e0b7ecd *R/tacf.R
dd4d66323129f51f7523100873f1aab4 *R/warfima.R
789fcefdcbf1a267775c774fac59bd0e *data/NileFlowCMS.rda
83e83164b22aa3ea48d9c85bf9197d1c *data/NileMin.rda
e918f7c41e84a05a6b4181b0edce462b *data/SeriesB.rda
b7663e7d42f5b3970d4a1f7d88cc02cc *data/globtp.rda
38cd3e0b2aacd4818e5cf9474572823d *inst/CITATION
3555586e9baccf804d2ba40680541d43 *inst/doc/index.html
6b7a472a22fbdbff4b2b08ddb4f43735 *inst/doc/index_files/colorschememapping.xml
d86f71dcbb40f094b962a26e835b5cd0 *inst/doc/index_files/filelist.xml
d2ea643e2693aa428cee4699f122a5ae *inst/doc/index_files/preview.wmf
1d712df30aaae149416bfc0da166f00a *inst/doc/index_files/themedata.thmx
f2e4ec7eaccbde9393c42d6e602c7315 *inst/doc/v23i05.pdf
70f452f2cdca88e6714459eabaa184b2 *inst/doc/v23i05.pdf
edf2ad5de4ea660c8d1b29ddecea419b *inst/doc/v23i05_table12.R
03dfc3b96ca165312ece4f08ae9cdd9c *inst/doc/v23i05_table14.R
71cbbbe670e61502320bbfb39092c65b *inst/doc/v23i05_table15a.R
13b2384fdf9804d4dca40935bc63fa5c *inst/doc/v23i05_table15b.R
443c44eaaf8f7de6af63f0810e4018d0 *man/ARToPacf.Rd
1c5073d9dd8bd443197ede3c5992054e *man/Boot.FitFGN.Rd
a7e4c5cc4ef2b7bc69dceaa1f58fd093 *man/Boot.Rd
d9b2f4243bffbb561f5377689d536bec *man/FGN-package.Rd
28ab24bc440b9a28c70800b61b01f96f *man/FGN-package.Rd
c8243c44bd59fe7fba70f5ee744b44a2 *man/FitFGN.Rd
65911d58148bbd61c8fa880550cae4e7 *man/FitRegressionFGN.Rd
7af77ce4d328fbec6bcd37f5050b56b4 *man/GetFitFD.Rd
5547074705702b329a097dcc1d0fb166 *man/GetFitFGN.Rd
cbd8adac114200d1fb374692824222ce *man/GetFitPLA.Rd
d0cec38eff0e88c46e74f8239d5c9bcc *man/GetFitPLS.Rd
3deed63d7ece49eed26804406891d75e *man/HurstK.Rd
a50f29d016d9a0993daea6c666f52952 *man/InvertibleQ.Rd
38cf63870be17fac3bf06f072e539ca0 *man/LLFD.Rd
d7fa81f60f9cde6d0eaebc16291bc41c *man/LLFGN.Rd
3c9722f4de3299c94dff3dd182683124 *man/LLPLA.Rd
a7c72172395a8bd84c79249d8a06716d *man/LLPLS.Rd
4c6e273e00c0ceff97155c22362ed225 *man/NileFlowCMS.Rd
6296911b3ad41f0c6976ddf8e1823c24 *man/NileMin.Rd
70a45d888c5c269406d5e6c39fffb4f4 *man/PacfToAR.Rd
494de5cca44cba5f832f02a79babaa2c *man/Reimann.Rd
fc4bdba6e71a77174263d5a7ffd84479 *man/SeriesB.Rd
453866911e9ba763331d9ac6039f789d *man/SimulateFD.Rd
22a83d1503940bbe3495642531d808bb *man/SimulateFGN.Rd
e3278c2d3c708788dbebf3797fec010a *man/WLoglikelihood.Rd
7e680dbfc2c844bdb0215bf835edeb30 *man/acvfFD.Rd
2f1de394855b3a0c5197096340b063f7 *man/acvfFGN.Rd
4d8cb860dcaaf47d73f6a8251a10f927 *man/acvfPLA.Rd
effb341cc53dfc1ad6ebf1ad16d064c3 *man/acvfPLS.Rd
d723458958bc58fd548f5bd7d5d39dba *man/coef.FitFGN.Rd
cdd4b31618308a06df35275aa0c7f01f *man/earfima.Rd
acb682b37599f8d86db9d32cfeb6433c *man/globtp.Rd
415fcf55b6461f49ebcbf674d37434b2 *man/plot.FitFGN.Rd
e687cc9c8e11a577839eebb76c49efd0 *man/predict.FitFGN.Rd
582ec6520d761f8b8ad961da7a6e2a64 *man/print.FitFGN.Rd
Expand All @@ -76,4 +94,10 @@ e687cc9c8e11a577839eebb76c49efd0 *man/predict.FitFGN.Rd
9624854641abca8231687c814a486a0f *man/sdfFGN.Rd
ccc078af00486b96516cb780b272fe97 *man/sdfPLA.Rd
0dfe505b306b1e1cbd3ec2e94189a72c *man/sdfPLS.Rd
a191b29ed46da52184fe8834c468b148 *man/sdfarma.Rd
de3398fa8395c7024850c4975d5cf6cd *man/sdfhd.Rd
880cbcefc7461be5ccedbeb931ad1b29 *man/summary.FitFGN.Rd
154ea0b0fb507285a69dda7d4cd4d5f3 *man/tacvfARFIMA.Rd
3d9188d755aac2e0190cc9a995c9733e *man/warfima.Rd
d9cf118d94dfc5a2d09eeb47b1b7320b *src/Makevars
0e0aca6610678156d51c2c44163b498c *src/tacf.c
4 changes: 4 additions & 0 deletions NAMESPACE
@@ -1,10 +1,14 @@
useDynLib(FGN, shift_C, tacvfARMA_C, tacvfFDWN_C, tacfHD_C, tacfFGN_C)

import("ltsa")

export(
"acvfFGN", "acvfFD", "acvfPLA", "acvfPLS",
"sdfFGN", "sdfFD", "sdfPLA", "sdfPLS",
"LLFGN", "LLFD", "LLPLA", "LLPLS",
"GetFitFGN", "GetFitPLA", "GetFitFD", "GetFitPLS",
"sdfarma", "sdfhd", "warfima", "WLoglikelihood", "earfima",
"InvertibleQ", "ARToPacf", "PacfToAR", "tacvfARFIMA",
"FitFGN",
"Reimann",
"Boot.FitFGN",
Expand Down
9 changes: 6 additions & 3 deletions NEWS
@@ -1,10 +1,13 @@
CHANGES IN 'FGN' VERSION 2.0 (2012-09-06W)
CHANGES IN 'FGN' VERSION 2.0-3 (2013-03-11)
o ACM license, restricts to academic use
CHANGES IN 'FGN' VERSION 2.0-2 (2013-03-10)
o added warfima, earfima, WLoglikelihood, sdfhd, sdfarma, Series B, globtp
CHANGES IN 'FGN' VERSION 2.0 (2012-09-06)
o citation revised
o new functions for HD and FD models
CHANGES IN 'FGN' VERSION 1.4 (2010-11-30)
o fixed NAMESPACE problem
CHANGES IN 'FGN' VERSION 1.5 (2011-02-11)
o citation corrected




Expand Down
17 changes: 17 additions & 0 deletions R/ARToPacf.R
@@ -0,0 +1,17 @@
`ARToPacf` <-
function(phi){
phik=phi
L=length(phi)
if(L==0) return(0)
pi=numeric(L)
for (k in 1:L){
LL=L+1-k
a <- phik[LL]
pi[L+1-k] <- a
phikp1 <- phik[-LL]
if(is.na(a) || abs(a)==1)
stop("transformation is not defined, partial correlation = 1")
phik <- (phikp1+a*rev(phikp1))/(1-a^2)
}
pi
}
4 changes: 4 additions & 0 deletions R/InvertibleQ.R
@@ -0,0 +1,4 @@
`InvertibleQ` <-
function(phi){
identical(TRUE,try(all(abs(ARToPacf(phi))<1),silent=TRUE))
}
13 changes: 13 additions & 0 deletions R/PacfToAR.R
@@ -0,0 +1,13 @@
`PacfToAR` <-
function(zeta){
L=length(zeta)
if (L==0) return(numeric(0))
if (L==1) return(zeta)
phik=zeta[1]
for (k in 2:L){
phikm1=phik
phik=c(phikm1-zeta[k]*rev(phikm1),zeta[k])
}
phik
}

24 changes: 24 additions & 0 deletions R/WLoglikelihood.R
@@ -0,0 +1,24 @@
WLoglikelihood <- function(z, beta, p, q, lmodel) {
ialpha <- ifelse(identical(lmodel,"NONE"), 0, 1)
alpha <- ifelse(ialpha==1, beta[1], 1)
phi <- theta <- numeric(0)
n <- length(z)
Ip <- (spec.pgram(z, fast=FALSE, detrend=FALSE, plot=FALSE, taper=0)$spec)/(2*pi)
if (alpha<=0 || alpha >=2 || (ialpha==1&&(p>0||q>0)&&abs(beta[-1]) >= 1))
L <- LL <- (-n/2*log(sum(z^2)/n))-10^4 else {
if(p>0) phi <- PacfToAR(beta[(1+ialpha):(p+ialpha)])
if(q>0) theta <- PacfToAR(beta[(ialpha+p+1):(p+q+ialpha)])
fp <- sdfhd(n, alpha=alpha, phi=phi, theta=theta, lmodel=lmodel)
sigHat <- mean(Ip/fp)
L <- ifelse(lmodel%in%c("FGN", "PLA", "PLS"), -2*sum(log(sigHat*fp)), -2*sigHat)
r <- switch(lmodel,
FD=tacvfARFIMA(phi = phi, theta = theta, dfrac = 0.5-alpha/2, maxlag = n-1),
FGN=tacvfARFIMA(phi = phi, theta = theta, H = 1-alpha/2, maxlag = n-1),
PLA=tacvfARFIMA(phi = phi, theta = theta, alpha = alpha, maxlag = n-1),
NONE=tacvfARFIMA(phi = phi, theta = theta, maxlag = n-1) )
LL <- DLLoglikelihood(r, z)
}
ans <- c(L, LL)
names(ans) <- c("Whittle", "Exact")
ans
}
51 changes: 51 additions & 0 deletions R/earfima.R
@@ -0,0 +1,51 @@
earfima <- function(z, order=c(0,0,0), lmodel=c("FD", "FGN", "PLA", "NONE")) {
lmodel <- match.arg(lmodel)
p <- order[1]
d <- order[2]
q <- order[3]
stopifnot(p >= 0, q >= 0, d >= 0)
is.wholenumber <- function(x, tol = .Machine$double.eps^0.5) abs(x - round(x)) < tol
stopifnot(is.wholenumber(p), is.wholenumber(d), is.wholenumber(q))
w <- if(d>0) diff(z, differences=d) else z
w <- w-mean(w)
n <- length(w)
alg <- 1
binit <- numeric(p+q+1)
binit[1] <- 1
penaltyLoglikelihood <- (-n/2*log(sum(w^2)/n))*0.01
Entropy<-function(beta, p, q) {
alpha <- beta[1]
phi <- theta <- numeric(0)
if (alpha<=0 || alpha >=2 || (p>0||q>0)&&abs(beta[-1]) >= 1)
LL <- -penaltyLoglikelihood else {
if(p>0) phi <- PacfToAR(beta[2:(p+1)])
if(q>0) theta <- PacfToAR(beta[(p+2):(p+q+1)])
r <- switch(lmodel,
FD=tacvfARFIMA(phi = phi, theta = theta, dfrac = 0.5-alpha/2, maxlag = n-1),
FGN=tacvfARFIMA(phi = phi, theta = theta, H = 1-alpha/2, maxlag = n-1),
PLA=tacvfARFIMA(phi = phi, theta = theta, alpha = alpha, maxlag = n-1),
NONE=tacvfARFIMA(phi = phi, theta = theta, maxlag = n-1) )
LL <- -DLLoglikelihood(r, w)
}
LL
}
if (p+q>0 || lmodel!="NONE") {
ans<-optim(par=binit, fn=Entropy, p=p, q=q, method="L-BFGS-B", lower=c(0.01,rep(-0.99,p+q)), upper=c(1.99,rep(0.99,p+q)), control=list(trace=0))
if(ans$convergence != 0) {#convergence problem. Use Nelder-Mead with penalty function
alg<-2
ans<-optim(par=binit, fn=Entropy, method="Nelder-Mead")
}
bHat <- ans$par
LL <- -ans$value
convergence <- ans$convergence
} else {
bHat <- numeric(0)
LL <- -Entropy(1, 0, 0)
convergence <- 0
}
alphaHat <- bHat[1]
HHat <- 1-alphaHat/2
dHat <- HHat - 0.5
phiHat <- thetaHat <- numeric(0)
list(bHat=bHat, alphaHat=alphaHat, HHat = HHat, dHat=dHat, phiHat=phiHat, thetaHat=thetaHat, LL=LL, convergence=convergence)
}
1 change: 1 addition & 0 deletions R/sdfPLA.R
@@ -1,4 +1,5 @@
sdfPLA <- function(a, n){
if (abs(a-1) < 0.001) return(sdfFGN(0.5, n))
stopifnot(a<2)
stopifnot(n>2)
lams<-c(1.,
Expand Down
22 changes: 22 additions & 0 deletions R/sdfarma.R
@@ -0,0 +1,22 @@
sdfarma <- function(n, phi=numeric(0), theta=numeric(0)) {
lams <- 2*pi*seq(from=1/n, to=1/2, by=1/n)
nf <- length(lams)
a <- outer(lams, 1:length(theta))
if (length(theta)>0) {
C <- cbind(1, cos(a))%*% c(1, -theta)
S <- sin(a) %*% theta
} else {
C <- 1
S <- 0
}
num <- as.vector(C*C + S*S)/(2*pi)
if (length(phi)>0) {
C <- cbind(1, cos(a))%*% c(1, -phi)
S <- sin(a) %*% theta
} else {
C <- 1
S <- 0
}
den <- as.vector(C*C+S*S)
num/den
}
13 changes: 13 additions & 0 deletions R/sdfhd.R
@@ -0,0 +1,13 @@
sdfhd <- function(n, alpha=1, phi=numeric(0), theta=numeric(0), lmodel=c("FD", "FGN", "PLA", "NONE")) {
lmodel <- match.arg(lmodel)
if(!(InvertibleQ(phi)&&InvertibleQ(theta)&&alpha>0&&alpha<2))
stop("error: non-invertible or non-stationary")
if(length(phi)==0&&length(theta)==0) s1 <- 1 else s1 <- 2*pi*sdfarma(n, phi, theta)
s2 <- switch(lmodel,
FD = sdfFD((1-alpha)/2, n),
FGN = sdfFGN(1-alpha/2, n),
PLA = sdfPLA(alpha, n),
PLS = sdfPLS(alpha, n),
NONE = sdfFGN(0.5, n))
s1*s2
}

0 comments on commit d49d7e5

Please sign in to comment.