Learn R Programming

ArfimaMLM (version 1.3)

arfimaOLS: Arfima-OLS for repeated cross-sectional data and/or pooled cross-sectional time-series data

Description

Estimates Arfima-OLS model for repeated cross-sectional data or pooled cross-sectional time-series data. For the variables specified by the user, the function automatically implements the aggregation and fractional differencing of time/level variables as well as the necessary procedures to remove deterministic components from the dependent as well as the major independent variables.

Usage

arfimaOLS(formula, data, timevar
          , d = "Hurst", arma = NULL
          , ecmformula = NULL, decm = "Hurst"
          , drop = 5, report.data = TRUE, ...)

Arguments

formula
An object of the class ``formula'' that specifies the linear model to be estimated (see lm for details), typically with the response on the left of a ~ operator a
data
Data frame containing the original variables named in formula.
timevar
Name of the variable indicating different timepoints in data.
d
Call for a specific estimation method for the fractional differencing parameter in the fractal-package (``Hurst'') or in the
arma
List of variables for which AR and MA parameters are to be estimated (after fractional differencing) as well as a vector containing the respective orders of the model to fit. order[1] corresponds to the AR part and order[2] to th
ecmformula
Specification of the cointegration regression to receive the residuals for the error correction mechanism (ecm) included in formula: linear formula object with the response on the left of a ~ operator and the independent variables, separated
decm
Call for estimation method for the fractional differencing parameter (see d for details). Can be either ``Hurst'' ``ML'', ``GPH'', or ``Sperio''. Default is ``Hurst''.
drop
Number of time points from the beginning of the series dropped from analysis. Default is 5.
report.data
Logical. arfimaOLS returns the transformed dataset used to estimate the final model as part of the results. Default is TRUE.
...
Further arguments passed to the estimation procedures used within the function (e.g. for lm).

Value

  • The function returns a list of the class 'arfimaOLS' with the following items:
  • resultOutput of the linear model as specified in formula.
  • dMatrix of fractional differencing parameters estimated for the level variables (.fd and .ydif) as well as the estimation method for each variable. Returns the specified value for d if it was specified in the initial call of the function.
  • armaList of arima results for each variable specified in the model call. Contains AR/MA estimates as well as the model residuals.
  • ecmOutput of the cointegration regression (returned if ecmformula is specified). The lagged residuals of the cointegration regression are included in the multilevel model if ecm is included in formula.
  • data.meanData frame of variable means declared in formula as .fd, .xdif or .ydif (as well as .mean in ecmformula) for each time point specified by the level variable in timevar.
  • data.fdData frame of fractionally differenced level variables for each time point specified in timevar, which were declared as .fd or .ydif in formula. If arma was additionally specified for a variable, it contains the residuals of the ARMA model fitted after (fractionally) differencing.
  • data.mergedMerged data frame used to estimate the OLS model consisting of the original data, data.mean, data.fd, as well as the variables specified as .xdif and .ydif in formula

Details

  • The original variable names ofdataused informulacan be extended by adding three different suffixes:.fd,.xdif, and.ydif. These suffixes select variables for transformations according to the Arfima-OLS framework before estimating the actual model.

    The suffix.fdallows the user to select variables which are supposed to be transformed to a fractionally differenced level-variable (by aggregating individuals over each time point prior to fractionally differencing the series), or variables which are already included as a level-variable in the original dataset and are just supposed to be fractionally differenced before the multilevel model is estimated.

    If the suffix.xdifis added to an independent variable, the variable is simply filtered through the timepoint averages:$$x.star[it]=x[it]-X[t]$$If the suffix.ydifis added to the dependent variable (e.g.$y[it]$), the function will remove the temporal deterministic component from the individual level variable, such that it only consists of within-timepoint, as well as non-temporally autocorrelated between-timepoint variation:$$y.star[it]=y[it]-(Y[t]-\Delta[df]Y[t])$$

  • Ifformulacontainsecmas one of the independent variables, andecmformulais correctly specified, the function will include the lag of the fractionally differenced residuals of the cointegration regression as an error correction mechanism in the multilevel model. The ECM does not have to be estimated prior to calling the function.
  • In order to prevent errors in the estimation procedure, none of the original variable names indatashould include ``.ydif'', ``.xdif'' or ``.fd''.

References

Lebo, M. and Weber, C. 2015. ``An Effective Approach to the Repeated Cross Sectional Design.'' American Journal of Political Science 59(1): 242-258.

See Also

lm, fracdiff, hurstSpec, arfimaPrep, fd, and ArfimaMLM for a package overview.

Examples

Run this code
require(fractal)
require(fracdiff)

### set basic parameters for simulation
t = 100 # number of time points
n = 500 # number of observations within time point
N = t*n # total number of observations

### generate fractional ARIMA Time Series for y_t, x1_t, z1_t, z2_t
set.seed(123)
y_t <- fracdiff.sim(t, d=0.4, mu=10)$series
x1_t <- fracdiff.sim(t, d=0.3, mu=5)$series
z1_t <- fracdiff.sim(t, d=0.1, mu=2)$series
z2_t <- fracdiff.sim(t, d=0.25, mu=3)$series

### simulate data
data <- NULL; data$time <- rep(seq(1:t),each=n)
data <- data.frame(data)
data$x1 <- rnorm(N,rep(x1_t,each=n),2)
data$x2 <- rnorm(N,0,40)
data$z1 <- rnorm(N,rep(z1_t,each=n),3)
data$z2 <- rep(z2_t,each=n)
b1 <- 0.2+rep(rnorm(t,0,0.1),each=n)
data$y <- (b1*data$x1-0.05*data$x2+0.3*rep(z1_t,each=n)
            +0*data$z2+rnorm(N,rep(y_t,each=n),1))


### estimate models

# basic example
m1 <- arfimaOLS(y.ydif ~ x1.xdif + x2 + z1.fd + z2.fd
                , data = data, timevar = "time")
                
# model including error correction mechanism
# change estimation method for differencing parameter for all variables
m2 <- arfimaOLS(y.ydif ~ x1.xdif + x2 + z1.fd + z2.fd + ecm
                , data = data, timevar = "time", d="ML"
                , ecmformula = y.mean ~ x1.mean
                , decm="Sperio")
                
# vary estimation method for differencing parameter between variables
# specify AR/MA models
m3 <- arfimaOLS(y.ydif ~ x1.xdif + x2 + z1.fd + z2.fd
                , data = data, timevar = "time"
                , d=list(y="ML", z1="Sperio", z2=0.25)
                , arma=list(y=c(1,0),z2=c(0,1)))                
                
# specify AR/MA models while holding AR[2] fixed for y
m4 <- arfimaOLS(y.ydif ~ x1.xdif + x2 + z1.fd + z2.fd
                , data = data, timevar = "time"
                , arma=list(y=list(c(1,3),0),z2=c(0,1)))                 

m1
summary(m2)
summary(m3$result)
m4$arma

Run the code above in your browser using DataLab