Skip to content
Prev 260622 / 398502 Next

Problem with Princurve

Why does this not find a better solution?
+ 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:
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.