[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.)
More information about the SciPy-user
mailing list