From bill at insightful.com  Thu Jun 12 18:18:26 2008
From: bill at insightful.com (Bill Dunlap)
Date: Thu, 12 Jun 2008 09:18:26 -0700 (PDT)
Subject: [Rd] arima() bug
In-Reply-To: <200806121605.59981.Ray.Brownrigg@mcs.vuw.ac.nz>
References: <200806121605.59981.Ray.Brownrigg@mcs.vuw.ac.nz>
Message-ID: <Pine.GSO.4.56.0806120905500.20960@devsun3201.insightful.com>

On Thu, 12 Jun 2008, Ray Brownrigg wrote:

> arima() crashes R (segfault) with Linux R-2.7.0, Solaris R-2.6.0:
>
> Reproduce by:
>
> # 2 years of daily temperature data
> set.seed(1); x <- ts(20*sin((1:731)*2*pi/365) + 10 + rnorm(731, 0, 4), freq=365)
> arima(x, c(1, 0, 1), c(1, 0, 1))

I put a breakpoint in Rf_allocVector when its length argument
was more than 10 million and it stopped when library/stats/src/arima.c:getQ0
asked for a vector of nrbar=132497980 doubles, a number proportional
to the 4th power of max(length(phi),length(theta)) from the R arima():upARIMA()
function:

SEXP getQ0(SEXP sPhi, SEXP sTheta)
{
    ...
    int  p = LENGTH(sPhi), q = LENGTH(sTheta);
    ...
    int r = max(p, q + 1), np = r * (r + 1) / 2, nrbar = np * (np - 1) / 2;
    ...
    rbar = (double *) R_alloc(nrbar, sizeof(double));

(gdb) print nrbar
$1 = 132497980
(gdb) print np
$2 = 67528
(gdb) print r
$3 = 367
(gdb)  print q
$4 = 366

Trying to recover from running out of memory probably
causes the crash.

rbar is a scratch array.

----------------------------------------------------------------------------
Bill Dunlap
Insightful Corporation
bill at insightful dot com

 "All statements in this message represent the opinions of the author and do
 not necessarily reflect Insightful Corporation policy or position."



[Rd] arima() bug
Bill Dunlap