R/PcdiffTwoBlockUnitRoots.R

Defines functions pcdiff.piar2unit.block

Documented in pcdiff.piar2unit.block

#' @title Periodically differenced data when there are two block unit roots in original data
#' @description Periodically differenced data when there are two block unit roots in original data
#' @param pcts the original time series (assumed there are two block unit roots)
#' @param parameters parameters of second order differencing filter $(1-\beta_sL)(1-\alpha_sL)$
#' @param d period has been fixed to 4 (quarterly period)
#'
#' @return Periodically differenced data
#' @export
#'
#' @examples
#' library(pcts)
#' library(mcompanion)
#' set.seed(123)
#' F <- sim_mc(dim = 4, mo = 4, mo.col = 2, eigval = c(1), len.block = c(2))
#' phi <- new("MultiFilter", mc =  mCompanion(F$mat, mo = 4, mo.col = 2))
#' pc.sim <- sim_pc(model = list(phi = phi[], p = 2, period = 4), n = 500)
#' # coefficients of second order filter
#' icoef <- piar2unit.block(Xsim = F$eigvec, d = 4)
#' pcdiff.pc.sim <- pcdiff.piar2unit.block(pcts = pc.sim, parameters = icoef, d=4)

pcdiff.piar2unit.block <- function(pcts, parameters, d = 4) {
  YT <- matrix(c(pcts), nrow = d)
  YTmin1 <- cbind(rep(0, d), YT[, 1:(ncol(YT) - 1)])
  Theta0 <- matrix(0, nrow = d, ncol = d)
  Theta1 <- matrix(0, nrow = d, ncol = d)
  diag(Theta0) <- c(rep(1, d))
  for (i in 2:d) {
    Theta0[i, i - 1] <- -(parameters$alpha[i] + parameters$beta[i])
    Theta0[i, i - 2] <- parameters$beta[i] * parameters$alpha[i - 1]
  }
  Theta1[1, d - 1] <- parameters$beta[1] * parameters$alpha[d]
  Theta1[1, d] <- -(parameters$beta[1] + parameters$alpha[1])
  Theta1[2, d] <- parameters$beta[2] * parameters$alpha[1]
  pcdiff <- Theta0 %*% YT + Theta1 %*% YTmin1
  return(pcdiff)
}
YueyunZhu/UnitRootsofPIAR documentation built on Feb. 13, 2020, 12:32 a.m.