dear Hans,
As pointed out by Petr Pikal, segmented allows to estimate breakpoints of (continuous) piecewise relationships. That is, the mean lines are assumed to be connected and segmented tries to join them at the estimated breakpoints. The estimated breakpoints may be any value in the range of the segmented covariate (not necessarly an integer). Computation times are substantially indipendent of the number of breakpoints to be estimated.

strucchange "thinks different"; it allows disconnected segments and the estimated breakpoints have to be the observed time indices.

Hope this helps you,
vito

Petr PIKAL ha scritto:
Hi

One possibility is to use segmented

e.g

a <- c(2,3,3,5,6,8,8,9,15, 25, 34,36,36,38,41,43,44,44,46)
ix <- seq_along(a)
plot(ix,a)
library(segmented)
fit<-lm(a~ix)
fit.s<-segmented(fit, ~ix, list(ix=c(5,10)))
fit.s
Call: segmented.lm(obj = fit, seg.Z = ~ix, psi = list(ix = c(5, 10)))

Meaningful coefficients of the linear terms:
(Intercept) ix U1.ix U2.ix 0.6785714 1.0714286 8.9285714 -8.4500000
Estimated Break-Point(s) psi1.ix psi2.ix :  8.476 10.880

Regards
Petr


r-help-boun...@r-project.org napsal dne 22.04.2009 15:45:55:

Gabor, initially this looked like the perfect solution, exactly what I need.

Unfortunately it is too expensive/costly. I have vectors of length 800 and more, my machine needs > 5 minutes (I aborted) to compute the breakpoints. Required is computation time < 1 sec. :)

Any other suggestions? Maybe there is another approach not that perfect as from the strucchange package, but still sufficient?

Best
Henning


Am 22.04.2009 um 14:55 schrieb Gabor Grothendieck:

Try this:

a <- c(2,3,3,5,6,8,8,9,15, 25, 34,36,36,38,41,43,44,44,46);
ix <- seq_along(a)
library(strucchange)
bp <- breakpoints(a ~ ix, h = 4)
bp
        Optimal 3-segment partition:

Call:
breakpoints.formula(formula = a ~ ix, h = 4)

Breakpoints at observation number:
7 11

Corresponding to breakdates:
0.3684211 0.5789474
plot(a ~ ix)
lines(ix, fitted(bp))

On Wed, Apr 22, 2009 at 7:27 AM, Hans-Henning Gabriel
<hanshenning.gabr...@gmail.com> wrote:
Hi,

suppose I have a simple sorted vector like this:

a <- c(2,3,3,5,6,8,8,9,15, 25, 34,36,36,38,41,43,44,44,46);

Is there a function in R, I can use to discover that from index 8 to index
11 the values are changing significantly?
The function should return a value pointing to one of the indices 8, 9, 10
or 11. Any of them would be fine.
The difficulty is that there may be no big gap. I mean, indices 8 and 11 are somehow "connected" by indices 9 and 10. So, it's not an option to just
search for biggest difference between the values.

Perfect would be a function that is able to discover multiple changes if it
is present in the data.

Thanks!!
Henning

______________________________________________
R-help@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.

______________________________________________
R-help@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.

______________________________________________
R-help@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.



--
====================================
Vito M.R. Muggeo
Dip.to Sc Statist e Matem `Vianelli'
Università di Palermo
viale delle Scienze, edificio 13
90128 Palermo - ITALY
tel: 091 6626240
fax: 091 485726/485612
http://dssm.unipa.it/vmuggeo

______________________________________________
R-help@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.

Reply via email to