[R] Problem with Princurve

guy33 david.reshef at magd.ox.ac.uk
Wed Jun 8 03:15:48 CEST 2011


guy33 wrote:
> 
> As suggested above, specifying useful starting points definitely helps in
> the case of:
> 
> 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)))) 
> 
> 
> Interestingly, I find that if you simply scale the X-axis from [0,1] to
> [0,2*pi], the algorithm converges without the starting points, as in:
> 
> x <- seq(0,2*pi, length=1000)
> x <- cbind(x, sin(x))
> fit1 <- principal.curve(x, plot = TRUE, trace = TRUE)
> 
> I assume this is because scaling the data in this way changes the first
> principal component. However, this 
> 

Out of curiosity, am I right about why scaling the data in this way seems to
"fix" the problem?  I meant that when the X-range = [0,1] and y-range =
[-1,1], var(x) = 0.0835 and var(y) = 0.5, so the first principal component,
which the algorithm uses, is vertical.  However, when the x-range is scaled
to [0,2*pi], var(x) becomes 3.299 > var(y) (=0.5 still), so now the first
principal component is in the horizontal direction, which leads to expected
behavior.



> begs the question of what happens when you consider more than one sine
> wave (and what happens when you scale the x-axis).  For example:
> 
> x <- seq(0,10*pi, length=1000)
> x <- cbind(x, sin(x))
> fit1 <- principal.curve(x, plot = TRUE, trace = TRUE)
> 
> I can't seem to get a good curve for this, with or without starting
> conditions.  Can anyone get a better fit somehow?
> 


--
View this message in context: http://r.789695.n4.nabble.com/Problem-with-Princurve-tp3535721p3581380.html
Sent from the R help mailing list archive at Nabble.com.



More information about the R-help mailing list