knitr::opts_chunk$set( collapse = TRUE, comment = "#>", fig.align = "center", fig.width = 6, fig.height = 4 ) library(gctsc) set.seed(1)
The gctsc package provides fast and scalable tools for fitting
Gaussian and Student t copula models for count time series, supporting a wide range of discrete marginals:
These models are constructed from a latent ARMA process combined with a discrete marginal distribution. Likelihood evaluation requires computing multivariate probabilities under Gaussian or Student–t dependence structures.
The package provides several likelihood approximation methods:
In addition, the package offers:
A key feature of the package is the TMET method, which exploits the conditional structure of ARMA processes to compute likelihood approximations efficiently even for long time series. The package also includes the classical GHK simulator and the Continuous Extension approximation for comparison.
This vignette illustrates the main functionality of the gctsc package,
including simulation, likelihood approximation, model fitting, diagnostics,
and prediction for copula-based count time series models.
The package can be installed from CRAN using
install.packages("gctsc")
The development version is available at
remotes::install_github("QNNHU/gctsc")
The package provides tools for simulation, likelihood evaluation, estimation, diagnostics, and prediction for copula-based count time series models with Gaussian or Student–t copula dependence.
The package implements several likelihood approximation methods, including Time Series Minimax Exponential Tilting (TMET), the classical Geweke–Hajivassiliou–Keane (GHK) simulator, and the Continuous Extension (CE) approximation.
| Function | Description |
|--------|-------------|
| sim_*() | Simulate copula count time series with latent ARMA dependence |
| pmvn_*() / pmvt_*() | Compute multivariate rectangle probabilities for Gaussian and Student–t copulas |
| gctsc() | Fit Gaussian or Student–t copula count time series models |
| predict() | Compute one-step-ahead predictive distributions and moments |
| plot() | Produce residual diagnostic plots |
| summary() | Display parameter estimates and model fit statistics |
The following sections illustrate the main functionality of the package, including simulation, likelihood approximation, model estimation, diagnostics, and prediction.
n <- 300 mu <- 10 phi <- 0.2 arma_order <- c(1, 0) tau <- c(phi) sim_data <- sim_poisson( mu = mu, tau = tau, arma_order = arma_order, nsim = n, family = "gaussian", seed = 7 ) y <- sim_data$y plot(y, type = "l", main = "Simulated Poisson AR(1) Counts: Gaussian Copula")
n <- 300 mu <- 10 phi <- 0.2 arma_order <- c(1, 0) tau <- c(phi) sim_data <- sim_poisson( mu = mu, tau = tau, arma_order = arma_order, nsim = n, family = "t", df = 5, seed = 7 ) y <- sim_data$y plot(y, type = "l", main = "Simulated Poisson AR(1) Counts: t Copula")
n <- 300 phi <- 0.5 tau <- c(phi) beta_0 <- 1.2 prob <- plogis(beta_0) rho <- 0.1 pi0 <- 0.8 size <- 24 set.seed(7) sim_data <- sim_zibb(prob = prob * rep(1,n), rho = rho, pi0 = pi0, size = size, tau = tau, arma_order = c(1,0), family = "gaussian", nsim = n) y <- sim_data$y plot(y, type = "l", main = "Simulated ZIBB AR(1) Counts: gaussian Copula")
n <- 300 mu <- 10 phi <- 0.5 theta <- 0.2 arma_order <- c(1,1) tau <- c(phi, theta) # Simulate Poisson count data sim_data <- sim_poisson(mu, tau, arma_order, nsim = n, seed = 1) y <- sim_data$y # Compute bounds for truncated MVN using marginal object marg <- poisson.marg() lower <- qnorm(ppois(y - 1, lambda = mu)) upper <- qnorm(ppois(y, lambda = mu)) # Likelihood approximation llk_tmet <- pmvn_tmet(lower, upper, tau, od = arma_order, pm = 30, QMC = TRUE) llk_ghk <- pmvn_ghk(lower, upper, tau, od = arma_order, QMC = TRUE) llk_ce <- pmvn_ce(lower, upper, tau, od = arma_order) c(TMET = llk_tmet, GHK = llk_ghk, CE = llk_ce)
n <- 300 mu <- 10 phi <- 0.5 theta <- 0.2 arma_order <- c(1,1) tau <- c(phi, theta) # Simulate Poisson count data sim_data <- sim_poisson(mu, tau, arma_order, nsim = n, seed = 1, family ="gaussian") y <- sim_data$y fit <- gctsc( formula = y ~ 1, marginal = poisson.marg(), cormat = arma.cormat(p = 1, q = 1), method = "CE", family ="gaussian" ) summary(fit)
oldpar <- par(no.readonly = TRUE) par(mfrow = c(2,3)) plot(fit) par(oldpar)
prediction <- predict( fit, y_obs = 10 ) prediction
n <- 100 mu <- 10 phi <- 0.5 theta <- 0.2 arma_order <- c(1,1) tau <- c(phi, theta) # Simulate Poisson count data sim_data <- sim_poisson(mu, tau, arma_order, nsim = n, family = "t", df= 15, seed = 1) y <- sim_data$y fit <- gctsc( formula = y ~ 1, marginal = poisson.marg(), cormat = arma.cormat(p = 1, q = 1), method = "CE", family ="t", df= 15 ) summary(fit)
## Load weekly Campylobacter incidence data data("campyl", package = "gctsc") y <- campyl[,"X1"] n <- length(y) ## Plot the time series ts_y <- ts(y, start = c(2001, 1), frequency = 52) plot(ts_y, main = "Weekly Campylobacter Incidence", ylab = "Cases", xlab = "Year") ## --------------------------------------------------------------- ## Construct seasonal covariates ## --------------------------------------------------------------- ## Seasonal structure appears to have yearly periodicity, ## so we include sine/cosine terms with period = 52 weeks. time <- 1:n X <- data.frame( intercept = 1, sin52 = sin(2 * pi * time / 52), cos52 = cos(2 * pi * time / 52) ) ## Combine response and covariates data_df <- data.frame(Y = y, X) ## Use the first 800 observations for model fitting train_end <- 1000 data_train <- data_df[1:train_end, ] ## --------------------------------------------------------------- ## Fit a Negative Binomial Gaussian Copula model ## --------------------------------------------------------------- ## We use: ## - Negative Binomial marginal (log link) ## - ARMA(1,1) latent correlation structure ## - GHK likelihood approximation ## ## The model is: ## E[Y_t] = exp(β0 + β1 sin + β2 cos) ## ## Covariates enter only through the marginal mean. fit <- gctsc( formula = Y ~ sin52 + cos52, data = data_train, marginal = negbin.marg(link = "log"), cormat = arma.cormat(p = 1, q = 1), method = "CE", family ="gaussian", options = gctsc.opts(seed = 1) # fixed seed for reproducibility ) summary(fit) ## --------------------------------------------------------------- ## Residual diagnostics ## --------------------------------------------------------------- oldpar <- par(no.readonly = TRUE) on.exit(par(oldpar)) # restore user settings par(mfrow=c(2,3)) plot(fit) ## --------------------------------------------------------------- ## One-step-ahead prediction ## --------------------------------------------------------------- ## Predict Y_{801} using fitted model new_obs_index <- train_end + 1 pred <- predict( fit, X_test = data_df[new_obs_index, ], y_obs = data_df[new_obs_index, "Y"] ) pred
Further examples (Negative Binomial, Binomial,Beta-Binomial, ZIP, ZIB, ZIBB, including cases with covariates) and another real data analysis are available in the inst/examples/ directory of the package source.
Any scripts or data that you put into this service are public.
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.