Trying to define breakpoints in Landsat imagery - why is BFAST missing obvious breaks?
I have a stack of 300+ NDVI landscape images. I am using the BFAST package in R to define breakpoints. The breaks are often extremely obvious, as you can see from this image:
Note that there was a huge drop in NDVI in 1988, followed by a gradual increase. BFAST ignores the obvious break and instead puts a breakpoint around 1994 in the middle of the fade.
I used the following R code to run BFAST:
bfast (ndvi.ts, h = .3, season = "harmonic", max.iter = 1, breaks = 1)
(Tweaking the h parameter doesn't seem to improve the situation.)
A few questions for everyone:
- Is there a parameter other than h that I can tweak to improve the results?
- If not, is there a way to massaging the data to get better results?
- If not, is there another breakpoint analysis package in R that can give better results?
source to share
I struggled with the same parsing and ended up using the ecp package http://cran.r-project.org/web/packages/ecp/vignettes/ecp.pdf
In my workflow, I retrieve my index for image dates for multiple sites and put them in a dataframe. Then from there I have a loop that calculates the changepoint and creates a ggplot of the time series with the specified changepoints. I won't show the entire loop here, but the code for identifying change points looks something like this:
library("ecp")
df <- "your data frame"
df2 <- df[ ,1]#assuming your data values are in first column
ecp.mat <- matrix(df2, ncol = 1)
ecp.out <- e.divisive(ecp.mat, R = 499, sig.lvl = sig, alpha = 1 )
ecp.est <- ecp.out$estimates[c(-1, -length(ecp.out$estimates))]#drop first and last records
The last object above contains the location of your replacement points and then I draw that. Hope it helps.
source to share