[Rd] Fix for bug in arima function

Martin Maechler maechler at lynne.stat.math.ethz.ch
Thu May 21 10:35:38 CEST 2015


> I noticed that the 3.2.1 release cycle is about to start.  Is there any
> chance that this fix will make it into the next version of R?
> 
> This bug is fairly serious: getting the wrong variance estimate leads to
> the wrong log-likelihood and the wrong AIC, BIC etc, which can and does
> lead to suboptimal model selection.  If it's not fixed, this issue will
> affect every student taking our time series course in Fall 2015 (and
> probably lots of other students in other time series courses).  When I
> taught time series in Spring 2015, I had to teach students how to work
> around the bug, which wasted class time and shook student confidence in R.
> It'd be great if we didn’t have to deal with this issue next semester.
> 
> Again, the fix is trivial:
> 
> --- a/src/library/stats/R/arima.R
> +++ b/src/library/stats/R/arima.R
> @@ -211,8 +211,10 @@ arima <- function(x, order = c(0L, 0L, 0L),
>          if(fit$rank == 0L) {
>              ## Degenerate model. Proceed anyway so as not to break old code
>              fit <- lm(x ~ xreg - 1, na.action = na.omit)
> +            n.used <- sum(!is.na(resid(fit))) - length(Delta)
> +        } else {
> +            n.used <- sum(!is.na(resid(fit)))
>          }
> -        n.used <- sum(!is.na(resid(fit))) - length(Delta)
>          init0 <- c(init0, coef(fit))
>          ses <- summary(fit)$coefficients[, 2L]
>          parscale <- c(parscale, 10 * ses)
> 

Yes, such a change *is* small in the source code.
But we have to be sure about  its desirability.

In another post about this you mention "REML", and I think we
really are discussing if variance estimates should use a
denominator of  'n'  or 'n - p' in this case.


> The patch that introduced the bug (
> https://github.com/wch/r-source/commit/32f633885a903bc422537dc426644f743cc645e0
> ) was designed to change the initialization for the optimization routine.

> The proposed fix leaves the deliberate part of the patch unchanged (it
> preserves the value of "init0").

I can confirm this... a change introduced in R 3.0.2.

I'm about to commit changes ... after also adding a proper
regression test.

Martin Maechler, ETH Zurich



More information about the R-devel mailing list