Package {prais}


Encoding: UTF-8
Type: Package
Title: Prais-Winsten Estimator for AR(1) Serial Correlation
Version: 1.2.0
Description: The Prais-Winsten estimator (Prais & Winsten, 1954) takes into account AR(1) serial correlation of the errors in a linear regression model. The procedure recursively estimates the coefficients and the error autocorrelation of the specified model until sufficient convergence of the AR(1) coefficient is attained.
License: GPL-2 | GPL-3 [expanded from: GPL (≥ 2)]
Depends: R (≥ 3.2.0), sandwich, pcse
Imports: stats
Suggests: haven, lmtest, testthat (≥ 3.0.0)
URL: https://github.com/franzmohr/prais
BugReports: https://github.com/franzmohr/prais/issues
Collate: 'data.R' 'prais-package.R' 'prais_winsten.R' 'predict.prais.R' 'print.prais.R' 'summary.prais.R' 'print.summary.prais.R' 'pw_transform.R' 'vcovHC.R' 'vcovPC.R'
LazyData: true
Config/testthat/edition: 3
Config/roxygen2/version: 8.1.0
NeedsCompilation: no
Packaged: 2026-09-18 21:22:03 UTC; mo_fr
Author: Franz X. Mohr ORCID iD [aut, cre], Michael Škvrňák ORCID iD [ctb]
Maintainer: Franz X. Mohr <franz.x.mohr@outlook.com>
Repository: CRAN
Date/Publication: 2026-09-18 21:40:02 UTC

prais: Prais-Winsten Estimator for AR(1) Serial Correlation

Description

The Prais-Winsten estimator (Prais & Winsten, 1954) takes into account AR(1) serial correlation of the errors in a linear regression model. The procedure recursively estimates the coefficients and the error autocorrelation of the specified model until sufficient convergence of the AR(1) coefficient is attained.

Author(s)

Maintainer: Franz X. Mohr franz.x.mohr@outlook.com (ORCID)

Authors:

Other contributors:

See Also

Useful links:


Barium

Description

Monthly microeconomic data from the U.S. chemical industry from February 1978 to December 1988 as used in Krupp and Pollard (1996) and subsequently re-used by Wooldridge (2000) as a textbook dataset. Raw data was obtained from http://fmwww.bc.edu/ec-p/data/wooldridge/barium.dta.

Usage

data("barium")

Format

A data frame with 131 rows and 31 variables:

chnimp

Chinese imports, bar. chl.

bchlimp

Total imports, bar. chl.

befile6

Dummy variable, which is 1 for all six months before filing.

affile6

Dummy variable, which is 1 for all six months after filing.

afdec6

Dummy variable, which is 1 for all six months after decision

befile12

Dummy variable, which is 1 for all twelve months before filing.

affile12

Dummy variable, which is 1 for all twelve months after filing.

afdec12

Dummy variable, which is 1 for all twelve months after decision.

chempi

Chemical production index.

gas

Gasoline production.

rtwex

Exchange rate index.

spr

Dummy variable, which is 1 for spring months.

sum

Dummy variable, which is 1 for summer months.

fall

Dummy variable, which is 1 for fall months.

lchnimp

Log of chnimp.

lgas

Log of gas.

lrtwex

Log of rtwex.

lchempi

Log of chempi.

t

Time trend.

feb

Dummy variable for February.

mar

Dummy variable for March.

apr

Dummy variable for April.

may

Dummy variable for May.

jun

Dummy variable for June.

jul

Dummy variable for July.

aug

Dummy variable for August.

sep

Dummy variable for September.

oct

Dummy variable for October.

nov

Dummy variable for November.

dec

Dummy variable for December.

percchn

Percent of imports from China.

References

Krupp, C.M., & Pollard, P.S., (1996). Market responses to antidumping laws: Some evidence from the U.S. chemical industry. Canadian Journal of Economics 29(1), 199–227. doi:10.2307/136159

Wooldridge, J., (2000). Instructional Stata datasets for econometrics. [barium]. Boston College Department of Economics.


Prais-Winsten Estimator for AR(1) Serial Correlation

Description

The Prais-Winsten estimator takes into account AR(1) serial correlation of the errors in a linear regression model. The procedure recursively estimates the coefficients and the error autocorrelation of the specified model until sufficient convergence of the AR(1) coefficient is reached. All estimates are obtained by OLS.

Usage

prais_winsten(
  formula,
  data,
  index,
  max_iter = 50L,
  tol = 1e-06,
  twostep = FALSE,
  panelwise = FALSE,
  rhoweight = c("none", "T", "T1"),
  ...
)

## S3 method for class 'prais'
print(x, digits = max(3L, getOption("digits") - 3L), ...)

Arguments

formula

an object of class "formula" (or one that can be coerced to that class): a symbolic description of the model to be fitted.

data

a data frame containing the variables in the model. If panel data is used, it must also contain the ID and time variables.

index

a character vector specifying the ID and time variables. If only one variable is provided, it is assumed to be the time variable and the data will be reordered accordingly. The specified variables must not contain NA values.

max_iter

integer specifying the maximum number of allowed iterations. Default is 50.

tol

numeric specifying the maximum absolute difference between the estimator of rho in the current and the previous iteration that has to be attained to reach convergence. Default is 1e-6.

twostep

logical. If TRUE, the estimation will stop after the first iteration.

panelwise

logical. If TRUE, \rho will be calculated for each panel separately. Default is FALSE. Only used for panel data. See 'Details'.

rhoweight

character specifying how \rho should be calculated if panelwise = TRUE. See 'Details'.

...

arguments passed to lm.

x

an object of class "prais", usually, a result of a call to prais_winsten.

digits

the number of significant digits to use when printing.

Details

Observations with missing values in the variables of formula are dropped before estimation, as in lm. Since the Prais-Winsten transformation uses the previous observation of a panel, the observations that surround a dropped one are treated as if they were consecutive.

Estimates of \rho are bounded to the interval [-1, 1], because the transformation of the first observation of a panel requires (1 - \rho^2)^{(1 / 2)} to be real. If \rho attains one of those bounds, the first observation of each panel becomes zero and does not contribute to the estimates, so that the estimator effectively becomes the Cochrane-Orcutt estimator.

The time variable is only used to order the observations. If it is not equally spaced, a warning is issued, because the observations that surround a gap are treated as if they were consecutive.

If panelwise = TRUE, twostep = FALSE and rhoweight = "none", each individual estimate of rho is re-estimated until convergence is achieved for all coefficients.

If panelwise = TRUE, the calculation of \rho can be further specified in argument rhoweight. If rhoweight = "none", \rho is assumed to be panel-specific. If rhoweight = "T", \rho is calculated as a weighted mean of panel-specific estimates, where the number of available observations per panel, i.e. T_i, is used as weight. If rhoweight = "T1", \rho is calculated as a weighted mean of panel-specific estimates, where the number of available observations per panel minus one, i.e. T_i - 1, is used as weight.

Value

A list of class "prais" containing the following components:

coefficients

a named vector of coefficients.

rho

the values of the AR(1) coefficient \rho from all iterations.

residuals

the residuals, that is the response minus the fitted values.

fitted.values

the fitted mean values.

rank

the numeric rank of the fitted linear model.

df.residual

the residual degrees of freedom.

call

the matched call.

terms

the terms object used.

model

the original model frame, i.e., before the Prais-Winsten transformation.

xlevels

a record of the levels of the factors used in fitting.

contrasts

the contrasts used, if the model contains factors.

index

a character specifying the ID and time variables. Only added if panel data were used.

References

Beck, N. L. and Katz, J. N. (1995): What to do (and not to do) with time-series cross-section data. American Political Science Review 89, 634-647.

Prais, S. J. and Winsten, C. B. (1954): Trend Estimators and Serial Correlation. Cowles Commission Discussion Paper, 383 (Chicago).

Wooldridge, J. M. (2013): Introductory Econometrics. A Modern Approach. 5th ed. Mason, OH: South-Western Cengage Learning.

Examples

# Generate an artificial sample
set.seed(1234567)
n <- 100
x <- sample(20:40, n, replace = TRUE)
rho <- .5

# AR(1) errors
u <- rnorm(n, 0, 5)
for (i in 2:n) {
  u[i] <- u[i] + rho * u[i - 1]
}
pw_sample <- data.frame("x" = x, "y" = 10 + 1.5 * x + u, "time" = 1:n)

# Estimate
pw <- prais_winsten(y ~ x, data = pw_sample, index = "time")
summary(pw)


Predict Method for Objects of Class prais

Description

Predicted values based on Prais-Winsten object.

Usage

## S3 method for class 'prais'
predict(object, newdata = NULL, ...)

Arguments

object

an object of class "prais", usually, a result of a call to prais_winsten.

newdata

an optional data frame in which to look for variables with which to predict. It must contain the variables that appear in formula, which do not have to be transformed beforehand. If omitted, the fitted values are used.

...

further arguments passed to or from other methods.

Details

The predictions are the conditional mean of the model, i.e. the product of the regressors and the coefficients. The AR(1) structure of the errors is not used, so the result does not contain the forecast of the serially correlated part of the error term.

Value

A vector of predictions.

References

Prais, S. J. and Winsten, C. B. (1954): Trend Estimators and Serial Correlation. Cowles Commission Discussion Paper, 383 (Chicago).

Examples

# Generate an artificial sample
set.seed(1234567)
n <- 100
x <- sample(20:40, n, replace = TRUE)
rho <- .5

# AR(1) errors
u <- rnorm(n, 0, 5)
for (i in 2:n) {
  u[i] <- u[i] + rho * u[i - 1]
}
pw_sample <- data.frame("x" = x, "y" = 10 + 1.5 * x + u, "time" = 1:n)

# Estimate
pw <- prais_winsten(y ~ x, data = pw_sample, index = "time")

# Predict
fcst <- predict(pw)


Summarising the Prais-Winsten Estimator

Description

Summary method for class "prais".

Usage

## S3 method for class 'prais'
summary(object, ...)

## S3 method for class 'summary.prais'
print(
  x,
  digits = max(3L, getOption("digits") - 3L),
  signif.stars = getOption("show.signif.stars"),
  ...
)

Arguments

object

an object of class "prais", usually, a result of a call to prais_winsten.

...

further arguments passed to or from other methods.

x

an object of class "summary.prais", usually, a result of a call to summary.prais.

digits

the number of significant digits to use when printing.

signif.stars

logical. If TRUE, 'significance stars' are printed for each coefficient.

Value

summary.prais returns a list of class "summary.prais", which contains the following components:

call

the matched call.

residuals

the residuals of the Prais-Winsten transformed model, i.e. the residuals the reported standard errors are based on. The residuals on the scale of the original data are available as residuals of the estimated object.

coefficients

a named vector of coefficients.

rho

the values of the AR(1) coefficient \rho from all iterations.

sigma

the square root of the estimated variance of the random error.

df

degrees of freedom, a 3-vector (p, n-p, p*), the first being the number of non-aliased coefficients, the last being the total number of coefficients.

r.squared

R^2, the 'fraction of variance explained by the model',

R^2 = 1 - \frac{\sum {(y_i - \hat{y}_i)^2}}{\sum {(y_i - \overline{y})^2}},

where \overline{y} is the mean of y_i for y_i = 1, ..., N if there is an intercept and zero otherwise.

adj.r.squared

the above R^2 statistic 'adjusted', penalising for higher p.

fstatistic

(for models including non-intercept terms) a 3-vector with the value of the F-statistic with its numerator and denominator degrees of freedom.

cov.unscaled

a p \times p matrix of (unscaled) covariances of the coef[j], j=1, ..., p.

dw

a named 2-vector with the Durbin-Watson statistic of the original linear model and the Prais-Winsten estimator.

terms

the terms object used.


Semirobust Covariance Matrix Estimators

Description

Semirobust covariance matrix estimators for models of class "prais".

Usage

## S3 method for class 'prais'
vcovHC(x, type = c("const", "HC1", "HC0"), ...)

Arguments

x

an object of class "prais", usually, the result of a call to prais_winsten.

type

a character string specifying the estimation type.

...

not used.

Details

vcovHC is a function for estimating a robust covariance matrix of parameters for the Prais-Winsten estimator. The weighting schemes specified by type are analogous to those in vcovHC in package sandwich with the caveat that only "const", "HC0" and "HC1" are available.

Value

An object of class "matrix" containing the estimate of the asymptotic covariance matrix of coefficients.

See Also

vcovHC


Extract Panel-Corrected Variance Covariance Matrix

Description

Panel-corrected covariance matrix estimators for models of class "prais".

Usage

## S3 method for class 'prais'
vcovPC(x, pairwise = FALSE, ...)

Arguments

x

an object of class "prais", usually, the result of a call to prais_winsten.

pairwise

logical. If FALSE (default), only those residuals from periods that are common to all panels are used to computed the covariances. If TRUE all observations that can be matched by period between two panels are used.

...

not used.

Details

vcovPC is a function for estimating a panel-corrected covariance matrix of parameters for the Prais-Winsten estimator.

Value

An object of class "matrix".

References

Beck, N. L. and Katz, J. N. (1995): What to do (and not to do) with time-series cross-section data. American Political Science Review 89, 634-647.

See Also

vcovPC