[R] NaN values returned by cmdscale

Janet Manry jmanry at bacbarcodes.com
Tue Oct 7 04:19:08 CEST 2003


Hello all,

I'm using R1.7.1 on Linux, generating sammon-optimized MDS plots from
distance matrices. This is a calculation I run routinely, often on
sample sets of up to 100 samples. This time, with three samples, the
sammon function returned an error (shown below), which I tracked down to
the cmdscale function it uses to find a starting configuration. In
short, cmdscale is returning NaN values for the second-dimension
coordinates.

I was able to sidestep this problem by adding the following line to the
sammon code, in order to give a default configuration under this
circumstance.    

y[!is.finite(y)] <- 0 

The result is no errors and the three points lined up along one axis.

I'm guessing that the problem has to do with the small distance between
samples 2 and 3 -- that cmdscale is trying to find coordinates for two
things are essentially on the same spot (within its level of precision).
My question is whether anyone else has seen this problem, and is this
the best way to solve it?

Many thanks,

Janet Manry


Initial distance matrix:
================
[1,] 0.00000000 0.080600084 0.075761312
[2,] 0.08060008 0.000000000 0.004737846
[3,] 0.07576131 0.004737846 0.000000000


Function call:  
============
coordinates <- sammon(newDmat,trace=FALSE)$points

Error message:
===============
Error in sammon(newDmat, trace = FALSE) : NA/NaN/Inf in foreign
function call (arg 4)
In addition: Warning messages:
1: some of the first2eigenvalues are < 0 in: cmdscale(d, k)
2: NaNs produced in: sqrt(ev)

Output from using just cmdscale on the same distance matrix, printing
eigen values and vectors:
===================
 $points
             [,1] [,2]
 [1,]  0.05212395  NaN
 [2,] -0.02847993  NaN
 [3,] -0.02364402  NaN

 $eig
 [1]  4.087052e-03 -6.088049e-20

 $x
 NULL

 $ac
 [1] 0

 $GOF
 [1] 1 1

 Warning messages:
 1: some of the first2eigenvalues are < 0 in: cmdscale(newDmat, eig =
 TRUE)
 2: NaNs produced in: sqrt(ev)

Applying La.eigen to the same distance matrix
==================================
$values
[1]  0.113015163 -0.004734047 -0.108281116

 $vectors
           [,1]         [,2]       [,3]
 [1,] 0.6995002 -0.002659579  0.7146275
 [2,] 0.5194820 -0.684822933 -0.5110342
 [3,] 0.4907524  0.728704657 -0.4776522



====================
Janet Manry, M.S.
Bioinformatics/Development

Bacterial BarCodes, Inc.
Houston, TX USA
jmanry at bacbarcodes.com




More information about the R-help mailing list