[R] Discover significant change in sorted vector
Petr PIKAL
petr.pikal at precheza.cz
Thu Apr 23 09:26:07 CEST 2009
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-bounces at 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.gabriel at 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 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.
> >>
>
> ______________________________________________
> 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