From m@ech|er @end|ng |rom @t@t@m@th@ethz@ch  Thu Jan  2 20:42:58 2025
From: m@ech|er @end|ng |rom @t@t@m@th@ethz@ch (Martin Maechler)
Date: Thu, 2 Jan 2025 20:42:58 +0100
Subject: [Rd] Possible issue in stats/arima.R package
In-Reply-To: <e93186db-914d-41cf-b1df-46cbc90af3b6@gmail.com>
References: <CAMUMQUSh5t2sazypdiAeOSJ2MQssNfb89jQJvvBwRbA1PwAqeA@mail.gmail.com>
 <822e67f1-5900-4355-b231-a09c8691d4ae@gmail.com>
 <e93186db-914d-41cf-b1df-46cbc90af3b6@gmail.com>
Message-ID: <26486.60482.328642.701605@stat.math.ethz.ch>

>>>>> Duncan Murdoch 
>>>>>     on Thu, 2 Jan 2025 11:28:45 -0500 writes:

    > On 2025-01-02 11:20 a.m., Duncan Murdoch wrote:
    >> On 2025-01-02 9:04 a.m., Norbert Kuder wrote:
    >>> Hello all,
    >>> 
    >>> I am running R version 4.4.2 (2024-10-31 ucrt) on Windows 10 x64, and
    >>> noticed something that might be a minor bug (or at least inconsistent code)
    >>> in the stats/arima.R package.
    >>> I have found:
    >>> 1. A missing stop() call at line 69:
    >>> if (length(order) == 3) seasonal <- list(order = seasonal) else
    >>> ("\'seasonal\' is of the wrong length")
    >>> it should be rather:
    >>> if (length(order) == 3) seasonal <- list(order = seasonal) else
    >>> stop("\'seasonal\' is of the wrong length")
    >> 
    >> I think you're right about this one.
    >> 
    >>> 
    >>> 2. An unused 'mod' variable assignment at line 190:
    >>> 
    >>> mod <- makeARIMA(trarma[[1]], trarma[[2]], Delta, kappa, SSinit)
    >>> 
    >>> I am trying to confirm whether this is intended behavior or possibly an
    >>> overlooked detail. Could someone please clarify if the current logic is
    >>> correct?
    >>> 
    >> 
    >> In the R-devel source I see mod being used in the next statement:
    >> 
    >> mod <- makeARIMA(trarma[[1L]], trarma[[2L]], Delta, kappa, SSinit)
    >> val <- if(ncxreg > 0L)
    >> arimaSS(x - xreg %*% coef[narma + (1L:ncxreg)], mod)
    >> else arimaSS(x, mod)
    >> 
    >> It appears in both alternatives of the if statement.
    >> 
    >> This one is strange though:  the code in the github mirror
    >> (https://github.com/wch/r-source/blob/4a1ed749271c52e60a85e794e6f34b0831efb1ae/src/library/stats/R/arima.R#L256-L258)
    >> is different:
    >> 
    >> mod <- makeARIMA(trarma[[1L]], trarma[[2L]], Delta, kappa, SSinit)
    >> if(ncxreg > 0) x <- x - xreg %*% coef[narma + (1L:ncxreg)]
    >> arimaSS(x, mod)
    >> 
    >> yet the log shows no recent changes.  I'm not sure what's going on.

    > Mystery solved:  code like this appears several times in that file.  In 
    > the occurrence here:

    > https://github.com/wch/r-source/blob/4a1ed749271c52e60a85e794e6f34b0831efb1ae/src/library/stats/R/arima.R#L293

    > it does appear that the mod value isn't being used.

    > Duncan Murdoch

Thank you, Norbert and Duncan.
A little bit (unfinished)  aRcheology showed that both parts
have been in the arima code since Dec 11 2003 (when the code, i.e., the
whole package 'ts') was moved / merged into package 'stats'.

I'll fix and quickly test the change, and then commit it.

Congratulations indeed to Norbert Kuder for finding such (small)
blemishes of such an age!

... and  Happy New yeaR!   to all readers.
Martin



[Rd] Possible issue in stats/arima.R package
Martin Maechler