Learn R Programming

collapse (version 1.1.0)

psacf: Auto- and Cross- Covariance and -Correlation Function Estimation for Panel-Series

Description

psacf, pspacf and psccf compute (and by default plot) estimates of the auto-, partial auto- and cross- correlation or covariance functions for panel-vectors and plm::pseries. They are analogues to stats::acf, stats::pacf and stats::ccf.

Usage

psacf(x, …)
pspacf(x, …)
psccf(x, y, …)

# S3 method for default
psacf(x, g, t = NULL, lag.max = NULL, type = c("correlation", "covariance","partial"),
      plot = TRUE, gscale = TRUE, …)
# S3 method for default
pspacf(x, g, t = NULL, lag.max = NULL, plot = TRUE, gscale = TRUE, …)
# S3 method for default
psccf(x, y, g, t = NULL, lag.max = NULL, type = c("correlation", "covariance"),
      plot = TRUE, gscale = TRUE, …)

# S3 method for pseries
psacf(x, lag.max = NULL, type = c("correlation", "covariance","partial"),
      plot = TRUE, gscale = TRUE, …)
# S3 method for pseries
pspacf(x, lag.max = NULL, plot = TRUE, gscale = TRUE, …)
# S3 method for pseries
psccf(x, y, lag.max = NULL, type = c("correlation", "covariance"),
      plot = TRUE, gscale = TRUE, …)

# S3 method for data.frame
psacf(x, by, t = NULL, cols = is.numeric, lag.max = NULL,
      type = c("correlation", "covariance","partial"), plot = TRUE, gscale = TRUE, …)
# S3 method for data.frame
pspacf(x, by, t = NULL, cols = is.numeric, lag.max = NULL,
       plot = TRUE, gscale = TRUE, …)

 # S3 method for pdata.frame
psacf(x, cols = is.numeric, lag.max = NULL,
      type = c("correlation", "covariance","partial"), plot = TRUE, gscale = TRUE, …)
# S3 method for pdata.frame
pspacf(x, cols = is.numeric, lag.max = NULL, plot = TRUE, gscale = TRUE, …)

Arguments

x, y

a numeric vector, panel-series (plm::pseries), data.frame or panel-data-frame (plm::pdata.frame).

g

a factor, GRP object, atomic vector (internally converted to factor) or a list of vectors / factors (internally converted to a GRP object) used to group x, y.

by

data frame method: Same input as g, but also allows one- or two-sided formulas using the variables in x, i.e. ~ idvar or var1 + var2 ~ idvar1 + idvar2.

t

same input as g, to indicate the time-variable. For secure computations on unordered panel-vectors. Data frame method also takes one-sided formula i.e. ~time.

cols

data.frame method: Select columns using a function, column names or indices. Note: cols is ignored if a two-sided formula is passed to by.

lag.max

maximum lag at which to calculate the acf. Default is 2*sqrt(length(x)/ng) where ng is the number of groups in the panel-series / supplied to g.

type

character string giving the type of acf to be computed. Allowed values are "correlation" (the default), "covariance" or "partial".

plot

logical. If TRUE (the default) the acf is plotted.

gscale

logical. Do a groupwise scaling / standardization of x, y (using collapse::fscale and the groups supplied to g) before computing panel-autocovariances / correlations.

further arguments to be passed to stats:::plot.acf.

Value

An object of class "acf", see ?stats::acf. The result is returned invisibly if plot is TRUE.

Details

If gscale = TRUE data are standardized within each group (using collapse::fscale) such that the group-mean is 0 and the group-standard deviation is 1. This is strongly recommended for most panels to get rid of individual-specific heterogeneity which would corrupt the ACF computations.

After scaling, psacf, pspacf and psccf compute the ACF/CCF by creating a matrix of panel-lags of the series using collapse::flag and then correlating this matrix with the series (x, y) using stats::cor and pairwise-complete observations. This may require a lot of memory on large data, but is done because passing a sequence of lags to collapse::flag and thus calling collapse::flag and stats::cor one time is much faster than calling them lag.max times. The partial ACF is computed from the ACF in the same way as in stats::pacf.

See Also

Time-Series and Panel-Series, Collapse Overview

Examples

Run this code
# NOT RUN {
## World Development Panel Data
head(wlddev)                                                    # see also help(wlddev)
psacf(wlddev$PCGDP, wlddev$country, wlddev$year)                # ACF of GDP per Capita
psacf(wlddev, PCGDP ~ country, ~year)                           # Same using data.frame method
psacf(wlddev$PCGDP, wlddev$country)                             # The Data is sorted, can omit t
pspacf(wlddev$PCGDP, wlddev$country)                            # Partial ACF
psccf(wlddev$PCGDP, wlddev$LIFEEX, wlddev$country)              # CCF with Life-Expectancy at Birth

psacf(wlddev, PCGDP + LIFEEX + ODA ~ country, ~year)            # ACF and CCF of GDP, LIFEEX and ODA
psacf(wlddev, ~ country, ~year, c(9:10,12))                     # Same, using cols argument
pspacf(wlddev, ~ country, ~year, c(9:10,12))                    # Partial ACF

## Using plm:
pwlddev <- plm::pdata.frame(wlddev, index = c("country","year"))# Creating a Panel-Data Frame
PCGDP <- pwlddev$PCGDP                                          # Panel-Series of GDP per Capita
LIFEEX <- pwlddev$LIFEEX                                        # Panel-Series of Life Expectancy
psacf(PCGDP)                                                    # Same as above, more parsimonious
pspacf(PCGDP)
psccf(PCGDP, LIFEEX)
psacf(pwlddev[c(9:10,12)])
pspacf(pwlddev[c(9:10,12)])
# }

Run the code above in your browser using DataLab