# [SciPy-user] boxcar problem

Stephen Walton stephen.walton at csun.edu
Thu Dec 22 20:10:44 CST 2005

```John Hunter wrote:

>Any ideas on this one?
>
>
>In [1]: import scipy
>
>In [2]: scipy.__version__
>Out[2]: '0.3.0_266.4239'
>
>In [3]: scipy.stats.boxcox(scipy.rand(100))
>---------------------------------------------------------------------------
>exceptions.ValueError                                Traceback (most
>recent call last)
>
>/home/titan/johnh/<console>
>
>/opt/lang/python-2.3.4/lib/python2.3/site-packages/scipy/stats/morestats.py
>in boxcox(x, lmbda, alpha)
>    279         return -boxcox_llf(lmb,data)
>    280     lmax = optimize.brent(tempfunc,
>    brack=(-2.0,2.0),args=(x,))
>--> 281     y, lmax = boxcox(x, lmax)
>    282     if alpha is None:
>    283         return y, lmax
>
>ValueError: too many values to unpack
>
>
I'm practicing my Python debugging skills ;-) . It looks to me like the
problem is a few lines before:

if lmbda is not None:  # single transformation
lmbda = lmbda*(x==x)
y = where(lmbda == 0, log(x), (x**lmbda - 1)/lmbda)
return y

So, what happens is that you call boxcox() with no lmbda value (so it
defaults to none), boxcox  determines lmax, calls itself as
boxcox(y,lmax) but because of the code copied above the recursive call
only returns the value y.  Hence there is no lmax value to unpack.

I think the fix is simple:  change line 354 to

y = boxcox(x, lmax)

Steve

(I'm not sure why the offending line is listed as line 281 in John's
output;  it is line 354 on my machine.)

```