Skip to content
Back to formatted view

Raw Message

Message-ID: <CAMUMQUTp+PoZfUiOAZ=U1tG3PpZokknNrvjtFEg7a7YQ48XFuw@mail.gmail.com>
Date: 2025-01-03T16:13:36Z
From: Norbert Kuder
Subject: Possible issue in stats/arima.R package
In-Reply-To: <26486.64727.599697.148053@stat.math.ethz.ch>

Martin,

thank you solving this issue. Anyway there is the same bug in arima0.R:

https://github.com/wch/r-source/blob/4a1ed749271c52e60a85e794e6f34b0831efb1ae/src/library/stats/R/arma0.R#L79

Best regards,
Norbert Kuder

czw., 2 sty 2025, 21:53 u?ytkownik Martin Maechler <
maechler at stat.math.ethz.ch> napisa?:

> >>>>> Martin Maechler on Thu, 2 Jan 2025 20:42:58 +0100 writes:
>  >>>>> 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.
>
> well, actually, the mishap is larger:
>
> Reading the help page for arima,  'seasonal' is documented as
>
>  seasonal: A specification of the seasonal part of the ARIMA model, plus
>            the period (which defaults to ?frequency(x)?).  This may be a
>            list with components ?order? and ?period?, or just a numeric
>            vector of length 3 which specifies the seasonal ?order?.  In
>            the latter case the default period is used.
>
> Note the
>     or just a numeric vector of length 3 ... the seasonal 'order'
> part.
> If you look at the larger context of the
>
>    else ("'seasonal...
>
> part, it becomes clear that -- in order to fulfill the above
> documented behavior, it's not length(order),
> but length(seasonal) which should be 3   which leads to the
> following change :
>
> @@ -124,10 +124,11 @@
>              if(!is.numeric(seasonal$order) || length(seasonal$order) != 3L
>                 || any(seasonal$order < 0L))
>                  stop("'seasonal$order' must be a non-negative numeric
> vector of length 3")
> -        } else if(is.numeric(order)) {
> -            if(length(order) == 3L) seasonal <- list(order=seasonal)
> -            else ("'seasonal' is of the wrong length")
> -        } else stop("'seasonal' must be a list with component 'order'")
> +        } else if(is.numeric(seasonal)) { # meant to be  seasonal$order
> +            if(length(seasonal) != 3L || any(seasonal < 0))
> +                stop("if not a list, 'seasonal' must be a non-negative
> numeric vector of length 3")
> +            seasonal <- list(order=seasonal)
> +        } else stop("'seasonal' must be a list with component 'order' or
> length-3 vector")
>
>
> ... I still plan to commit this, but it may well be that this
> change will wake up arima() use that was buggy and never detected
> till now.
>
> Martin
>
>
>

	[[alternative HTML version deleted]]