[R] Varying results of sammon(), for the same data set
Prof Brian Ripley
ripley at stats.ox.ac.uk
Mon Jan 30 14:06:40 CET 2006
On Mon, 30 Jan 2006, Ole Edsberg wrote:
> I have a data set on which I run the sammon algorithm as follows:
> data = read.table('problemforr.dat')
Hmm. This is a data frame of 387 rows and 387 columns and Euclidean
distance is used. Squeezing 387 dims (and PCA shows these points as well
spread in almost all those dimensions) to 2 is not a well-posed problem,
and you should welcome the plurality of answers found.
> y = cmdscale(data, add=TRUE)
> s = sammon(data, y$points)
> (In case it should be relevant, I make the data available at
> With R 2.2.1 on Debian Sid I always get one of two solutions (stress
> 1.74288 after 10 iterations or stress 1.33629 afer 9 iterations). I
> always get the same result within the same R session, even if I read
> the data again. With R 2.2.0 on SunOS 5.9 I always get the same result
> (stress 0.13186 after 74 iterations).
Note that your subject line attributes this to sammon, but it could also
be due to cmdscale.
On AMD64 Linux I get
> s = sammon(data, y$points)
Initial stress : 2.21024
stress after 10 iters: 1.22268, magic = 0.092
stress after 20 iters: 0.48801, magic = 0.009
stress after 30 iters: 0.35007, magic = 0.020
stress after 40 iters: 0.24377, magic = 0.045
stress after 50 iters: 0.17343, magic = 0.021
stress after 60 iters: 0.14944, magic = 0.048
stress after 70 iters: 0.12810, magic = 0.022
stress after 80 iters: 0.12423, magic = 0.010
stress after 90 iters: 0.12191, magic = 0.118
stress after 100 iters: 0.11986, magic = 0.500
That large reduction in `magic' indicates the algorithm is having
problems. Without optimization (used for valgrind) I got the solution you
quoted for Solaris 9.
However, on all four systems (AMD64 FC3 Linux, i686 FC3 Linux, Solaris and
Windows) I tried the results were different between systems and repeatable
by system. I even ran under valgrind to be sure that no uninitialized
areas were used (on FC3).
> I understand that the sammon algorithm is very sensitive to even tiny
> variations in the starting point, but the observed behaviour seems
> strange to me. Difference between machines could perhaps be explained
> by floating point portability issues, but not difference on the same
> machine, and not the fact that i get the same result within the same R
No, but then that is not reproducible, and has never been reported before.
If for example different BLAS libraries get selected on different runs
this would explain it. Or it could be a Debian-Sid-specific bug in a
shared library or compiler.
> I read in the documentation
> that "Further, since the configuration is only determined up to
> rotations and reflections (by convention the centroid is at the origin),
> the result can vary considerably from machine to machine." This doesn't
> make sense to me.
Note that is addressing a separate issue. For a given minimized stress
there are multiple solutions which can be transformed into each other, and
the help file is warning you of that. There are also (in general)
multiple local minima.
> If the data and the algorithm is the same, the result should be the
Depending what you mean by 'algorithm', this is what the subject of
numerical analysis is about. I take it you are familiar with J. H.
Wilkinson's classic work on the Algebraic Eigenvalue Problem?
> What differences between machines do they refer to here? Floating
> point issues?
Any difference in the CPU/FPU or compiler or run-time environment
(including all the dynamically linked support libraries). Just changing
the optimization level of the compiler changes the assembler-level
algorithm used, and can often affect the answer of e.g. an eigenvalue
calculation. Rounding errors depend on whether (and when)
extended-precision registers are used and the exact order of the
calculations since computer arithmetic is not distributive.
Brian D. Ripley, ripley at stats.ox.ac.uk
Professor of Applied Statistics, http://www.stats.ox.ac.uk/~ripley/
University of Oxford, Tel: +44 1865 272861 (self)
1 South Parks Road, +44 1865 272866 (PA)
Oxford OX1 3TG, UK Fax: +44 1865 272595
More information about the R-help