Example 3

Vegetation index: NDMI

History period: 2005-2010

option: “c(2005,1)”

stack subset: no

Monitoring approach: 2010-2016

option: Full monitoring period approach

Regression model: harmonic order 1

Trend: no

source("~/wur_bfast_workshop/R-scripts/tutorial_0.R")
source("~/wur_bfast_workshop/R-scripts/accuracy_assessment.R")
example_title <- 3
results_directory <- file.path(results_directory,paste0("example_",example_title))
dir.create(results_directory)
log_filename <- file.path(results_directory, paste0(format(Sys.time(), "%Y-%m-%d-%H-%M-%S"), "_example_", example_title, ".log"))
start_time <- format(Sys.time(), "%Y/%m/%d %H:%M:%S")

result <- file.path(results_directory, paste0("example_", example_title, ".grd"))
time <- system.time(bfmSpatial(ndmiStack, start = c(2010, 1),
                               formula = response ~ harmon,
                               order = 1, history = c(2005,1),
                               filename = result,
                               mc.cores = detectCores()))

write(paste0("This process started on ", start_time,
             " and ended on ",format(Sys.time(),"%Y/%m/%d %H:%M:%S"),
             " for a total time of ", time[[3]]/60," minutes"), log_filename, append=TRUE)

Post Processing

bfm_ndmi <- brick(result)
#### Change
change <- raster(bfm_ndmi,1)
plot(change, col=rainbow(7),breaks=c(2010:2016))

#### Magnitude
magnitude <- raster(bfm_ndmi,2)
magn_bkp <- magnitude
magn_bkp[is.na(change)] <- NA
plot(magn_bkp,breaks=c(-5:5*1000),col=rainbow(length(c(-5:5*1000))))

plot(magnitude, breaks=c(-5:5*1000),col=rainbow(length(c(-5:5*1000))))

#### Error
error <- raster(bfm_ndmi,3)
plot(error)

#### Detect deforestation
def_ndmi <- magn_bkp
def_ndmi[def_ndmi>0]=NA
plot(def_ndmi)

plot(def_ndmi,col="black", main="NDMI_deforestation")

writeRaster(def_ndmi,filename = file.path(results_directory,paste0("example_",example_title,"_deforestation_magnitude.grd")),overwrite=TRUE)
## class       : RasterLayer 
## dimensions  : 334, 334, 111556  (nrow, ncol, ncell)
## resolution  : 30, 30  (x, y)
## extent      : 374055, 384075, -676185, -666165  (xmin, xmax, ymin, ymax)
## coord. ref. : +proj=utm +zone=18 +datum=WGS84 +units=m +no_defs +ellps=WGS84 +towgs84=0,0,0 
## data source : /home/andrei/wur_bfast_workshop/data/Bfast_results/example_3/example_3_deforestation_magnitude.grd 
## names       : layer.2 
## values      : -3729.035, -0.01502076  (min, max)
def_years <- change
def_years[is.na(def_ndmi)]=NA

years <- c(2010,2011,2012,2013,2014,2015,2016,2017)
plot(def_years, col=rainbow(length(years)),breaks=years, main="Detecting deforestation after 2010")

writeRaster(def_years,filename = file.path(results_directory,paste0("example_",example_title,"_deforestation_dates.grd")),overwrite=TRUE)
## class       : RasterLayer 
## dimensions  : 334, 334, 111556  (nrow, ncol, ncell)
## resolution  : 30, 30  (x, y)
## extent      : 374055, 384075, -676185, -666165  (xmin, xmax, ymin, ymax)
## coord. ref. : +proj=utm +zone=18 +datum=WGS84 +units=m +no_defs +ellps=WGS84 +towgs84=0,0,0 
## data source : /home/andrei/wur_bfast_workshop/data/Bfast_results/example_3/example_3_deforestation_dates.grd 
## names       : layer.1 
## values      : 2010.342, 2016.737  (min, max)

Accuracy Asessment

Forest_mask <- raster(file.path(workshop_folder,"data/Fmask_2010_Peru.tif"))
validation_forest_map <- raster(file.path(workshop_folder,"data/Validation_forest_2016.tif"))

The accuracy assessment is done following the paper of Olofsson et al. (2014) “Good practices for estimating area and assessing accuracy of land change”.

sample_size <- calcSampleSize(def_years,Forest_mask,c(0.9,0.7),0.01)
samples <- extractRandomSamples(def_years,Forest_mask,sample_size,results_directory,"samples")
val_sample <- extractValidationValues(validation_forest_map, samples, Forest_mask)
conf_matrix <- assessAcuracy(samples,val_sample)
conf_matrix
##        0      1          
## 0 730.00  47.00  777 0.94
## 1 147.00 547.00  694 0.79
##   877.00 594.00 1471   NA
##     0.83   0.92   NA 0.87