[R] Problem with Princurve

Ravi Varadhan rvaradhan at jhmi.edu
Mon May 23 15:58:19 CEST 2011


Why does this not find a better solution?

> x <- seq(0,2*pi, length=1000)
> x <- cbind(x/(2*pi), sin(x))

> fit1 <- principal.curve(x, plot = TRUE, trace = TRUE, maxit = 100,
+ start = cbind(sort(x[,1]), rep(1, nrow(x))))
Starting curve---distance^2: 1499.5
Iteration 1---distance^2: 3.114789
Iteration 2---distance^2: 10.04492
Iteration 3---distance^2: 11.89215
Iteration 4---distance^2: 12.43235
Iteration 5---distance^2: 12.68524
Iteration 6---distance^2: 12.84443
Iteration 7---distance^2: 12.93624
Iteration 8---distance^2: 12.99118
Iteration 9---distance^2: 13.01280
Iteration 10---distance^2: 13.02867
Iteration 11---distance^2: 13.03867
>

You see that the projection distance is minimal at iteration 1, but the algorithm settles for an inferior projection (i..e. a greater projection distance).

If I do not provide any starting values, I get this:

> fit1 <- principal.curve(x, plot = TRUE, trace = TRUE, maxit = 100)
Starting curve---distance^2: 29692.03
Iteration 1---distance^2: 20.31220
Iteration 2---distance^2: 19.45939
Iteration 3---distance^2: 19.26387
Iteration 4---distance^2: 19.20626
Iteration 5---distance^2: 19.18666
Iteration 6---distance^2: 19.18059
>

This is even worse.  It seems like the algorithm is quite sensitive to starting values.  Is this behavior expected or is there some flaw in the algorithm?

Ravi. 

________________________________________
From: r-help-bounces at r-project.org [r-help-bounces at r-project.org] On Behalf Of Gavin Simpson [gavin.simpson at ucl.ac.uk]
Sent: Monday, May 23, 2011 8:27 AM
To: guy33
Cc: r-help at r-project.org
Subject: Re: [R] Problem with Princurve

On Thu, 2011-05-19 at 06:43 -0700, guy33 wrote:
> Hey all,
>
> I can't seem to get the princurve package to produce correct results, even
> in the simplest cases.  For example, if you just generate a 1 period
> noiseless sine wave, and ask for the principal curve and plot, the returned
> curve is clearly wrong (doesn't follow the sine wave).  Here's my code:
>
> library(princurve)
> x <- runif(1000,0,2*pi); x <- cbind(x/(2*pi), sin(x))
> fit1 <- principal.curve(x, plot = TRUE)
>
> Anyone have any suggestions?  If you run this code, do you get the correct
> principal curve?

How about specifying some useful starting points?

fit1 <- principal.curve(x, plot = TRUE, trace = TRUE, maxit = 100,
                        start = cbind(sort(x[,1]), rep(1, nrow(x))))

And we need a few more iterations before convergence here. Starting from
the first principal component for example might give useful starting
points.

HTH

G

> Any help would be really appreciated!
> -guy33
>
> --
> View this message in context: http://r.789695.n4.nabble.com/Problem-with-Princurve-tp3535721p3535721.html
> Sent from the R help mailing list archive at Nabble.com.
>
> ______________________________________________
> R-help at r-project.org mailing list
> https://stat.ethz.ch/mailman/listinfo/r-help
> PLEASE do read the posting guide http://www.R-project.org/posting-guide.html
> and provide commented, minimal, self-contained, reproducible code.

--
%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%
 Dr. Gavin Simpson             [t] +44 (0)20 7679 0522
 ECRC, UCL Geography,          [f] +44 (0)20 7679 0565
 Pearson Building,             [e] gavin.simpsonATNOSPAMucl.ac.uk
 Gower Street, London          [w] http://www.ucl.ac.uk/~ucfagls/
 UK. WC1E 6BT.                 [w] http://www.freshwaters.org.uk
%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%

______________________________________________
R-help at r-project.org mailing list
https://stat.ethz.ch/mailman/listinfo/r-help
PLEASE do read the posting guide http://www.R-project.org/posting-guide.html
and provide commented, minimal, self-contained, reproducible code.


More information about the R-help mailing list