[R] Shafer's MIX: Query on code

Spencer Graves spencer.graves at pdf.com
Tue Apr 29 18:51:25 CEST 2003


exp(cusum(log(d))) is numerically more stable.

Consider the following:
 > cumprod(10^(30:(-30)))
  [1]  1e+30  1e+59  1e+87 1e+114 1e+140 1e+165 1e+189 1e+212 1e+234 1e+255
[11] 1e+275 1e+294    Inf    Inf    Inf    Inf    Inf    Inf    Inf    Inf
[21]    Inf    Inf    Inf    Inf    Inf    Inf    Inf    Inf    Inf    Inf
[31]    Inf    Inf    Inf    Inf    Inf    Inf    Inf    Inf    Inf    Inf
[41]    Inf    Inf    Inf    Inf    Inf    Inf    Inf    Inf    Inf    Inf
[51]    Inf    Inf    Inf    Inf    Inf    Inf    Inf    Inf    Inf    Inf
[61]    Inf
 > exp(cumsum(log(10^(30:(-30)))))
  [1]  1e+30  1e+59  1e+87 1e+114 1e+140 1e+165 1e+189 1e+212 1e+234 1e+255
[11] 1e+275 1e+294    Inf    Inf    Inf    Inf    Inf    Inf    Inf    Inf
[21]    Inf    Inf    Inf    Inf    Inf    Inf    Inf    Inf    Inf    Inf
[31]    Inf    Inf    Inf    Inf    Inf    Inf    Inf    Inf    Inf    Inf
[41]    Inf    Inf    Inf    Inf    Inf    Inf    Inf    Inf 1e+294 1e+275
[51] 1e+255 1e+234 1e+212 1e+189 1e+165 1e+140 1e+114  1e+87  1e+59  1e+30
[61]  1e+00
 >
hth.  spencer graves

Prof Brian Ripley wrote:
> On Tue, 29 Apr 2003 Ted.Harding at nessie.mcc.ac.uk wrote:
> 
> 
>>Thanks to Fernando Tusell and especially to Brian Ripley for
>>their work on 'mix', leading to an apparently good package
>>mow available on CRAN.
>>
>>Going through the R code for the function prelim.mix, I am
>>wondering why the following method of calculation is used
>>at one point:
>>
>>  umd <- as.integer(round(exp(cumsum(log(d)))))
>>
>>(d is a vector containing, in effect, the numbers of levels of
>>the factors in col1, col2, ... of the categorical variables.
>>Therefore umd is a vector containing the numbers of possible
>>combinations of factor levels in col1, col1&col2, ... )
>>
>>But why not do it as
>>
>>  umd <- as.integer(cumprod(d))
>>
>>?? [It can't be that this number could go out or range, since
>>that would be equally true of exp(cumsum(log(d)))) ]
> 
> 
> I expect the author didn't know about cumprod.  It isn't in the Blue Book, 
> which even does a similar calculation this way (on page 361).
> 
> There's a lot of other code that is not idiomatic S in mix.
>



More information about the R-help mailing list