[R] Cochrane-Orcutt method

John Janmaat john.janmaat at acadiau.ca
Thu Jan 10 16:56:04 CET 2002


John Fox wrote:
> 
> Dear John,
> 
> At 03:49 PM 1/9/2002 -0400, you wrote:
> 
> >Is there a package that implements the Cochrane-Orcutt itterative
> >procedure for dealing with autocorrelation in a regression model?
> 
> I'm not aware of an implementation in a package, but I have two-step
> Cochrane-Orcott and Prais-Winsten estimators for my own use, which I've
> attached to this note.
> 
> That said, I'm not sure why you'd want to use these methods, other than for
> historical reasons. The gls function in the nlme package will fit linear
> models with autocorrelated errors by ML.

I'm teaching an undergraduate econometrics class.  ML is a little more
than they are up to at this level, and the Cochrane-Orcott approach is
an easily understandable itterative procedure.  Thus, the reason is
historical.  I want a canned procedure to be available to verify results
of the student calculations, rather than running the risk that I do it
incorrectly.

Thanks,

John.

> 
> I hope that this is of use to you,
>   John
> 
> # these functions take a linear-model object as input
> 
> cochrane.orcutt <- function(mod, ...){
>      UseMethod("cochrane.orcott")
>      }
> 
> cochrane.orcutt.lm <- function(mod){
>      X <- model.matrix(mod)
>      y <- model.response(model.frame(mod))
>      e <- residuals(mod)
>      n <- length(e)
>      names <- colnames(X)
>      rho <- sum(e[1:(n-1)]*e[2:n])/sum(e^2)
>      y <- y[2:n] - rho * y[1:(n-1)]
>      X <- X[2:n,] - rho * X[1:(n-1),]
>      mod <- lm(y ~ X - 1)
>      result <- list()
>      result$coefficients <- coef(mod)
>      names(result$coefficients) <- names
>      summary <- summary(mod, corr = F)
>      result$cov <- (summary$sigma^2) * summary$cov.unscaled
>      dimnames(result$cov) <- list(names, names)
>      result$sigma <- summary$sigma
>      result$rho <- rho
>      class(result) <- 'cochrane.orcutt'
>      result
>      }
> 
> prais.winsten <- function(mod, ...){
>      UseMethod("prais.winsten")
>      }
> 
> prais.winsten.lm <- function(mod){
>      X <- model.matrix(mod)
>      y <- model.response(model.frame(mod))
>      e <- residuals(mod)
>      n <- length(e)
>      names <- colnames(X)
>      rho <- sum(e[1:(n-1)]*e[2:n])/sum(e^2)
>      y <- c(y[1] * (1 - rho^2)^0.5, y[2:n] - rho * y[1:(n-1)])
>      X <- rbind(X[1,] * (1 - rho^2)^0.5, X[2:n,] - rho * X[1:(n-1),])
>      mod <- lm(y ~ X - 1)
>      result <- list()
>      result$coefficients <- coef(mod)
>      names(result$coefficients) <- names
>      summary <- summary(mod, corr = F)
>      result$cov <- (summary$sigma^2) * summary$cov.unscaled
>      dimnames(result$cov) <- list(names, names)
>      result$sigma <- summary$sigma
>      result$rho <- rho
>      class(result) <- 'prais.winsten'
>      result
>      }
> 
> -----------------------------------------------------
> John Fox
> Department of Sociology
> McMaster University
> Hamilton, Ontario, Canada L8S 4M4
> email: jfox at mcmaster.ca
> phone: 905-525-9140x23604
> web: www.socsci.mcmaster.ca/jfox
> -----------------------------------------------------

-- 
==========================================
John Janmaat
Department of Economics
Acadia University, Wolfville, NS, B0P 1X0
(902)585-1461

All opinions stated are personal, unless
otherwise indicated.
-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-
r-help mailing list -- Read http://www.ci.tuwien.ac.at/~hornik/R/R-FAQ.html
Send "info", "help", or "[un]subscribe"
(in the "body", not the subject !)  To: r-help-request at stat.math.ethz.ch
_._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._



More information about the R-help mailing list