Sorry I am still not clear on the algorithm. What is rowSums,
columnSums, and what is k? k seem to be used as both a scalar, and
vector (argument to a function sum()?)

Maybe it is just that I don't know R. Can you give me a hint or
forward any Java implementations? I can figure it out from there.
Don't want to be a bother but I do want to make sure I understand what
you're saying.

On Mon, Jun 2, 2008 at 8:56 PM, Ted Dunning <[EMAIL PROTECTED]> wrote:
> Hmmm... may not have sent that to you.
>
>   function(k) {
>     return (2 * (h(k) - h(rowSums(k)) - h(colSums(k))));
>   }
>
>   function(k) {
>     p = k / sum(k) + (k == 0);
>     return (sum(k * log(p)));
>   }
>
> This is the pithiest implementation that I know of.
>
> On Mon, Jun 2, 2008 at 5:50 PM, Sean Owen <[EMAIL PROTECTED]> wrote:
>
>> PS what's the R code? sorry if I am missing something basic.
>>
>> On Sun, Jun 1, 2008 at 8:32 PM, Ted Dunning <[EMAIL PROTECTED]> wrote:
>> > The R code is instructive here.  Everywhere you are about to take the log
>> of
>> > a zero probability, you should add 1.  This is equivalent to saying that
>> >
>> >   lim_{x -> 0} x log x = 0
>>
>> OK true but...
>>
>> > One easy way to do this is to wrap your log function:
>> >
>> >    safeLog = {x -> return (x==0)?0:Math.log(x)}
>>
>> ... log(x) approaches -infinity as x approaches 0 so why is 0 a good
>> substitute for log(0)?
>>
>> But I would buy that, for purposes of this function, "log(p)" can be
>> replaced with "log(p+1)" so at least the output value is >= 0 and less
>> than 1?
>>
>
>
>
> --
> ted
>

Reply via email to