[R] Matrix calculations in R--erroneous?

Thomas Lumley tlumley at u.washington.edu
Fri Oct 7 19:12:30 CEST 2005


On Fri, 7 Oct 2005, Peter Muhlberger wrote:

> Does anyone know how -log(x) can equal 743 but -log(x+0)=Inf?  That's what
> the following stream of calculations suggest:
>
> Browse[2]> -log (   1e-323+yMat2 - yMat1 * logitShape(matrix(parsList$Xs,
> nrow = numXs, ncol=numOfCurves), matrix(means, nrow = numXs,
> ncol=numOfCurves, byrow=TRUE), matrix(sigmas, nrow = numXs,
> ncol=numOfCurves, byrow=TRUE))   )[5,9]
> [1] Inf
>
> Yet:
>
> Browse[2]> logitShape(matrix(parsList$Xs, nrow = numXs, ncol=numOfCurves),
> matrix(means, nrow = numXs, ncol=numOfCurves, byrow=TRUE), matrix(sigmas,
> nrow = numXs, ncol=numOfCurves, byrow=TRUE))[5,9]
> [1] 1
>
> So, the logitShape component equals 1.

to within 2e-16

> Browse[2]> yMat1[5,9]
> [1] 1
>
> So yMat1[5,9]*logitShape()[5,9]=1

to within 2e-16

> Browse[2]> yMat2[5,9]
> [1] 1

to within 2e-16

> So, yMat2[5,9]-yMat1[5,9]*logitShape()[5,9]=0

to within a few parts in 10^16

You haven't actually shown us yMat2[5,9]-yMat1[5,9]*logitShape()[5,9], 
though

> Browse[2]> -log (   1e-323)
> [1] 743.7469
>
> So, -log( 1e-323)=743 while -log( 1e-323+0)=Inf ?
>

If "0" is really of the order of 1e-16 then this isn't surprising. If the 
only point of 1e-323 is as a guard value for 0 then use max(1e-323, 
yMat2[5,9]-yMat1[5,9]*logitShape()[5,9])


 	-thomas




More information about the R-help mailing list