From 5f4b5b64b2920adf4b9207cfcc3bc410f36c4912 Mon Sep 17 00:00:00 2001 From: vwmaus Date: Sat, 15 Jul 2023 13:54:46 +0200 Subject: [PATCH 1/9] Clean repo --- .travis.yml | 54 -- DESCRIPTION | 95 +-- NAMESPACE | 132 +--- NEWS.md | 2 +- R/class-crossValidation.R | 115 ---- R/class-twdtwAssessment.R | 95 --- R/class-twdtwMatches.R | 148 ---- R/class-twdtwRaster.R | 256 ------- R/class-twdtwTimeSeries.R | 155 ----- R/createPatterns.R | 173 ----- R/create_patterns.R | 100 +++ R/data.R | 19 - R/dtw.R | 134 ---- R/dwtSat.R | 35 - R/getInternals.R | 84 --- R/getMatchingDates.R | 18 - R/getTimeSeries.R | 195 ------ R/linearWeight.R | 50 -- R/logisticWeight.R | 50 -- R/methods.R | 630 ------------------ R/miscellaneous.R | 144 +--- R/plot.R | 231 ------- R/plotAccuracy.R | 165 ----- R/plotAdjustedArea.R | 94 --- R/plotAlignments.R | 107 --- R/plotArea.R | 134 ---- R/plotChanges.R | 121 ---- R/plotClassification.R | 114 ---- R/plotCostMatrix.R | 124 ---- R/plotDistance.R | 97 --- R/plotMapSamples.R | 48 -- R/plotMaps.R | 103 --- R/plotMatches.R | 150 ----- R/plotPaths.R | 129 ---- R/plotTimeSeries.R | 82 --- R/{plotPatterns.R => plot_patterns.R} | 24 +- R/resampleTimeSeries.R | 64 -- R/subset.R | 171 ----- R/twdtw.R | 164 ----- R/twdtwApply.R | 513 -------------- R/twdtwAssess.R | 359 ---------- R/twdtwClassify.R | 281 -------- R/twdtwCrossValidate.R | 117 ---- R/twdtwDist.R | 11 - R/twdtwXtable.R | 302 --------- R/twdtw_reduce_time.R | 263 -------- R/utils.R | 24 - R/zzz.R | 74 +- README.Rmd | 46 -- _config.yml | 1 - figure/plot-MOD13Q1.ts-ts-1.png | Bin 77723 -> 0 bytes figure/plot-alignment-1.png | Bin 23537 -> 0 bytes figure/plot-area-1.png | Bin 7282 -> 0 bytes figure/plot-area-uncertainty-1.png | Bin 12498 -> 0 bytes figure/plot-changes-1.png | Bin 24077 -> 0 bytes figure/plot-group-1.png | Bin 90036 -> 0 bytes figure/plot-maps-1.png | Bin 6914 -> 0 bytes figure/plot-match-1.png | Bin 42711 -> 0 bytes figure/plot-path-1.png | Bin 31485 -> 0 bytes figure/plot-patterns-1.png | Bin 76915 -> 0 bytes figure/plot-patterns-map-1.png | Bin 66063 -> 0 bytes figure/plot-users-prodcucers-1.png | Bin 12273 -> 0 bytes man/MOD13Q1.MT.yearly.patterns.Rd | 16 +- man/MOD13Q1.patterns.list.Rd | 20 +- man/MOD13Q1.ts.Rd | 18 +- man/MOD13Q1.ts.labels.Rd | 2 +- man/MOD13Q1.ts.list.Rd | 20 +- man/createPatterns.Rd | 104 --- man/create_pattern.Rd | 58 ++ man/dtwSat.Rd | 26 - man/get.Rd | 56 -- man/getTimeSeries.Rd | 94 --- ...tDatesFromDOY.Rd => get_dates_from_doy.Rd} | 21 +- man/linearWeight.Rd | 45 -- man/logisticWeight.Rd | 45 -- man/plot.Rd | 66 -- man/plotAccuracy.Rd | 65 -- man/plotAdjustedArea.Rd | 60 -- man/plotAlignments.Rd | 63 -- man/plotArea.Rd | 106 --- man/plotChanges.Rd | 85 --- man/plotClassification.Rd | 68 -- man/plotCostMatrix.Rd | 62 -- man/plotDistance.Rd | 68 -- man/plotMapSamples.Rd | 120 ---- man/plotMaps.Rd | 85 --- man/plotMatches.Rd | 76 --- man/plotPaths.Rd | 56 -- man/plotTimeSeries.Rd | 43 -- man/{plotPatterns.Rd => plot_patterns.Rd} | 30 +- man/reexports.Rd | 19 - man/resampleTimeSeries.Rd | 40 -- man/shiftDates.Rd | 55 -- man/shift_dates.Rd | 29 + man/subset.Rd | 87 --- man/twdtwApply.Rd | 272 -------- man/twdtwAssess.Rd | 284 -------- man/twdtwAssessment-class.Rd | 48 -- man/twdtwClassify.Rd | 576 ---------------- man/twdtwCrossValidate.Rd | 81 --- man/twdtwCrossValidation-class.Rd | 85 --- man/twdtwMatches-class.Rd | 131 ---- man/twdtwRaster-class.Rd | 203 ------ man/twdtwReduceTime.Rd | 108 --- man/twdtwTimeSeries-class.Rd | 127 ---- man/twdtwXtable.Rd | 139 ---- src/bestmatches.f | 80 --- src/computecost.f | 89 --- src/ellapsed.f | 17 - src/g.f | 37 - src/init.c | 33 - src/logtwdtw.f | 31 - src/tracepath.f | 77 --- src/twdtw.f | 157 ----- tic.R | 1 - vignettes/twdtw01.Rmd | 109 --- vignettes/twdtw02-lucc.Rmd | 180 ----- vignettes/twdtw03-speed.Rmd | 64 -- 118 files changed, 268 insertions(+), 11266 deletions(-) delete mode 100644 .travis.yml delete mode 100644 R/class-crossValidation.R delete mode 100644 R/class-twdtwAssessment.R delete mode 100644 R/class-twdtwMatches.R delete mode 100644 R/class-twdtwRaster.R delete mode 100644 R/class-twdtwTimeSeries.R delete mode 100644 R/createPatterns.R create mode 100644 R/create_patterns.R delete mode 100644 R/dtw.R delete mode 100644 R/dwtSat.R delete mode 100644 R/getInternals.R delete mode 100644 R/getMatchingDates.R delete mode 100644 R/getTimeSeries.R delete mode 100644 R/linearWeight.R delete mode 100644 R/logisticWeight.R delete mode 100644 R/methods.R delete mode 100644 R/plot.R delete mode 100644 R/plotAccuracy.R delete mode 100644 R/plotAdjustedArea.R delete mode 100644 R/plotAlignments.R delete mode 100644 R/plotArea.R delete mode 100644 R/plotChanges.R delete mode 100644 R/plotClassification.R delete mode 100644 R/plotCostMatrix.R delete mode 100644 R/plotDistance.R delete mode 100644 R/plotMapSamples.R delete mode 100644 R/plotMaps.R delete mode 100644 R/plotMatches.R delete mode 100644 R/plotPaths.R delete mode 100644 R/plotTimeSeries.R rename R/{plotPatterns.R => plot_patterns.R} (60%) delete mode 100644 R/resampleTimeSeries.R delete mode 100644 R/subset.R delete mode 100644 R/twdtw.R delete mode 100644 R/twdtwApply.R delete mode 100644 R/twdtwAssess.R delete mode 100644 R/twdtwClassify.R delete mode 100644 R/twdtwCrossValidate.R delete mode 100644 R/twdtwDist.R delete mode 100644 R/twdtwXtable.R delete mode 100644 R/twdtw_reduce_time.R delete mode 100644 R/utils.R delete mode 100644 README.Rmd delete mode 100644 _config.yml delete mode 100644 figure/plot-MOD13Q1.ts-ts-1.png delete mode 100644 figure/plot-alignment-1.png delete mode 100644 figure/plot-area-1.png delete mode 100644 figure/plot-area-uncertainty-1.png delete mode 100644 figure/plot-changes-1.png delete mode 100644 figure/plot-group-1.png delete mode 100644 figure/plot-maps-1.png delete mode 100644 figure/plot-match-1.png delete mode 100644 figure/plot-path-1.png delete mode 100644 figure/plot-patterns-1.png delete mode 100644 figure/plot-patterns-map-1.png delete mode 100644 figure/plot-users-prodcucers-1.png delete mode 100644 man/createPatterns.Rd create mode 100644 man/create_pattern.Rd delete mode 100644 man/dtwSat.Rd delete mode 100644 man/get.Rd delete mode 100644 man/getTimeSeries.Rd rename man/{getDatesFromDOY.Rd => get_dates_from_doy.Rd} (61%) delete mode 100644 man/linearWeight.Rd delete mode 100644 man/logisticWeight.Rd delete mode 100644 man/plot.Rd delete mode 100644 man/plotAccuracy.Rd delete mode 100644 man/plotAdjustedArea.Rd delete mode 100644 man/plotAlignments.Rd delete mode 100644 man/plotArea.Rd delete mode 100644 man/plotChanges.Rd delete mode 100644 man/plotClassification.Rd delete mode 100644 man/plotCostMatrix.Rd delete mode 100644 man/plotDistance.Rd delete mode 100644 man/plotMapSamples.Rd delete mode 100644 man/plotMaps.Rd delete mode 100644 man/plotMatches.Rd delete mode 100644 man/plotPaths.Rd delete mode 100644 man/plotTimeSeries.Rd rename man/{plotPatterns.Rd => plot_patterns.Rd} (68%) delete mode 100644 man/reexports.Rd delete mode 100644 man/resampleTimeSeries.Rd delete mode 100644 man/shiftDates.Rd create mode 100644 man/shift_dates.Rd delete mode 100644 man/subset.Rd delete mode 100644 man/twdtwApply.Rd delete mode 100644 man/twdtwAssess.Rd delete mode 100644 man/twdtwAssessment-class.Rd delete mode 100644 man/twdtwClassify.Rd delete mode 100644 man/twdtwCrossValidate.Rd delete mode 100644 man/twdtwCrossValidation-class.Rd delete mode 100644 man/twdtwMatches-class.Rd delete mode 100644 man/twdtwRaster-class.Rd delete mode 100644 man/twdtwReduceTime.Rd delete mode 100644 man/twdtwTimeSeries-class.Rd delete mode 100644 man/twdtwXtable.Rd delete mode 100644 src/bestmatches.f delete mode 100644 src/computecost.f delete mode 100644 src/ellapsed.f delete mode 100644 src/g.f delete mode 100644 src/init.c delete mode 100644 src/logtwdtw.f delete mode 100644 src/tracepath.f delete mode 100644 src/twdtw.f delete mode 100644 tic.R delete mode 100644 vignettes/twdtw01.Rmd delete mode 100644 vignettes/twdtw02-lucc.Rmd delete mode 100644 vignettes/twdtw03-speed.Rmd diff --git a/.travis.yml b/.travis.yml deleted file mode 100644 index 3994ef3..0000000 --- a/.travis.yml +++ /dev/null @@ -1,54 +0,0 @@ -language: r - -r: - - release -# - devel - -deploy.skip_cleanup: true - -sudo: required -dist: trusty - -cache: - - packages - - ccache - -latex: true - -r_github_packages: - - r-lib/covr - -bioc_packages: - - Biobase - -addons: - apt: - sources: - - sourceline: 'ppa:ubuntugis/ubuntugis-unstable' - packages: - - libproj-dev - - libgeos-dev - - libspatialite-dev - - libgdal-dev - -before_install: - - R -e 'install.packages("rgdal", repos="http://R-Forge.R-project.org")' - - R -q -e 'install.packages("remotes"); remotes::install_github("ropenscilabs/tic"); tic::prepare_all_stages()' - -r_packages: - - covr - -after_success: - - Rscript -e 'library(covr); codecov()' - -after_success: - - R -q -e 'covr::codecov(quiet = FALSE)' - -install: R -q -e 'tic::install()' -script: R -q -e 'tic::script()' -before_deploy: R -q -e 'tic::before_deploy()' -deploy: - provider: script - script: R -q -e 'tic::deploy()' - on: - branch: master diff --git a/DESCRIPTION b/DESCRIPTION index edb5e33..bfbce85 100644 --- a/DESCRIPTION +++ b/DESCRIPTION @@ -2,7 +2,7 @@ Package: dtwSat Type: Package Title: Time-Weighted Dynamic Time Warping for Satellite Image Time Series Analysis Version: 1.0.0 -Date: 2023-06-30 +Date: 2023-07-31 Authors@R: c(person(given = "Victor", family = "Maus", @@ -30,90 +30,19 @@ Description: Provides an implementation of the Time-Weighted Dynamic Time perform TWDTW analysis for satellite datasets, visualize the results of the analysis, produce land cover maps, create temporal plots for land cover change, and compute accuracy metrics. -Depends: - R (>= 3.5.0), - zoo, - raster, - ggplot2 -Imports: - methods, - rgdal, - dtw, - proxy, - scales, - reshape2, - grDevices, - RColorBrewer, - plyr, - stats, - sp, - lubridate, - caret, - mgcv, - xtable, - Rdpack, - data.table, - foreach -Suggests: - gridExtra, - grid, - png, - Hmisc, - rbenchmark, - doParallel, - knitr, - rmarkdown -License: GPL (>= 3) | file LICENSE -URL: https://www.victor-maus.com/dtwSat/, https://github.com/vwmaus/dtwSat/ +License: GPL (>= 3) +URL: https://github.com/vwmaus/dtwSat/ BugReports: https://github.com/vwmaus/dtwSat/issues/ Maintainer: Victor Maus LazyData: true -VignetteBuilder: - knitr Encoding: UTF-8 +Roxygen: list(markdown = TRUE) RoxygenNote: 7.2.3 -Collate: - 'class-crossValidation.R' - 'class-twdtwRaster.R' - 'class-twdtwAssessment.R' - 'class-twdtwTimeSeries.R' - 'class-twdtwMatches.R' - 'createPatterns.R' - 'data.R' - 'dtw.R' - 'dwtSat.R' - 'getInternals.R' - 'getMatchingDates.R' - 'getTimeSeries.R' - 'linearWeight.R' - 'logisticWeight.R' - 'methods.R' - 'miscellaneous.R' - 'plot.R' - 'plotAccuracy.R' - 'plotAdjustedArea.R' - 'plotAlignments.R' - 'plotArea.R' - 'plotChanges.R' - 'plotClassification.R' - 'plotCostMatrix.R' - 'plotDistance.R' - 'plotMapSamples.R' - 'plotMaps.R' - 'plotMatches.R' - 'plotPaths.R' - 'plotPatterns.R' - 'plotTimeSeries.R' - 'resampleTimeSeries.R' - 'subset.R' - 'twdtw.R' - 'twdtwApply.R' - 'twdtwAssess.R' - 'twdtwClassify.R' - 'twdtwCrossValidate.R' - 'twdtwDist.R' - 'twdtwXtable.R' - 'twdtw_reduce_time.R' - 'utils.R' - 'zzz.R' -RdMacros: Rdpack +Depends: + twdtw +Imports: + stats, + mgcv +Suggests: + rbenchmark, + testthat diff --git a/NAMESPACE b/NAMESPACE index 5c60500..49b478b 100644 --- a/NAMESPACE +++ b/NAMESPACE @@ -1,130 +1,10 @@ # Generated by roxygen2: do not edit by hand -export(asymmetric) -export(createPatterns) -export(getDatesFromDOY) -export(linearWeight) -export(logisticWeight) -export(plot) -export(plotAccuracy) -export(plotAdjustedArea) -export(plotAlignments) -export(plotArea) -export(plotChanges) -export(plotClassification) -export(plotCostMatrix) -export(plotDistance) -export(plotMapSamples) -export(plotMaps) -export(plotMatches) -export(plotPaths) -export(plotPatterns) -export(plotTimeSeries) -export(rabinerJuangStepPattern) -export(resampleTimeSeries) -export(shiftDates) -export(symmetric1) -export(symmetric2) -export(twdtwApply) -export(twdtwClassify) -export(twdtwReduceTime) -exportMethods("[") -exportMethods("[[") -exportMethods(as.data.frame) -exportMethods(as.list) -exportMethods(as.twdtwTimeSeries) -exportMethods(bands) -exportMethods(coordinates) -exportMethods(coverages) -exportMethods(createPatterns) -exportMethods(crop) -exportMethods(dim) -exportMethods(extent) -exportMethods(getAlignments) -exportMethods(getInternals) -exportMethods(getMatches) -exportMethods(getPatterns) -exportMethods(getTimeSeries) -exportMethods(index) -exportMethods(is.twdtwMatches) -exportMethods(is.twdtwRaster) -exportMethods(is.twdtwTimeSeries) -exportMethods(labels) -exportMethods(layers) -exportMethods(length) -exportMethods(levels) -exportMethods(names) -exportMethods(ncol) -exportMethods(nlayers) -exportMethods(nrow) -exportMethods(plot) -exportMethods(projecttwdtwRaster) -exportMethods(res) -exportMethods(resampleTimeSeries) -exportMethods(shiftDates) -exportMethods(show) -exportMethods(subset) -exportMethods(summary) -exportMethods(twdtwApply) -exportMethods(twdtwAssess) -exportMethods(twdtwClassify) -exportMethods(twdtwCrossValidate) -exportMethods(twdtwMatches) -exportMethods(twdtwRaster) -exportMethods(twdtwTimeSeries) -exportMethods(twdtwXtable) -exportMethods(writeRaster) -import(ggplot2) -import(methods) -import(raster) -import(rgdal) -import(zoo) -importFrom(RColorBrewer,brewer.pal) -importFrom(Rdpack,reprompt) -importFrom(caret,createDataPartition) -importFrom(data.table,rbindlist) -importFrom(dtw,asymmetric) -importFrom(dtw,rabinerJuangStepPattern) -importFrom(dtw,symmetric1) -importFrom(dtw,symmetric2) -importFrom(foreach,"%dopar%") -importFrom(foreach,foreach) -importFrom(grDevices,gray.colors) -importFrom(grDevices,terrain.colors) -importFrom(lubridate,"day<-") -importFrom(lubridate,"month<-") -importFrom(lubridate,"year<-") -importFrom(lubridate,day) -importFrom(lubridate,month) -importFrom(lubridate,year) +export(create_pattern) +export(get_dates_from_doy) +export(plot_patterns) +export(shift_dates) +import(stars) +import(twdtw) importFrom(mgcv,gam) importFrom(mgcv,predict.gam) -importFrom(plyr,alply) -importFrom(proxy,dist) -importFrom(proxy,pr_DB) -importFrom(reshape2,melt) -importFrom(scales,date_format) -importFrom(scales,percent) -importFrom(scales,pretty_breaks) -importFrom(sp,CRS) -importFrom(sp,Polygon) -importFrom(sp,Polygons) -importFrom(sp,SpatialPoints) -importFrom(sp,SpatialPointsDataFrame) -importFrom(sp,SpatialPolygons) -importFrom(sp,bbox) -importFrom(sp,coordinates) -importFrom(sp,over) -importFrom(sp,spTransform) -importFrom(stats,ave) -importFrom(stats,na.omit) -importFrom(stats,qnorm) -importFrom(stats,sd) -importFrom(stats,window) -importFrom(stats,xtabs) -importFrom(utils,flush.console) -importFrom(utils,globalVariables) -importFrom(utils,packageDescription) -importFrom(xtable,print.xtable) -importFrom(xtable,xtable) -useDynLib(dtwSat, .registration = TRUE) diff --git a/NEWS.md b/NEWS.md index 9c7a3f0..46b8eed 100644 --- a/NEWS.md +++ b/NEWS.md @@ -1,6 +1,6 @@ # dtwSat v1.0.0 -* Major release: drops dependencies on rgdal and rgeos +* Major release: drops dependencies and simplifies package # dtwSat v0.2.8 diff --git a/R/class-crossValidation.R b/R/class-crossValidation.R deleted file mode 100644 index 297b73a..0000000 --- a/R/class-crossValidation.R +++ /dev/null @@ -1,115 +0,0 @@ -############################################################### -# # -# (c) Victor Maus # -# Institute for Geoinformatics (IFGI) # -# University of Muenster (WWU), Germany # -# # -# Earth System Science Center (CCST) # -# National Institute for Space Research (INPE), Brazil # -# # -# # -# R Package dtwSat - 2016-11-27 # -# # -############################################################### - - -#' @title class "twdtwCrossValidation" -#' @name twdtwCrossValidation-class -#' @aliases twdtwCrossValidation -#' @author Victor Maus, \email{vwmaus1@@gmail.com} -#' -#' @description This class stores the results of the cross-validation. -#' -#' @param object an object of class twdtwCrossValidation. -#' -#' @param conf.int specifies the confidence level (0-1) for interval estimation of the -#' population mean. For more details see \code{\link[ggplot2]{mean_cl_boot}}. -#' -#' @param ... Other arguments. Not used. -#' -#' @seealso -#' \code{\link[dtwSat]{twdtwMatches-class}}, -#' \code{\link[dtwSat]{createPatterns}}, and -#' \code{\link[dtwSat]{twdtwApply}}. -#' -#' @section Slots : -#' \describe{ -#' \item{\code{partitions}:}{A list with the indices of time series used for training.} -#' \item{\code{accuracy}:}{A list with the accuracy and other TWDTW information for each -#' data partitions.} -#' } -#' -#' @references -#' \insertRef{Maus:2019}{dtwSat} -#' -#' \insertRef{Maus:2016}{dtwSat} -#' -#' @examples -#' \dontrun{ -#' # Data folder -#' data_folder = system.file("lucc_MT/data", package = "dtwSat") -#' -#' # Read dates -#' dates = scan(paste(data_folder,"timeline", sep = "/"), what = "dates") -#' -#' # Read raster time series -#' evi = brick(paste(data_folder,"evi.tif", sep = "/")) -#' raster_timeseries = twdtwRaster(evi, timeline = dates) -#' -#' # Read field samples -#' field_samples = read.csv(paste(data_folder,"samples.csv", sep = "/")) -#' table(field_samples[["label"]]) -#' -#' # Read field samples projection -#' proj_str = scan(paste(data_folder,"samples_projection", sep = "/"), -#' what = "character") -#' -#' # Get sample time series from raster time series -#' field_samples_ts = getTimeSeries(raster_timeseries, -#' y = field_samples, proj4string = proj_str) -#' field_samples_ts -#' -#' # Run cross validation -#' set.seed(1) -#' # Define TWDTW weight function -#' log_fun = logisticWeight(alpha=-0.1, beta=50) -#' cross_validation = twdtwCrossValidate(field_samples_ts, times=3, p=0.1, -#' freq = 8, formula = y ~ s(x, bs="cc"), weight.fun = log_fun) -#' cross_validation -#' -#' summary(cross_validation) -#' -#' plot(cross_validation) -#' -#' } -NULL -setClass( - Class = "twdtwCrossValidation", - slots = c(partitions = "list", accuracy = "list"), - validity = function(object){ - if(!is(object@partitions, "list")){ - stop("[twdtwCrossValidation: validation] Invalid partitions, class different from list.") - }else{} - if(!is(object@accuracy, "list")){ - stop("[twdtwCrossValidation: validation] Invalid accuracy, class different from list.") - }else{} - return(TRUE) - } -) - -setMethod("initialize", - signature = "twdtwCrossValidation", - definition = - function(.Object, partitions, accuracy){ - .Object@partitions = list(Resample1=NULL) - .Object@accuracy = list(OverallAccuracy=NULL, UsersAccuracy=NULL, ProducersAccuracy=NULL, - ErrorMatrix=table(NULL), data=data.frame(NULL)) - if(!missing(partitions)) - .Object@partitions = partitions - if(!missing(accuracy)) - .Object@accuracy = accuracy - validObject(.Object) - return(.Object) - } -) - diff --git a/R/class-twdtwAssessment.R b/R/class-twdtwAssessment.R deleted file mode 100644 index c935454..0000000 --- a/R/class-twdtwAssessment.R +++ /dev/null @@ -1,95 +0,0 @@ -############################################################### -# # -# (c) Victor Maus # -# Institute for Geoinformatics (IFGI) # -# University of Muenster (WWU), Germany # -# # -# Earth System Science Center (CCST) # -# National Institute for Space Research (INPE), Brazil # -# # -# # -# R Package dtwSat - 2017-01-18 # -# # -############################################################### - -#' @include class-twdtwRaster.R -#' @title class "twdtwAssessment" -#' @name twdtwAssessment-class -#' @aliases twdtwAssessment -#' @author Victor Maus, \email{vwmaus1@@gmail.com} -#' -#' @description This class stores the map assessment metrics. -#' -#' @param object an object of class twdtwAssessment. -#' -#' @seealso \code{\link[dtwSat]{twdtwClassify}}, -#' \code{\link[dtwSat]{twdtwAssess}}, and -#' \code{\link[dtwSat]{twdtwXtable}}. -#' -#' @section Slots : -#' \describe{ -#' \item{\code{accuracySummary}:}{Overall Accuracy, User's Accuracy, Producer's Accuracy, -#' Error Matrix (confusion matrix), and Estimated Area, considering all time periods.} -#' \item{\code{accuracyByPeriod}:}{Overall Accuracy, User's Accuracy, Producer's Accuracy, -#' Error Matrix (confusion matrix), and Estimated Area, for each time periods independently -#' from each other.} -#' \item{\code{data}:}{A \code{\link[sp]{SpatialPointsDataFrame}} with sample ID, period, -#' date from, date to, reference labels, predicted labels, and TWDTW distance.} -#' \item{\code{map}:}{A \code{\link[dtwSat]{twdtwRaster}} with the raster maps.} -#' } -#' -#' @details -#' If the twdtwRaster is unprojected (longitude/latitude) the estimated area is the sum of the approximate -#' surface area in km2 of each cell (pixel). If the twdtwRaster is projected the estimated area is calculated -#' using the the pixel resolution in the map unit. -#' -#' @references -#' \insertRef{Maus:2019}{dtwSat} -#' -#' \insertRef{Maus:2016}{dtwSat} -#' -NULL -setClass( - Class = "twdtwAssessment", - slots = c(accuracySummary = "list", accuracyByPeriod = "list", data = "SpatialPointsDataFrame", map = "twdtwRaster"), - validity = function(object){ - if(!is(object@accuracySummary, "list")){ - stop("[twdtwAssessment: validation] Invalid partitions, class different from list.") - }else{} - if(!is(object@accuracyByPeriod, "list")){ - stop("[twdtwAssessment: validation] Invalid accuracy, class different from list.") - }else{} - if(!is(object@data, "SpatialPointsDataFrame")){ - stop("[twdtwAssessment: validation] Invalid accuracy, class different from SpatialPointsDataFrame.") - }else{} - if(!is(object@map, "twdtwRaster")){ - stop("[twdtwAssessment: validation] Invalid accuracy, class different from twdtwRaster.") - }else{} - return(TRUE) - } -) - -setMethod("initialize", - signature = "twdtwAssessment", - definition = - function(.Object, accuracySummary, accuracyByPeriod, data, map){ - .Object@accuracySummary = list(OverallAccuracy=NULL, UsersAccuracy=NULL, ProducersAccuracy=NULL, ErrorMatrix=table(NULL)) - .Object@accuracyByPeriod = list(list(OverallAccuracy=NULL, UsersAccuracy=NULL, ProducersAccuracy=NULL, - ErrorMatrix=table(NULL))) - .Object@data = SpatialPointsDataFrame(coords = cbind(0,0), - data = data.frame(Sample.id=0, Period=NA, from=NA, to=NA, Distance=NA, Predicted=NA, Reference=NA, Distance=NA)) - .Object@map = new("twdtwRaster") - if(!missing(accuracySummary)) - .Object@accuracySummary = accuracySummary - if(!missing(accuracyByPeriod)) - .Object@accuracyByPeriod = accuracyByPeriod - if(!missing(data)) - .Object@data = data - if(!missing(map)) - .Object@map = map - validObject(.Object) - return(.Object) - } -) - - diff --git a/R/class-twdtwMatches.R b/R/class-twdtwMatches.R deleted file mode 100644 index 26b7861..0000000 --- a/R/class-twdtwMatches.R +++ /dev/null @@ -1,148 +0,0 @@ -############################################################### -# # -# (c) Victor Maus # -# Institute for Geoinformatics (IFGI) # -# University of Muenster (WWU), Germany # -# # -# Earth System Science Center (CCST) # -# National Institute for Space Research (INPE), Brazil # -# # -# # -# R Package dtwSat - 2015-09-01 # -# # -############################################################### - - -#' @title class "twdtwMatches" -#' @name twdtwMatches-class -#' @aliases twdtwMatches -#' @author Victor Maus, \email{vwmaus1@@gmail.com} -#' -#' @description Class for Time-Weighted Dynamic Time Warping results. -#' -#' @param labels a vector with labels of the time series. -#' @param x an object of class twdtwMatches. -#' @param object an object of class twdtwMatches. -#' @param timeseries a \code{\link[dtwSat]{twdtwTimeSeries}} object. -#' @param patterns a \code{\link[dtwSat]{twdtwTimeSeries}} object. -#' @param alignments an object of class list with the TWDTW results with -#' the same length as \code{timeseries} or a list of twdtwMatches. -#' -#' @include class-twdtwTimeSeries.R -#' -#' @section Slots : -#' \describe{ -#' \item{\code{timeseries}:}{An object of class \code{\link[dtwSat]{twdtwTimeSeries-class}} with the satellite time series.} -#' \item{\code{pattern}:}{An object of class \code{\link[dtwSat]{twdtwTimeSeries-class}} with the temporal patterns.} -#' \item{\code{alignments}:}{A \code{\link[base]{list}} of TWDTW results with the same length as -#' the \code{timeseries}. Each element in this list has the following results for each temporal pattern -#' in \code{patterns}: -#' \cr\code{from}: a vector with the starting dates of each match in the format "YYYY-MM-DD", -#' \cr\code{to}: a vector with the ending dates of each match in the format "YYYY-MM-DD", -#' \cr\code{distance}: a vector with TWDTW dissimilarity measure, and -#' \cr\code{K}: the number of matches of the pattern. -#' } -#' \item{This list might have additional elements:}{ if \code{keep=TRUE} in the \code{twdtwApply} call -#' the list is extended to include internal structures used during the TWDTW computation: -#' \cr\code{costMatrix}: cumulative cost matrix, -#' \cr\code{directionMatrix}: directions of steps that would be taken from each element of matrix, -#' \cr\code{startingMatrix}: the starting points of each element of the matrix, -#' \cr\code{stepPattern}: \code{\link[dtw]{stepPattern}} used for the -#' computation, see package \code{\link[dtw]{dtw}}, -#' \cr\code{N}: the length of the \code{pattern}, -#' \cr\code{M}: the length of the time series \code{timeseries}, -#' \cr\code{timeWeight}: time weight matrix, -#' \cr\code{localMatrix}: local cost matrix, -#' \cr\code{matching}: A list whose elements have the matching points for -#' each match between pattern the time series, such that: -#' \cr--\code{index1}: a vector with matching points of the pattern, and -#' \cr--\code{index2}: a vector with matching points of the time series. -#' } -#' } -#' -#' -#' @seealso -#' \code{\link[dtwSat]{twdtwApply}}, -#' \code{\link[dtwSat]{twdtwTimeSeries-class}}, and -#' \code{\link[dtwSat]{twdtwRaster-class}} -#' -#' @references -#' \insertRef{Maus:2019}{dtwSat} -#' -#' \insertRef{Maus:2016}{dtwSat} -#' -#' @examples -#' ts = twdtwTimeSeries(timeseries=MOD13Q1.ts.list) -#' patterns = twdtwTimeSeries(timeseries=MOD13Q1.patterns.list) -#' matches = twdtwApply(x = ts, y = patterns, keep=TRUE, legacy=TRUE) -#' class(matches) -#' length(matches) -#' matches -NULL -setClass( - Class = "twdtwMatches", - slots = c(timeseries="twdtwTimeSeries", - patterns = "twdtwTimeSeries", - alignments = "list"), - validity = function(object){ - if(!is(object@alignments, "list")){ - stop("[twdtwMatches: validation] Invalid alignments object, class different from list.") - }else{} - if(!is(object@timeseries, "twdtwTimeSeries")){ - stop("[twdtwMatches: validation] Invalid timeseries object, class different from twdtwTimeSeries.") - }else{} - if(!is(object@patterns, "twdtwTimeSeries")){ - stop("[twdtwMatches: validation] Invalid patterns object, class different from list of twdtwTimeSeries.") - }else{} - return(TRUE) - } -) - -setMethod("initialize", - signature = "twdtwMatches", - definition = - function(.Object, timeseries, patterns, alignments){ - .Object@timeseries = new("twdtwTimeSeries") - .Object@patterns = new("twdtwTimeSeries") - .Object@alignments = list() - if(!missing(alignments)) - .Object@alignments = alignments - if(!missing(timeseries)) - .Object@timeseries = timeseries - if(!missing(patterns)) - .Object@patterns = patterns - validObject(.Object) - return(.Object) - } -) - -setGeneric(name = "twdtwMatches", - def = function(timeseries=NULL, patterns=NULL, alignments=NULL) standardGeneric("twdtwMatches") -) - -#' @inheritParams twdtwMatches-class -#' @aliases twdtwMatches-create -#' @describeIn twdtwMatches Create object of class twdtwMatches. -#' -#' @examples -#' # Creating objects of class twdtwMatches -#' ts = twdtwTimeSeries(MOD13Q1.ts.list) -#' patt = twdtwTimeSeries(MOD13Q1.patterns.list) -#' mat = twdtwApply(ts, patt, weight.fun = logisticWeight(-0.1, 100), -#' keep=TRUE, legacy=TRUE) -#' mat = twdtwMatches(ts, patterns=patt, alignments=mat) -#' mat -#' -#' @export -setMethod(f = "twdtwMatches", - definition = function(timeseries, patterns, alignments){ - aligs = alignments - if(is(alignments, "twdtwMatches")) alignments = list(alignments) - if(all(sapply(alignments, is.twdtwMatches))) { - aligs = alignments - if(is(alignments, "list")) aligs = do.call("c", lapply(alignments, function(x) x@alignments)) - if(is.null(timeseries)) timeseries = do.call("twdtwTimeSeries", lapply(alignments, function(x) subset(x@timeseries))) - if(is.null(patterns)) patterns=alignments[[1]]@patterns - } - new("twdtwMatches", timeseries=timeseries, patterns=patterns, alignments=aligs) - }) diff --git a/R/class-twdtwRaster.R b/R/class-twdtwRaster.R deleted file mode 100644 index 8fd9bd8..0000000 --- a/R/class-twdtwRaster.R +++ /dev/null @@ -1,256 +0,0 @@ -############################################################### -# # -# (c) Victor Maus # -# Institute for Geoinformatics (IFGI) # -# University of Muenster (WWU), Germany # -# # -# Earth System Science Center (CCST) # -# National Institute for Space Research (INPE), Brazil # -# # -# # -# R Package dtwSat - 2016-02-18 # -# # -############################################################### - - -#' @title class "twdtwRaster" -#' @name twdtwRaster-class -#' @aliases twdtwRaster -#' @author Victor Maus, \email{vwmaus1@@gmail.com} -#' -#' @description Class for set of satellite time series. -#' -#' @param ... objects of class \code{\link[raster]{RasterBrick-class}} or -#' \code{\link[raster]{RasterStack-class}}. -#' -#' @param timeline a vector with the dates of the satellite images -#' in the format of "YYYY-MM-DD". -#' -#' @param layers a vector with the names of the \code{Raster*} objects -#' passed to "\code{...}". If not provided the layers are set to the -#' names of objects in "\code{...}". -#' -#' @param labels a vector of class \code{\link[base]{character}} with -#' labels of the values in the Raster* objects. This is -#' useful for categorical Raster* values of land use classes. -#' -#' @param levels a vector of class \code{\link[base]{numeric}} with -#' levels of the values in the Raster* objects. This is -#' useful for categorical Raster* values of land use classes. -#' -#' @param doy A \code{\link[raster]{RasterBrick-class}} or -#' \code{\link[raster]{RasterStack-class}} with a sequence of days of the year for each pixel. -#' \code{doy} must have the same spatial and temporal extents as the Raster* objects passed to \code{...}. -#' If \code{doy} is not provided then at least one Raster* object must be passed through \code{...}. -#' -#' @param filepath A character. The path to save the raster time series. If provided the -#' function saves a raster file for each Raster* object in the list, \emph{i.e} one file -#' for each time series. This way the function retrieves a list of -#' \code{\link[raster]{RasterBrick-class}}. It is useful when the time series are -#' originally stored in separated files. See details. -#' -#' @param object an object of class twdtwRaster. -#' -#' @param x an object of class twdtwRaster. -#' -#' @details The performance of the functions \code{\link[dtwSat]{twdtwApply}} and -#' \code{\link[dtwSat]{getTimeSeries}} is improved if the Raster* objects are connected -#' to files with the whole time series for each attribute. -#' -#' @section Slots : -#' \describe{ -#' \item{\code{timeseries}:}{A list of multi-layer Raster* objects -#' with the satellite image time series.} -#' \item{\code{timeline}:}{A vector of class \code{\link[base]{date}} -#' with dates of the satellite images in \code{timeseries}.} -#' \item{\code{layers}:}{A vector of class \code{\link[base]{character}} -#' with the names of the Raster* objects.} -#' \item{\code{labels}:}{A vector of class \code{\link[base]{factor}} -#' with levels and labels of the values in the Raster* objects. This -#' is useful for categorical Raster* values of land use classes.} -#' } -#' -#' @seealso -#' \code{\link[dtwSat]{twdtwApply}}, -#' \code{\link[dtwSat]{getTimeSeries}}, -#' \code{\link[dtwSat]{twdtwMatches-class}}, and -#' \code{\link[dtwSat]{twdtwTimeSeries-class}} -#' -#' @references -#' \insertRef{Maus:2019}{dtwSat} -#' -#' \insertRef{Maus:2016}{dtwSat} -#' -#' @examples -#' # Creating a new object of class twdtwTimeSeries -#' evi = brick(system.file("lucc_MT/data/evi.tif", package="dtwSat")) -#' timeline = scan(system.file("lucc_MT/data/timeline", package="dtwSat"), what="date") -#' rts = new("twdtwRaster", timeseries = evi, timeline = timeline) -#' -NULL -setClass( - Class = "twdtwRaster", - slots = c(timeseries = "list", timeline="Date", layers = "character", labels = "character", levels="numeric"), - validity = function(object){ - if(!is(object@timeline, "Date")){ - stop("[twdtwTimeSeries: validation] Invalid timeline object, class different from Date.") - }else{} - if(any(!(sapply(object@timeseries, is, "RasterBrick") | sapply(object@timeseries, is, "RasterStack") | sapply(object@timeseries, is, "RasterLayer")))){ - stop("[twdtwRaster: validation] Invalid timeseries object, class different from Raster*.") - }else{} - if(!is(object@layers, "character")){ - stop("[twdtwTimeSeries: validation] Invalid layers object, class different from character.") - }else{} - if( length(object@layers)>0 & length(object@layers)!=length(object@timeseries) ){ - stop("[twdtwTimeSeries: validation] Invalid length, layers and timeseries do not have the same length.") - }else{} - if(!is(object@labels, "character")){ - stop("[twdtwTimeSeries: validation] Invalid labels object, class different from character.") - }else{} - if(!is(object@levels, "numeric")){ - stop("[twdtwTimeSeries: validation] Invalid levels object, class different from numeric.") - }else{} - if( length(object@labels) != length(object@levels) ){ - stop("[twdtwTimeSeries: validation] Invalid length, labels and levels do not have the same length.") - }else{} - lapply(object@timeseries, FUN=compareRaster, object@timeseries[[1]], extent=TRUE, rowcol=TRUE, - crs=TRUE, res=TRUE, orig=TRUE, rotation=TRUE, stopiffalse=TRUE) - return(TRUE) - } -) - -setMethod("initialize", - signature = "twdtwRaster", - definition = - function(.Object, timeseries, timeline, doy, layers, labels, levels){ - - .Object@timeseries = list(Layer0=brick()) - .Object@timeline = as.Date(0) - .Object@labels = as.character() - .Object@levels = numeric() - if(!missing(timeseries)){ - if(is(timeseries, "RasterBrick") | is(timeseries, "RasterStack") | is(timeseries, "RasterLayer") ) - timeseries = list(timeseries) - .Object@timeseries = timeseries - if(is.null(names(.Object@timeseries))) - names(.Object@timeseries) = paste0("Layer", seq_along(.Object@timeseries)-1) - } else { - if(!missing(layers)) - names(.Object@timeseries) = layers - } - if(!missing(doy)) - .Object@timeseries = c(doy = doy, .Object@timeseries) - .Object@layers = names(.Object@timeseries) - if(!missing(labels)) - .Object@labels = as.character(labels) - if(missing(levels)) - levels = seq_along(.Object@labels) - .Object@levels = as.numeric(levels) - if(!missing(timeline)) - .Object@timeline = as.Date(timeline) - validObject(.Object) - names(.Object@timeline) = paste0("date.", format(.Object@timeline,"%Y.%m.%d")) - .Object@timeseries = lapply(.Object@timeseries, function(x) { names(x)=names(.Object@timeline); x}) - return(.Object) - } -) - - -setGeneric(name = "twdtwRaster", - def = function(..., timeline, doy=NULL, layers=NULL, labels=NULL, levels=NULL, filepath=NULL) - standardGeneric("twdtwRaster") -) - - -#' @inheritParams twdtwRaster -#' @aliases twdtwRaster-create -#' @describeIn twdtwRaster Create object of class twdtwRaster. -#' -#' @examples -#' \dontrun{ -#' # Creating objects of class twdtwRaster -#' evi = brick(system.file("lucc_MT/data/evi.tif", package="dtwSat")) -#' timeline = scan(system.file("lucc_MT/data/timeline", package="dtwSat"), what="date") -#' ts_evi = twdtwRaster(evi, timeline=timeline) -#' -#' ndvi = brick(system.file("lucc_MT/data/ndvi.tif", package="dtwSat")) -#' blue = brick(system.file("lucc_MT/data/blue.tif", package="dtwSat")) -#' red = brick(system.file("lucc_MT/data/red.tif", package="dtwSat")) -#' nir = brick(system.file("lucc_MT/data/nir.tif", package="dtwSat")) -#' mir = brick(system.file("lucc_MT/data/mir.tif", package="dtwSat")) -#' doy = brick(system.file("lucc_MT/data/doy.tif", package="dtwSat")) -#' rts = twdtwRaster(doy, evi, ndvi, blue, red, nir, mir, timeline = timeline) -#' } -#' @export -setMethod(f = "twdtwRaster", - definition = function(..., timeline, doy, layers, labels, levels){ - arg_names = names(list(...)) - not_named = setdiff(as.character(match.call(expand.dots=TRUE)), as.character(match.call(expand.dots=FALSE))) - if(is.null(arg_names)){ - arg_names = not_named - } else { - arg_names[arg_names==""] = not_named[arg_names==""] - } - x = list(...) - names(x) = c(arg_names) - if(missing(doy)){ - if(any(arg_names %in% "doy")){ - doy = x[[which(arg_names %in% "doy")]] - x = x[which(!(arg_names %in% "doy"))] - } - } - I = which(sapply(x, is, "RasterBrick") | sapply(x, is, "RasterStack") | sapply(x, is, "RasterLayer")) - if(length(I) < 1) - stop("There are no Raster* objects in the list of arguments") - # Split arguments - timeseries = x[I] - dotargs = x[-I] - creat.twdtwRaster(timeseries=timeseries, timeline=as.Date(timeline), doy=doy, - layers=layers, labels=labels, levels=levels, dotargs=dotargs) - }) - - -creat.twdtwRaster = function(timeseries, timeline, doy, layers, labels, levels, dotargs){ - - # Check timeline - nl = sapply(c(timeseries), nlayers) - if(!is.null(doy)) - nl = c(nlayers(doy), nl) - if(any(nl!=length(timeline))) - stop("Raster objects do not have the same length as the timeline") - - res = timeseries - # Save a single file (complete time series) for each raster attribute - # if (filepath != "") { - # dir.create(filepath, showWarnings = FALSE) - # write(as.character(timeline), file = paste(filepath, "timeline", sep="/")) - # aux = res - # if(!is.null(doy)) - # aux = c(doy=doy, res) - # res_brick = lapply(names(aux), function(i){ - # filename = paste(filepath, i, sep="/") - # dotargs = c(x = aux[[i]], filename = filename, dotargs) - # r = do.call(writeRaster, dotargs) - # r - # }) - # names(res_brick) = names(aux) - # doy = NULL - # res = res_brick - # if(any(names(res)=="doy")){ - # res = res_brick[-1] - # doy = res_brick[[1]] - # } - # } - if(is.null(layers)) layers = names(res) - if(is.null(doy)) - return(new("twdtwRaster", timeseries = res, timeline = timeline, layers = layers, labels = labels, levels=levels)) - new("twdtwRaster", timeseries = res, timeline = timeline, doy=doy, layers = layers, labels = labels, levels=levels) -} - -.creat.doy = function(x, timeline){ - array_data = rep(as.numeric(format(as.Date(timeline), "%j")), each=ncell(x)) - e = extent(x) - brick(array(array_data, dim = dim(x)), xmn=e[1], xmx=e[2], ymn=e[3], ymx=e[4], crs = projection(x)) -} - - diff --git a/R/class-twdtwTimeSeries.R b/R/class-twdtwTimeSeries.R deleted file mode 100644 index 1b5a8fb..0000000 --- a/R/class-twdtwTimeSeries.R +++ /dev/null @@ -1,155 +0,0 @@ -############################################################### -# # -# (c) Victor Maus # -# Institute for Geoinformatics (IFGI) # -# University of Muenster (WWU), Germany # -# # -# Earth System Science Center (CCST) # -# National Institute for Space Research (INPE), Brazil # -# # -# # -# R Package dtwSat - 2016-02-18 # -# # -############################################################### - -#' @title class "twdtwTimeSeries" -#' @name twdtwTimeSeries-class -#' @aliases twdtwTimeSeries -#' @author Victor Maus, \email{vwmaus1@@gmail.com} -#' -#' @description Class for setting irregular time series. -#' -#' @param ... \code{\link[dtwSat]{twdtwTimeSeries}} objects, -#' \code{\link[zoo]{zoo}} objects or a list of \code{\link[zoo]{zoo}} objects. -#' @param labels a vector with labels of the time series. -#' @param object an object of class twdtwTimeSeries. -#' @param x an object of class twdtwTimeSeries. -#' -#' @section Slots : -#' \describe{ -#' \item{\code{timeseries}:}{A list of \code{\link[zoo]{zoo}} objects.} -#' \item{\code{labels}:}{A vector of class \code{\link[base]{factor}} with time series labels.} -#' } -#' -#' @seealso -#' \code{\link[dtwSat]{twdtwMatches-class}}, -#' \code{\link[dtwSat]{twdtwRaster-class}}, -#' \code{\link[dtwSat]{getTimeSeries}}, and -#' \code{\link[dtwSat]{twdtwApply}} -#' -#' @references -#' \insertRef{Maus:2019}{dtwSat} -#' -#' \insertRef{Maus:2016}{dtwSat} -#' -#' @examples -#' # Creating a new object of class twdtwTimeSeries -#' ptt = new("twdtwTimeSeries", timeseries = MOD13Q1.patterns.list, -#' labels = names(MOD13Q1.patterns.list)) -#' class(ptt) -#' labels(ptt) -#' levels(ptt) -#' length(ptt) -#' nrow(ptt) -#' ncol(ptt) -#' dim(ptt) -NULL -setClass( - Class = "twdtwTimeSeries", - slots = c(timeseries = "list", labels = "factor"), - validity = function(object){ - if(!is(object@timeseries, "list")){ - stop("[twdtwTimeSeries: validation] Invalid timeseries object, class different from list.") - }else{} - if(any(length(object@timeseries)>1 & !sapply(object@timeseries, is.zoo))){ - stop("[twdtwTimeSeries: validation] Invalid timeseries object, class different from list of zoo objects.") - }else{} - if(!is(object@labels, "factor")){ - stop("[twdtwTimeSeries: validation] Invalid labels object, class different from character.") - }else{} - if( length(object@labels)!=0 & length(object@labels)!=length(object@timeseries) ){ - stop("[twdtwTimeSeries: validation] Invalid labels, labels and timeseries do not have the same length.") - }else{} - return(TRUE) - } -) - -setMethod("initialize", - signature = "twdtwTimeSeries", - definition = - function(.Object, timeseries, labels){ - .Object@timeseries = list() - .Object@labels = factor(NULL) - if(!missing(timeseries)){ - if(is(timeseries, "zoo")) timeseries = list(timeseries) - .Object@timeseries = timeseries - .Object@labels = factor( paste0("ts",seq_along(timeseries)) ) - if(!is.null(names(timeseries))) .Object@labels = factor(names(timeseries)) - } - if(!missing(labels)){ - .Object@labels = factor(labels) - names(.Object@timeseries) = as.character(labels) - } - validObject(.Object) - return(.Object) - } -) - -setGeneric(name = "twdtwTimeSeries", - def = function(...) standardGeneric("twdtwTimeSeries") -) - -#' @inheritParams twdtwTimeSeries-class -#' @aliases twdtwTimeSeries-create -#' -#' @describeIn twdtwTimeSeries Create object of class twdtwTimeSeries. -#' -#' @examples -#' # Creating objects of class twdtwTimeSeries from zoo objects -#' ts = twdtwTimeSeries(MOD13Q1.ts) -#' ts -#' -#' # Creating objects of class twdtwTimeSeries from list of zoo objects -#' patt = twdtwTimeSeries(MOD13Q1.patterns.list) -#' patt -#' -#' # Joining objects of class twdtwTimeSeries -#' tsA = twdtwTimeSeries(MOD13Q1.ts.list[[1]], labels = "A") -#' tsB = twdtwTimeSeries(B = MOD13Q1.ts.list[[2]]) -#' ts = twdtwTimeSeries(tsA, tsB, C=MOD13Q1.ts) -#' ts -#' -#' @export -setMethod(f = "twdtwTimeSeries", - definition = function(..., labels=NULL){ - timeseries = list(...) - joint_timeseries = list() - timeseries_class = sapply(timeseries, class) - zoo_obj = NULL - list_obj = NULL - twdtw_obj = NULL - check_class = c("zoo", "list", "twdtwTimeSeries") %in% timeseries_class - if(check_class[1]){ - zoo_obj = timeseries[which(timeseries_class=="zoo")] - names(zoo_obj) = names(timeseries)[which(timeseries_class=="zoo")] - if(is.null(names(zoo_obj))) names(zoo_obj) = paste0("ts",seq_along(zoo_obj)) - joint_timeseries = c(joint_timeseries, zoo_obj) - } else {} - if(check_class[2]){ - list_obj = c(do.call("c", timeseries[which(timeseries_class=="list")])) - if(is.null(names(list_obj))) names(list_obj) = paste0("ts", seq_along(list_obj)) - joint_timeseries = c(joint_timeseries, list_obj) - } else {} - if(check_class[3]){ - twdtw_obj = do.call("c", lapply(timeseries[which(timeseries_class=="twdtwTimeSeries")], getTimeSeries)) - names(twdtw_obj) = as.character(unlist(lapply(timeseries[which(timeseries_class=="twdtwTimeSeries")], labels))) - joint_timeseries = c(joint_timeseries, twdtw_obj) - } else {} - if(is.null(labels)) labels = names(joint_timeseries) - new("twdtwTimeSeries", timeseries = joint_timeseries, labels = labels) - }) - - - - - diff --git a/R/createPatterns.R b/R/createPatterns.R deleted file mode 100644 index f737743..0000000 --- a/R/createPatterns.R +++ /dev/null @@ -1,173 +0,0 @@ -############################################################### -# # -# (c) Victor Maus # -# Institute for Geoinformatics (IFGI) # -# University of Muenster (WWU), Germany # -# # -# Earth System Science Center (CCST) # -# National Institute for Space Research (INPE), Brazil # -# # -# # -# R Package dtwSat - 2016-02-18 # -# # -############################################################### - - -#' @title Create patterns -#' @name createPatterns -#' @author Victor Maus, \email{vwmaus1@@gmail.com} -#' -#' @description Create temporal patterns from objects of class twdtwTimeSeries. -#' -#' @param x an object of class \code{\link[dtwSat]{twdtwTimeSeries}}. -#' -#' @param from A character or \code{\link[base]{Dates}} object in the format -#' "yyyy-mm-dd". If not provided it is equal to the smallest date of the -#' first element in x. See details. -#' -#' @param to A \code{\link[base]{character}} or \code{\link[base]{Dates}} -#' object in the format "yyyy-mm-dd". If not provided it is equal to the -#' greatest date of the first element in x. See details. -#' -#' @param attr A vector character or numeric. The attributes in \code{x} to be used. -#' If not declared the function uses all attributes. -#' -#' @param freq An integer. The sampling frequency of the output patterns. -#' -#' @param split A logical. If TRUE the samples are split by label. If FALSE -#' all samples are set to the same label. -#' -#' @param formula A formula. Argument to pass to \code{\link[mgcv]{gam}}. -#' -#' @param ... other arguments to pass to the function \code{\link[mgcv]{gam}} in the -#' package \pkg{mgcv}. -#' -#' @return an object of class \code{\link[dtwSat]{twdtwTimeSeries}} -#' -#' -#' @details The hidden assumption is that the temporal pattern is a cycle the repeats itself -#' within a given time interval. Therefore, all time series samples in \code{x} are aligned -#' with each other, keeping their respective sequence of days of the year. The function fits a -#' Generalized Additive Model (GAM) to the aligned set of samples. -#' -#' @seealso -#' \code{\link[dtwSat]{twdtwMatches-class}}, -#' \code{\link[dtwSat]{twdtwTimeSeries-class}}, -#' \code{\link[dtwSat]{getTimeSeries}}, and -#' \code{\link[dtwSat]{twdtwApply}} -#' -#' @references -#' \insertRef{Maus:2019}{dtwSat} -#' -#' \insertRef{Maus:2016}{dtwSat} -#' -#' @export -setGeneric("createPatterns", function(x, from=NULL, to=NULL, freq=1, attr=NULL, split=TRUE, formula, ...) standardGeneric("createPatterns")) - -#' @rdname createPatterns -#' @aliases createPatterns-twdtwMatches -#' @examples -#' # Creating patterns from objects of class twdtwTimeSeries -#' evi = brick(system.file("lucc_MT/data/evi.tif", package="dtwSat")) -#' ndvi = brick(system.file("lucc_MT/data/ndvi.tif", package="dtwSat")) -#' timeline = scan(system.file("lucc_MT/data/timeline", package="dtwSat"), what="date") -#' rts = twdtwRaster(evi, ndvi, timeline=timeline) -#' -#' # Read field samples -#' \dontrun{ -#' field_samples = read.csv(system.file("lucc_MT/data/samples.csv", package="dtwSat")) -#' prj_string = scan(system.file("lucc_MT/data/samples_projection", package="dtwSat"), -#' what = "character") -#' -#' # Extract time series -#' ts = getTimeSeries(rts, y = field_samples, proj4string = prj_string) -#' -#' # Create temporal patterns -#' patt = createPatterns(x=ts, from="2005-09-01", to="2006-09-01", freq=8, formula = y~s(x)) -#' -#' # Plot patterns -#' autoplot(patt[[1]], facets = NULL) + xlab("Time") + ylab("Value") -#' -#' } -#' @export -setMethod("createPatterns", "twdtwTimeSeries", - function(x, from, to, freq, attr, split, formula, ...) { - - # Get formula variables - if(!is(formula, "formula")) - stop("missing formula") - vars = all.vars(formula) - - # Split samples according to their labels - if(split) { - levels = as.character(levels(x)) - labels = as.character(labels(x)) - names(levels) = levels - x = lapply(levels, function(l) x[labels==l] ) - } else { - levels = as.character(levels(x)[1]) - labels = rep(levels, length(x)) - names(levels) = levels - x@labels = factor(labels) - x = list(x) - names(x) = levels - } - - # Create patterns - res = lapply(x, FUN = .createPattern, from=from, to=to, freq=freq, attr=attr, formula=formula, ...) - twdtwTimeSeries(res) -}) - - -.createPattern = function(x, from, to, freq, attr, formula, ...){ - - # Pattern period - if( is.null(from) | is.null(to) ){ - from = as.Date(min(index(x[[1]]))) - to = as.Date(max(index(x[[1]]))) - } - - from = as.Date(from) - to = as.Date(to) - - # Get formula variables - vars = all.vars(formula) - - # Shift dates to match the same period - df = do.call("rbind", lapply(as.list(x), function(x){ - res = shiftDates(x, year=as.numeric(format(to, "%Y"))) - res = window(res, start = from, end = to) - res = data.frame(time=index(res), res) - names(res) = c("time", names(x)) - res - })) - names(df)[1] = vars[2] - - dates = as.Date(df[[vars[2]]]) - pred_time = seq(from, to, freq) - - fun = function(y, ...){ - df = data.frame(y, as.numeric(dates)) - names(df) = vars - fit = gam(data = df, formula = formula, ...) - time = data.frame(as.numeric(pred_time)) - names(time) = vars[2] - predict.gam(fit, newdata = time) - } - - if(is.null(attr)) attr = names(df)[-which(names(df) %in% vars[2])] - - res = sapply(as.list(df[attr]), FUN=fun, ...) - zoo(data.frame(res), as.Date(pred_time)) -} - - - - - - - - - - - diff --git a/R/create_patterns.R b/R/create_patterns.R new file mode 100644 index 0000000..24d5dca --- /dev/null +++ b/R/create_patterns.R @@ -0,0 +1,100 @@ +#' @title Create patterns +#' @author Victor Maus, \email{vwmaus1@@gmail.com} +#' +#' @description Create temporal patterns from objects of class twdtwTimeSeries. +#' +#' @param x an object of class \code{\link[dtwSat]{twdtwTimeSeries}}. +#' +#' @param from A character or \code{\link[base]{Dates}} object in the format +#' "yyyy-mm-dd". If not provided it is equal to the smallest date of the +#' first element in x. See details. +#' +#' @param to A \code{\link[base]{character}} or \code{\link[base]{Dates}} +#' object in the format "yyyy-mm-dd". If not provided it is equal to the +#' greatest date of the first element in x. See details. +#' +#' @param attr A vector character or numeric. The attributes in \code{x} to be used. +#' If not declared the function uses all attributes. +#' +#' @param freq An integer. The sampling frequency of the output patterns. +#' +#' @param split A logical. If TRUE the samples are split by label. If FALSE +#' all samples are set to the same label. +#' +#' @param formula A formula. Argument to pass to \code{\link[mgcv]{gam}}. +#' +#' @param ... other arguments to pass to the function \code{\link[mgcv]{gam}} in the +#' package \pkg{mgcv}. +#' +#' @return an object of class \code{\link[dtwSat]{twdtwTimeSeries}} +#' +#' +#' @details The hidden assumption is that the temporal pattern is a cycle the repeats itself +#' within a given time interval. Therefore, all time series samples in \code{x} are aligned +#' with each other, keeping their respective sequence of days of the year. The function fits a +#' Generalized Additive Model (GAM) to the aligned set of samples. +#' +#' @seealso +#' \code{\link[dtwSat]{twdtwMatches-class}}, +#' \code{\link[dtwSat]{twdtwTimeSeries-class}}, +#' \code{\link[dtwSat]{getTimeSeries}}, and +#' \code{\link[dtwSat]{twdtwApply}} +#' +#' @references +#' \insertRef{Maus:2019}{dtwSat} +#' +#' \insertRef{Maus:2016}{dtwSat} +#' +#' @export +create_pattern = function(x, from, to, freq, attr, formula, ...){ + + # Pattern period + if( is.null(from) | is.null(to) ){ + from = as.Date(min(index(x[[1]]))) + to = as.Date(max(index(x[[1]]))) + } + + from = as.Date(from) + to = as.Date(to) + + # Get formula variables + vars = all.vars(formula) + + # Shift dates to match the same period + df = do.call("rbind", lapply(as.list(x), function(x){ + res = shiftDates(x, year=as.numeric(format(to, "%Y"))) + res = window(res, start = from, end = to) + res = data.frame(time=index(res), res) + names(res) = c("time", names(x)) + res + })) + names(df)[1] = vars[2] + + dates = as.Date(df[[vars[2]]]) + pred_time = seq(from, to, freq) + + fun = function(y, ...){ + df = data.frame(y, as.numeric(dates)) + names(df) = vars + fit = gam(data = df, formula = formula, ...) + time = data.frame(as.numeric(pred_time)) + names(time) = vars[2] + predict.gam(fit, newdata = time) + } + + if(is.null(attr)) attr = names(df)[-which(names(df) %in% vars[2])] + + res = sapply(as.list(df[attr]), FUN=fun, ...) + zoo(data.frame(res), as.Date(pred_time)) +} + + + + + + + + + + + diff --git a/R/data.R b/R/data.R index af40ca9..629d191 100644 --- a/R/data.R +++ b/R/data.R @@ -1,22 +1,3 @@ -############################################################### -# # -# (c) Victor Maus # -# Institute for Geoinformatics (IFGI) # -# University of Muenster (WWU), Germany # -# # -# Earth System Science Center (CCST) # -# National Institute for Space Research (INPE), Brazil # -# # -# # -# R Package dtwSat - 2015-09-01 # -# # -############################################################### - - -############################################################### -#### DATASET DOCUMENTATION - - #' @title Data: patterns time series #' @author Victor Maus, \email{vwmaus1@@gmail.com} #' diff --git a/R/dtw.R b/R/dtw.R deleted file mode 100644 index 6b80399..0000000 --- a/R/dtw.R +++ /dev/null @@ -1,134 +0,0 @@ -############################################################### -# # -# (c) Victor Maus # -# Institute for Geoinformatics (IFGI) # -# University of Muenster (WWU), Germany # -# # -# Earth System Science Center (CCST) # -# National Institute for Space Research (INPE), Brazil # -# # -# # -# call Fortran DTW inplementation - 2015-10-27 # -# # -############################################################### - - -# @useDynLib dtwSat computecost -.computecost = function(cm, step.matrix){ - - cm = rbind(0, cm) - n = nrow(cm) - m = ncol(cm) - - if(is.loaded("computecost", PACKAGE = "dtwSat", type = "Fortran")){ - out = .Fortran(computecost, - CM = matrix(as.double(cm), n, m), - DM = matrix(as.integer(0), n, m), - VM = matrix(as.integer(0), n, m), - SM = matrix(as.integer(step.matrix), nrow(step.matrix), ncol(step.matrix)), - N = as.integer(n), - M = as.integer(m), - NS = as.integer(nrow(step.matrix))) - } else { - stop("Fortran computecost lib is not loaded") - } - - res = list() - res$costMatrix = out$CM[-1,] - res$directionMatrix = out$DM[-1,] - res$startingMatrix = out$VM[-1,] - res$stepPattern = step.matrix - res$N = n - 1 - res$M = m - res -} - - -# @useDynLib dtwSat tracepath -.tracepath = function(dm, step.matrix, jmin){ - - n = nrow(dm) - m = ncol(dm) - if(is.null(jmin)) - jmin = m - - if(is.loaded("tracepath", PACKAGE = "dtwSat", type = "Fortran")){ - aloc = length(jmin)*10*n - paths = .Fortran(tracepath, - DM = matrix(as.integer(dm), n, m), - SM = matrix(as.integer(step.matrix), nrow(step.matrix), ncol(step.matrix)), - JMIN = as.vector(as.integer(jmin)), - IND1 = rep(as.integer(0), aloc), - IND2 = rep(as.integer(0), aloc), - POS = as.vector(rep(as.integer(0),length(jmin)+1)), - N = as.integer(n), - M = as.integer(m), - NS = as.integer(nrow(step.matrix)), - NJ = as.integer(length(jmin)), - AL = as.integer(aloc)) - - res = lapply(seq_along(paths$POS)[-1], function(p){ - I = (paths$POS[p]:((paths$POS[p-1])+1)) - # -I[1] removes first row in the matrix which was created artificially - list(index1 = paths$IND1[I][-I[1]], index2 = paths$IND2[I][-tail(I, 1)]) - }) - }else{ - stop("Fortran tracepath lib is not loaded") - } - - res -} - -# @useDynLib dtwSat bestmatches -.bestmatches = function(x, m, n, levels, breaks, overlap, fill=9999){ - if(is.loaded("bestmatches", PACKAGE = "dtwSat", type = "Fortran")){ - if(length(x[[1]]$distance)<1){ - res = list( - XM = matrix(as.integer(c(as.numeric(x[[1]]$from), as.numeric(x[[1]]$to))), ncol = 2), - AM = matrix(as.double(fill), nrow = n, ncol = m), - DM = as.double(x[[1]]$distance), - DP = as.integer(as.numeric(breaks)), - X = as.integer(match(x[[1]]$label, levels)), - IM = matrix(as.integer(0), nrow = n, ncol = 3), - DB = as.double(x[,2]), - A = as.integer(x[[1]]$Alig.N), - K = as.integer(length(x)), - P = as.integer(length(breaks)), - L = as.integer(length(levels)), - OV = as.double(overlap)) - } else { - res = try(.Fortran(bestmatches, - XM = matrix(as.integer(c(as.numeric(x[[1]]$from), as.numeric(x[[1]]$to))), ncol = 2), - AM = matrix(as.double(fill), nrow = n, ncol = m), - DM = as.double(x[[1]]$distance), - DP = as.integer(as.numeric(breaks)), - X = as.integer(match(x[[1]]$label, levels)), - IM = matrix(as.integer(0), nrow = n, ncol = 3), - DB = as.double(rep(0, n)), - A = as.integer(x[[1]]$Alig.N), - K = as.integer(length(x[[1]]$Alig.N)), - P = as.integer(length(breaks)), - L = as.integer(length(levels)), - OV = as.double(overlap))) - } - } else { - stop("Fortran bestmatches lib is not loaded") - } - if(is(res, "try-error")){ - res = list( - XM = matrix(as.integer(c(as.numeric(x[[1]]$from), as.numeric(x[[1]]$to))), ncol = 2), - AM = array(as.double(fill), dim=c(n, m)), - DM = as.double(x[[1]]$distance), - DP = as.integer(as.numeric(breaks)), - X = as.integer(match(x[[1]]$label, levels)), - IM = matrix(as.integer(0), nrow = n, ncol = 3), - DB = as.double(x[,2]), - A = as.integer(x[[1]]$Alig.N), - K = as.integer(length(x)), - P = as.integer(length(breaks)), - L = as.integer(length(levels)), - OV = as.double(overlap) - ) - } - res -} diff --git a/R/dwtSat.R b/R/dwtSat.R deleted file mode 100644 index d352d15..0000000 --- a/R/dwtSat.R +++ /dev/null @@ -1,35 +0,0 @@ -############################################################### -# # -# (c) Victor Maus # -# Institute for Geoinformatics (IFGI) # -# University of Muenster (WWU), Germany # -# # -# Earth System Science Center (CCST) # -# National Institute for Space Research (INPE), Brazil # -# # -# # -# R Package dtwSat - 2016-07-14 # -# # -############################################################### - -#' @title Time-Weighted Dynamic Time Warping for Satellite Image Time Series -#' @name dtwSat -#' @author Victor Maus, \email{vwmaus1@@gmail.com} -#' -#' @description Provides an implementation of the Time-Weighted Dynamic Time Warping -#' (TWDTW) method for land use and land cover mapping using satellite image time series -#' \insertCite{Maus:2016,Maus:2019}{dtwSat}. -#' TWDTW is based on the Dynamic Time Warping technique and has achieved high accuracy -#' for land use and land cover classification using satellite data. The method is based -#' on comparing unclassified satellite image time series with a set of known temporal -#' patterns (e.g. phenological cycles associated with the vegetation). Using 'dtwSat' -#' the user can build temporal patterns for land cover types, apply the TWDTW analysis -#' for satellite datasets, visualize the results of the time series analysis, produce -#' land cover maps, and create temporal plots for land cover change analysis. -#' -#' @references -#' \insertAllCited{} -#' -#' @seealso \code{\link[dtwSat]{twdtwApply}} -#' -NULL \ No newline at end of file diff --git a/R/getInternals.R b/R/getInternals.R deleted file mode 100644 index bbc0740..0000000 --- a/R/getInternals.R +++ /dev/null @@ -1,84 +0,0 @@ -############################################################### -# # -# (c) Victor Maus # -# Institute for Geoinformatics (IFGI) # -# University of Muenster (WWU), Germany # -# # -# Earth System Science Center (CCST) # -# National Institute for Space Research (INPE), Brazil # -# # -# # -# R Package dtwSat - 2016-02-18 # -# # -############################################################### - -setGeneric("getInternals", function(object, timeseries.labels=NULL, patterns.labels=NULL) standardGeneric("getInternals")) -setGeneric("getAlignments", function(object, timeseries.labels=NULL, patterns.labels=NULL) standardGeneric("getAlignments")) -setGeneric("getMatches", function(object, timeseries.labels=NULL, patterns.labels=NULL) standardGeneric("getMatches")) - -#' @title Get elements from twdtwMatches objects -#' @name get -#' @author Victor Maus, \email{vwmaus1@@gmail.com} -#' -#' @description Get elements from \code{\link[dtwSat]{twdtwMatches-class}} objects. -#' -#' @inheritParams twdtwMatches-class -#' @param timeseries.labels a vector with labels of the time series. -#' @param patterns.labels a vector with labels of the patterns. -#' -#' @seealso -#' \code{\link[dtwSat]{twdtwMatches-class}}, and -#' \code{\link[dtwSat]{twdtwApply}} -#' -#' @examples -#' # Getting patterns from objects of class twdtwMatches -#' patt = twdtwTimeSeries(MOD13Q1.patterns.list) -#' ts = twdtwTimeSeries(MOD13Q1.ts.list) -#' mat = twdtwApply(x=ts, y=patt, weight.fun=logisticWeight(-0.1,100), -#' keep=TRUE, legacy = TRUE) -#' getPatterns(mat) -#' getTimeSeries(mat) -#' getAlignments(mat) -#' getMatches(mat) -#' getInternals(mat) -#' -#' @return a list with TWDTW results or an object \code{\link[dtwSat]{twdtwTimeSeries-class}}. -#' -#' @references -#' \insertRef{Maus:2019}{dtwSat} -#' -#' \insertRef{Maus:2016}{dtwSat} -#' -#' -NULL - -#' @aliases getAlignments -#' @inheritParams get -#' @rdname get -#' @export -setMethod("getAlignments", c("twdtwMatches","ANY","ANY"), - function(object, timeseries.labels, patterns.labels) - getAlignments.twdtwMatches(object, timeseries.labels, patterns.labels, attr = c("label", "from", "to", "distance", "K")) ) - -#' @aliases getInternals -#' @inheritParams get -#' @rdname get -#' @export -setMethod("getInternals", c("twdtwMatches","ANY","ANY"), - function(object, timeseries.labels, patterns.labels) - getAlignments.twdtwMatches(object, timeseries.labels, patterns.labels, attr = c("internals")) ) - -#' @aliases getMatches -#' @inheritParams get -#' @rdname get -#' @export -setMethod("getMatches", c("twdtwMatches","ANY","ANY"), - function(object, timeseries.labels, patterns.labels) - getAlignments.twdtwMatches(object, timeseries.labels, patterns.labels, attr = c("matching")) ) - -getAlignments.twdtwMatches = function(object, timeseries.labels, patterns.labels, attr){ - if(is.null(timeseries.labels)) timeseries.labels = labels(object@timeseries) - if(is.null(patterns.labels)) patterns.labels = labels(object@patterns) - res = object[timeseries.labels, patterns.labels, drop=FALSE] - lapply(res, function(x) lapply(x, function(x) x[attr]) ) -} \ No newline at end of file diff --git a/R/getMatchingDates.R b/R/getMatchingDates.R deleted file mode 100644 index a590f48..0000000 --- a/R/getMatchingDates.R +++ /dev/null @@ -1,18 +0,0 @@ -getMatchingDates <- function(x){ - - best_aligs <- x$internals$alignments[x$internals$alignments[,6]==1,,drop=FALSE] - best_aligs <- best_aligs[order(best_aligs[,1]),,drop=FALSE] - - out <- lapply(1:nrow(best_aligs), function(i){ - ts_id <- best_aligs[i,5] - idx <- as.data.frame(.tracepath(dm = x$internals$internals[[ts_id]]$DM, - step.matrix = x$internals$internals[[ts_id]]$SM, - jmin = best_aligs[i,3])) - idx$patternDates <- x$internals$internals[[ts_id]]$patternDates[idx$index1] - idx$tsDates <- x$internals$internals[[ts_id]]$tsDates[idx$index2] - return(idx) - }) - - return(out) - -} diff --git a/R/getTimeSeries.R b/R/getTimeSeries.R deleted file mode 100644 index 2bec0d6..0000000 --- a/R/getTimeSeries.R +++ /dev/null @@ -1,195 +0,0 @@ -############################################################### -# # -# (c) Victor Maus # -# Institute for Geoinformatics (IFGI) # -# University of Muenster (WWU), Germany # -# # -# Earth System Science Center (CCST) # -# National Institute for Space Research (INPE), Brazil # -# # -# # -# R Package dtwSat - 2016-02-18 # -# # -############################################################### - -setGeneric("getTimeSeries", function(object, ...) standardGeneric("getTimeSeries")) -setGeneric("getPatterns", function(object, ...) standardGeneric("getPatterns")) - -#' @title Get time series from twdtw* objects -#' @name getTimeSeries -#' @aliases getPatterns -#' @author Victor Maus, \email{vwmaus1@@gmail.com} -#' -#' @description Get time series from objects of class twdtw*. -#' -#' @param object an object of class twdtw*. -#' -#' @param y a \code{\link[base]{data.frame}} whose attributes are: longitude, -#' latitude, the start ''from'' and the end ''to'' of the time interval -#' for each sample. This can also be a \code{\link[sp]{SpatialPointsDataFrame}} -#' whose attributes are the start ''from'' and the end ''to'' of the time interval. -#' If missing ''from'' and/or ''to'', they are set to the time range of the -#' \code{object}. -#' -#' @param id.labels a numeric or character with an column name from \code{y} to -#' be used as sample labels. Optional. -#' -#' @param labels character vector with time series labels. For signature -#' \code{\link[dtwSat]{twdtwRaster}} this argument can be used to set the -#' labels for each sample in \code{y}, or it can be combined with \code{id.labels} -#' to select samples with a specific label. -#' -#' @param proj4string projection string, see \code{\link[sp]{CRS-class}}. Used -#' if \code{y} is a \code{\link[base]{data.frame}}. -#' -#' @return An object of class \code{\link[dtwSat]{twdtwTimeSeries}}. -#' -#' @seealso -#' \code{\link[dtwSat]{twdtwRaster-class}}, -#' \code{\link[dtwSat]{twdtwTimeSeries-class}}, and -#' \code{\link[dtwSat]{twdtwMatches-class}} -#' -#' @return a list with TWDTW results or an object \code{\link[dtwSat]{twdtwTimeSeries-class}}. -#' -#' @references -#' \insertRef{Maus:2019}{dtwSat} -#' -#' \insertRef{Maus:2016}{dtwSat} -#' -#' @examples -#' # Getting time series from objects of class twdtwTimeSeries -#' ts = twdtwTimeSeries(MOD13Q1.ts.list) -#' getTimeSeries(ts, 2) -#' # Getting time series from objects of class twdtwTimeSeries -#' ts = twdtwTimeSeries(MOD13Q1.ts.list) -#' patt = twdtwTimeSeries(MOD13Q1.patterns.list) -#' mat = twdtwApply(x=ts, y=patt, keep=TRUE, legacy=TRUE) -#' getTimeSeries(mat, 2) -#' -#' ## This example creates a twdtwRaster object and extract time series from it. -#' -#' # Creating objects of class twdtwRaster with evi and ndvi time series -#' evi = brick(system.file("lucc_MT/data/evi.tif", package="dtwSat")) -#' ndvi = brick(system.file("lucc_MT/data/ndvi.tif", package="dtwSat")) -#' timeline = scan(system.file("lucc_MT/data/timeline", package="dtwSat"), what="date") -#' rts = twdtwRaster(evi, ndvi, timeline=timeline) -#' -#' # Location and time range -#' ts_location = data.frame(longitude = -55.96957, latitude = -12.03864, -#' from = "2007-09-01", to = "2013-09-01") -#' prj_string = "+proj=longlat +datum=WGS84 +no_defs +ellps=WGS84 +towgs84=0,0,0" -#' -#' # Extract time series -#' ts = getTimeSeries(rts, y = ts_location, proj4string = prj_string) -#' -#' autoplot(ts[[1]], facets = NULL) + xlab("Time") + ylab("Value") -#' -NULL - - -#' @aliases getTimeSeries-twdtwTimeSeries -#' @inheritParams getTimeSeries -#' @rdname getTimeSeries -#' @export -setMethod("getTimeSeries", "twdtwTimeSeries", - function(object, labels=NULL) getTimeSeries.twdtwTimeSeries(object=object, labels=labels) ) - -#' @aliases getTimeSeries-twdtwMatches -#' @inheritParams getTimeSeries -#' @rdname getTimeSeries -#' @export -setMethod("getTimeSeries", "twdtwMatches", - function(object, labels=NULL) getTimeSeries(object=object@timeseries, labels=labels) ) - - -#' @aliases getPatterns-twdtwMatches -#' @inheritParams getTimeSeries -#' @rdname getTimeSeries -#' @export -setMethod("getPatterns", "twdtwMatches", - function(object, labels=NULL) getTimeSeries(object=object@patterns, labels=labels) ) - -# Get time series from object of class twdtwTimeSeries by labels -getTimeSeries.twdtwTimeSeries = function(object, labels){ - res = subset(object, labels) - res@timeseries -} - -#' @aliases getTimeSeries-twdtwRaster -#' @inheritParams getTimeSeries -#' @rdname getTimeSeries -#' @export -setMethod("getTimeSeries", "twdtwRaster", - function(object, y, labels=NULL, proj4string = NULL, id.labels=NULL){ - - y = .adjustLabelID(y, labels, id.labels) - - if(!"from"%in%names(y)) - y$from = as.Date(index(object)[1]) - if(!"to"%in%names(y)) - y$to = as.Date(tail(index(object),1)) - - y = .toSpatialPointsDataFrame(y, object, proj4string) - - extractTimeSeries.twdtwRaster(object, y) - }) - -extractTimeSeries.twdtwRaster = function(x, y){ - - # Reproject points to raster projection - y = spTransform(y, CRS(projection(x@timeseries[[1]]))) - # Check if the coordinates are over the raster extent - pto = .getPointsOverRaster(x, y) - if(length(pto)<1) - stop("Extents do not overlap") - if(length(pto) # -# Institute for Geoinformatics (IFGI) # -# University of Muenster (WWU), Germany # -# # -# Earth System Science Center (CCST) # -# National Institute for Space Research (INPE), Brazil # -# # -# # -# R Package dtwSat - 2016-01-19 # -# # -############################################################### - - -#' @title Linear weight function -#' @author Victor Maus, \email{vwmaus1@@gmail.com} -#' -#' @description Builds a linear time weight -#' function to compute the TWDTW local cost matrix [1]. -#' -#' @param a numeric. The slop of the line. -#' @param b numeric. The intercept of the line. -#' -#' @docType methods -#' @return A \code{\link[base]{function}} object. -#' -#' @details The linear \code{linearWeight} and \code{logisticWeight} weight functions -#' can be passed to \code{\link[dtwSat]{twdtwApply}} through the argument \code{weight.fun}. -#' This will add a time-weight to the dynamic time warping analysis. The time weight -#' creates a global constraint useful to analyse time series with phenological cycles -#' of vegetation that are usually bound to seasons. In previous studies by -#' \insertCite{Maus:2016;textual}{dtwSat} the logistic weight had better results than the -#' linear for land cover classification. See \insertCite{Maus:2016;textual}{dtwSat} and -#' \insertCite{Maus:2019;textual}{dtwSat}. -#' -#' @seealso \code{\link[dtwSat]{twdtwApply}} -#' -#' @references -#' \insertAllCited{} -#' -#' @examples -#' lin_fun = linearWeight(a=0.1) -#' lin_fun -#' -#' @export -linearWeight = function(a, b=0){ - function(phi, psi) phi + a*psi + b -} - diff --git a/R/logisticWeight.R b/R/logisticWeight.R deleted file mode 100644 index f36764e..0000000 --- a/R/logisticWeight.R +++ /dev/null @@ -1,50 +0,0 @@ -############################################################### -# # -# (c) Victor Maus # -# Institute for Geoinformatics (IFGI) # -# University of Muenster (WWU), Germany # -# # -# Earth System Science Center (CCST) # -# National Institute for Space Research (INPE), Brazil # -# # -# # -# R Package dtwSat - 2016-01-16 # -# # -############################################################### - - -#' @title Logistic weight function -#' @author Victor Maus, \email{vwmaus1@@gmail.com} -#' -#' @description Builds a logistic time weight -#' function to compute the TWDTW local cost matrix [1]. -#' -#' @param alpha numeric. The steepness of logistic weight. -#' @param beta numeric. The midpoint of logistic weight. -#' -#' @docType methods -#' @return A \code{\link[base]{function}} object. -#' -#' @details The linear \code{linearWeight} and \code{logisticWeight} weight functions -#' can be passed to \code{\link[dtwSat]{twdtwApply}} through the argument \code{weight.fun}. -#' This will add a time-weight to the dynamic time warping analysis. The time weight -#' creates a global constraint useful to analyze time series with phenological cycles -#' of vegetation that are usually bound to seasons. In previous studies by -#' \insertCite{Maus:2016;textual}{dtwSat} the logistic weight had better results than the -#' linear for land cover classification. See \insertCite{Maus:2016;textual}{dtwSat} and -#' \insertCite{Maus:2019;textual}{dtwSat}. -#' -#' @seealso \code{\link[dtwSat]{twdtwApply}} -#' -#' @references -#' \insertAllCited{} -#' -#' @examples -#' log_fun = logisticWeight(alpha=-0.1, beta=100) -#' log_fun -#' -#' @export -logisticWeight = function(alpha, beta){ - function(phi, psi) phi + 1 / (1 + exp(alpha * (psi - beta ))) -} - diff --git a/R/methods.R b/R/methods.R deleted file mode 100644 index 8ecc054..0000000 --- a/R/methods.R +++ /dev/null @@ -1,630 +0,0 @@ -############################################################### -# # -# (c) Victor Maus # -# Institute for Geoinformatics (IFGI) # -# University of Muenster (WWU), Germany # -# # -# Earth System Science Center (CCST) # -# National Institute for Space Research (INPE), Brazil # -# # -# # -# R Package dtwSat - 2016-02-22 # -# # -############################################################### - -setGeneric("layers", - function(x) standardGeneric("layers")) - -setGeneric("index", - function(x) standardGeneric("index")) - -setGeneric("coverages", - function(x) standardGeneric("coverages")) - -setGeneric("as.twdtwTimeSeries", - function(x) standardGeneric("as.twdtwTimeSeries")) - -setGeneric("bands", - function(x) standardGeneric("bands")) - -setGeneric("is.twdtwTimeSeries", - function(x) standardGeneric("is.twdtwTimeSeries")) - -setGeneric("is.twdtwMatches", - function(x) standardGeneric("is.twdtwMatches")) - -setGeneric("is.twdtwRaster", - function(x) standardGeneric("is.twdtwRaster")) - -setGeneric("projecttwdtwRaster", - function(x, ...) standardGeneric("projecttwdtwRaster")) - -as.data.frame.twdtwTimeSeries <- function(x){ - lapply(x[], function(y){ - out <- data.frame(date = index(y), y) - rownames(out) <- NULL - return(out) - }) -} - -as.list.twdtwTimeSeries = function(x) lapply(seq_along(x), function(i) - new("twdtwTimeSeries", x[[i]], labels(x)[i]) ) - -as.list.twdtwRaster = function(x) { - I = coverages(x) - names(I) = I - lapply(I, function(i) x[[i]]) -} - -as.list.twdtwMatches = function(x) lapply(seq_along(x@timeseries), function(i) - new("twdtwMatches", new("twdtwTimeSeries", x@timeseries[[i]], labels(x@timeseries)[i]), x@patterns, list(x@alignments[[i]])) ) - -dim.twdtwTimeSeries = function(x){ - res = data.frame(as.character(labels(x)), t(sapply(x@timeseries, dim))) - names(res) = c("label", "nrow", "ncol") - row.names(res) = NULL - res -} - -dim.twdtwRaster = function(x){ - res = c(nlayers(x), dim=dim(x@timeseries[[1]])) - names(res) = c("nlayers", "nrow", "ncol", "ntime") - res -} - -res.twdtwRaster = function(x){ - res(x@timeseries[[1]]) -} - -extent.twdtwRaster = function(x){ - extent(x@timeseries[[1]]) -} - -writeRaster.twdtwRaster = function(x, filepath, ...){ - lapply(names(x@timeseries), function(i) writeRaster(x@timeseries[[i]], filename = paste0(filepath, "/", i, ".grd"), ...)) -} - -ncol.twdtwRaster = function(x){ - ncol(x@timeseries[[1]]) -} - -nrow.twdtwRaster = function(x){ - nrow(x@timeseries[[1]]) -} - -nlayers.twdtwRaster = function(x){ - length(coverages(x)) -} - -levels.twdtwRaster = function(x){ - x@levels -} - -layers.twdtwRaster = function(x){ - x@layers -} - -coverages.twdtwRaster = function(x){ - x@layers -} - -bands.twdtwRaster = function(x){ - x@layers -} - -names.twdtwRaster = function(x){ - names(x@timeline) -} - -length.twdtwRaster = function(x){ - nlayers(x) -} - -index.twdtwRaster = function(x){ - x@timeline -} - -index.twdtwTimeSeries = function(x){ - lapply(x@timeseries, index) -} - -index.twdtwMatches = function(x){ - lapply(getTimeSeries(x), index) -} - -length.twdtwTimeSeries = function(x){ - length(x@timeseries) -} - -length.twdtwMatches = function(x){ - if(length(x@alignments)<1) return(x@alignments) - sum(sapply(x[], nrow)) -} - -nrow.twdtwTimeSeries = function(x){ - res = sapply(x@timeseries, nrow) - names(res) = as.character(labels(x)) - res -} - -ncol.twdtwTimeSeries = function(x){ - res = sapply(x@timeseries, ncol) - names(res) = as.character(labels(x)) - res -} - -#' @inheritParams twdtwTimeSeries-class -#' @rdname twdtwTimeSeries-class -#' @export -setMethod(f = "dim", "twdtwTimeSeries", - definition = dim.twdtwTimeSeries) - -#' @inheritParams twdtwRaster-class -#' @rdname twdtwRaster-class -#' @export -setMethod(f = "dim", "twdtwRaster", - definition = dim.twdtwRaster) - -#' @inheritParams twdtwRaster-class -#' @rdname twdtwRaster-class -#' @export -setMethod(f = "res", "twdtwRaster", - definition = res.twdtwRaster) - -#' @inheritParams twdtwRaster-class -#' @rdname twdtwRaster-class -#' @export -setMethod(f = "extent", "twdtwRaster", - definition = extent.twdtwRaster) - -#' @inheritParams twdtwRaster-class -#' @rdname twdtwRaster-class -#' @export -setMethod("writeRaster", "twdtwRaster", - definition = function(x, filepath = ".", ...) { - writeRaster.twdtwRaster(x, filepath, ...) - } -) - -#' @inheritParams twdtwRaster-class -#' @rdname twdtwRaster-class -#' @export -setMethod(f = "ncol", "twdtwRaster", - definition = ncol.twdtwRaster) - -#' @inheritParams twdtwRaster-class -#' @rdname twdtwRaster-class -#' @export -setMethod(f = "nrow", "twdtwRaster", - definition = nrow.twdtwRaster) - -#' @inheritParams twdtwRaster-class -#' @rdname twdtwRaster-class -#' @export -setMethod(f = "nlayers", "twdtwRaster", - definition = nlayers.twdtwRaster) - -#' @inheritParams twdtwRaster-class -#' @rdname twdtwRaster-class -#' @export -setMethod(f = "levels", "twdtwRaster", - definition = levels.twdtwRaster) - -#' @aliases layers -#' @inheritParams twdtwRaster-class -#' @rdname twdtwRaster-class -#' @export -setMethod(f = "layers", "twdtwRaster", - definition = layers.twdtwRaster) - -#' @aliases coverages -#' @inheritParams twdtwRaster-class -#' @rdname twdtwRaster-class -#' @export -setMethod(f = "coverages", "twdtwRaster", - definition = coverages.twdtwRaster) - -#' @aliases bands -#' @inheritParams twdtwRaster-class -#' @rdname twdtwRaster-class -#' @export -setMethod(f = "bands", "twdtwRaster", - definition = bands.twdtwRaster) - -#' @inheritParams twdtwRaster-class -#' @rdname twdtwRaster-class -#' @export -setMethod(f = "names", "twdtwRaster", - definition = names.twdtwRaster) - -#' @inheritParams twdtwRaster-class -#' @rdname twdtwRaster-class -#' @export -setMethod(f = "index", "twdtwRaster", - definition = index.twdtwRaster) - -#' @inheritParams twdtwTimeSeries-class -#' @rdname twdtwTimeSeries-class -#' @export -setMethod(f = "index", "twdtwTimeSeries", - definition = index.twdtwTimeSeries) - -#' @inheritParams twdtwMatches-class -#' @rdname twdtwMatches-class -#' @export -setMethod(f = "index", "twdtwMatches", - definition = index.twdtwMatches) - -#' @inheritParams twdtwTimeSeries-class -#' @rdname twdtwTimeSeries-class -#' @export -setMethod(f = "nrow", "twdtwTimeSeries", - definition = nrow.twdtwTimeSeries) - -#' @inheritParams twdtwTimeSeries-class -#' @rdname twdtwTimeSeries-class -#' @export -setMethod(f = "ncol", "twdtwTimeSeries", - definition = ncol.twdtwTimeSeries) - -#' @inheritParams twdtwRaster-class -#' @rdname twdtwRaster-class -#' @export -setMethod(f = "length", signature = signature("twdtwRaster"), - definition = length.twdtwRaster) - -#' @inheritParams twdtwTimeSeries-class -#' @rdname twdtwTimeSeries-class -#' @export -setMethod(f = "length", signature = signature("twdtwTimeSeries"), - definition = length.twdtwTimeSeries) - -#' @inheritParams twdtwMatches-class -#' @rdname twdtwMatches-class -#' @export -setMethod(f = "length", signature = signature("twdtwMatches"), - definition = length.twdtwMatches) - -#' @inheritParams twdtwTimeSeries-class -#' @rdname twdtwTimeSeries-class -#' @export -setMethod("as.list", "twdtwTimeSeries", as.list.twdtwTimeSeries) - -#' @inheritParams twdtwMatches-class -#' @rdname twdtwMatches-class -#' @export -setMethod("as.list", "twdtwMatches", as.list.twdtwMatches) - -#' @inheritParams twdtwMatches-class -#' @rdname twdtwMatches-class -#' @export -setMethod("as.list", "twdtwRaster", as.list.twdtwRaster) - -#' @inheritParams twdtwTimeSeries-class -#' @rdname twdtwTimeSeries-class -#' @export -setMethod("as.data.frame", "twdtwTimeSeries", as.data.frame.twdtwTimeSeries) - -#' @inheritParams twdtwTimeSeries-class -#' @param i indices of the time series. -#' @rdname twdtwTimeSeries-class -#' @export -setMethod("[", "twdtwTimeSeries", function(x, i) { - if(missing(i)) i = 1:length(x) - if(any(is.na(i))) stop("NA index not permitted") - x@timeseries[i] -}) - -#' @inheritParams twdtwTimeSeries-class -#' @rdname twdtwTimeSeries-class -#' @export -setMethod("[[", "twdtwTimeSeries", function(x, i) { - if(any(is.na(i))) stop("NA index not permitted") - x@timeseries[[i, drop=FALSE]] -}) - -#' @inheritParams twdtwRaster-class -#' @param i indices of the time series. -#' @rdname twdtwRaster-class -#' @export -setMethod("[", "twdtwRaster", function(x, i) { - if(missing(i)) i = 2:nlayers(x) - if(length(i)>1) i = i[i>1] - if(any(i > nlayers(x))) - stop("subscript out of bounds") - if(any(is.na(i))) stop("NA index not permitted") - if(any("doy"==layers(x))) - return(new("twdtwRaster", timeseries=x@timeseries[i], timeline = x@timeline, doy = x@timeseries[[1]])) - new("twdtwRaster", timeseries=x@timeseries[i], timeline = x@timeline) -}) - -#' @inheritParams twdtwRaster-class -#' @rdname twdtwRaster-class -#' @export -setMethod("[[", "twdtwRaster", function(x, i) { - if(any(is.na(i))) stop("NA index not permitted") - x@timeseries[[i]] -}) - -#' @inheritParams twdtwMatches-class -#' @param i indices of the time series. -#' @param j indices of the pattern. -#' @param drop if TRUE returns a data.frame, if FALSE returns a list. -#' Default is TRUE. -#' @rdname twdtwMatches-class -#' @export -setMethod("[", "twdtwMatches", function(x, i, j, drop=TRUE) { - if(length(x@alignments)<1) return(x@alignments) - if(missing(i)) i = 1:length(x@alignments) - # if(missing(j)) j = 2:length(x@patterns) - if(any(is.na(i))) stop("NA index not permitted") - if(is(i, "character")) i = match(i, names(x@timeseries@timeseries)) - res = x@alignments[i] - if(missing(j)) j = 1:length(res[[1]]) - if(is(j, "character")) j = match(j, names(x@patterns@timeseries)) - if(any(is.na(j))) stop("NA index not permitted") - res = lapply(res, function(x) x[j]) - res = res[sapply(res, length)>0] - if(!drop) return(res) - lapply(res, function(x){ - res = do.call("rbind", lapply(seq_along(x), function(jj){ - data.frame(Alig.N=seq_along(x[[jj]]$distance),from=x[[jj]]$from, to=x[[jj]]$to, distance=x[[jj]]$distance, label=x[[jj]]$label, row.names=NULL) - })) - res[order(res$from),] - }) -}) - -#' @inheritParams twdtwMatches-class -#' @rdname twdtwMatches-class -#' @export -setMethod("[[", c("twdtwMatches", "numeric"), function(x, i, j,drop=TRUE) { - if(any(is.na(i))) stop("NA index not permitted") - if(missing(j)) j = 1:length(x@alignments[[1]]) - x[i,j,drop=drop][[1]] -}) - -#' @inheritParams twdtwTimeSeries-class -#' @rdname twdtwTimeSeries-class -#' @export -setMethod("labels", signature = signature(object="twdtwTimeSeries"), - definition = function(object) as.character(object@labels)) - -#' @inheritParams twdtwTimeSeries-class -#' @rdname twdtwTimeSeries-class -#' @export -setMethod("levels", "twdtwTimeSeries", - definition = function(x) levels(factor(labels(x)))) - -#' @inheritParams twdtwRaster-class -#' @rdname twdtwRaster-class -#' @export -setMethod("labels", signature = signature(object="twdtwRaster"), - definition = function(object) as.character(object@labels)) - -#' @inheritParams twdtwMatches-class -#' @rdname twdtwMatches-class -#' @export -setMethod("labels", - signature = signature(object="twdtwMatches"), - definition = function(object){ - list(timeseries = labels(object@timeseries), - patterns = labels(object@patterns)) - } -) - -#' @inheritParams twdtwRaster-class -#' @rdname twdtwRaster-class -#' @param y Extent object, or any object from which an Extent object can be extracted. -#' @export -setMethod("crop", - signature = signature("twdtwRaster"), - definition = function(x, y, ...){ - x@timeseries = lapply(x@timeseries, crop, y=y, ...) - x - } -) - -#' @inheritParams twdtwRaster-class -#' @rdname twdtwRaster-class -#' @param obj object of class twdtwRaster. -#' @export -setMethod("coordinates", - signature = signature("twdtwRaster"), - definition = function(obj, ...){ - coordinates(obj@timeseries[[1]], ...) - } -) - -#' @inheritParams twdtwRaster-class -#' @rdname twdtwRaster-class -#' @export -setMethod("extent", - signature = signature("twdtwRaster"), - definition = function(x, y, ...){ - extent(x@timeseries[[1]]) - } -) - -# Show objects of class twdtwTimeSeries -show.twdtwTimeSeries = function(object){ - cat("An object of class \"twdtwTimeSeries\"\n") - cat("Slot \"timeseries\" length:",length(object),"\n") - cat("Slot \"labels\": ") - I = match(1:3, seq_along(labels(object))) - print(labels(object)[na.omit(I)]) - invisible(NULL) -} - -# Show objects of class twdtwMatches -show.twdtwMatches = function(object){ - cat("An object of class \"twdtwMatches\"\n") - cat("Number of time series:",length(object@timeseries),"\n") - cat("Number of alignments:",length(object),"\n") - cat("Patterns labels:",as.character(labels(object@patterns)),"\n") - invisible(NULL) -} - -# Show objects of class twdtwRaster -show.twdtwRaster = function(object){ - cat("An object of class \"twdtwRaster\"\n") - cat("Time series layers:",coverages(object),"\n") - cat("Time range:",paste(min(object@timeline)),"...",paste(max(object@timeline)),"\n") - cat("Dimensions:",dim(object),"(nlayers, nrow, ncol, length)\n") - cat("Resolution:",res(object)," (x, y)\n") - cat("Extent :",as.vector(extent(object)), "(xmin, xmax, ymin, ymax)\n") - cat("Coord.ref.:",projection(object@timeseries[[1]]),"\n") - invisible(NULL) -} - -# Show objects of class twdtwAssessment -show.twdtwAssessment = function(object){ - cat("An object of class \"twdtwAssessment\"\n") - cat("Number of classification intervals:",length(object@accuracyByPeriod),"\n") - cat("Accuracy metrics summary\n") - cat("\nOverall\n") - aux = object@accuracySummary$OverallAccuracy - names(aux) = gsub("ci", "ci*", names(aux)) - print(aux, digits=2) - cat("\nUser's\n") - aux = object@accuracySummary$UsersAccuracy - colnames(aux) = gsub("ci", "ci*", colnames(aux)) - print(aux, digits=2) - cat("\nProducer's\n") - aux = object@accuracySummary$ProducersAccuracy - colnames(aux) = gsub("ci", "ci*", colnames(aux)) - print(aux, digits=2) - cat("\nArea and uncertainty\n") - aux = object@accuracySummary$AreaUncertainty - colnames(aux) = gsub("ci", "ci*", colnames(aux)) - print(aux, digits=2) - cat("\n*",100*object@accuracySummary$conf.int,"% confidence interval\n") - invisible(NULL) -} - -# Show objects of class twdtwCrossValidation -show.twdtwCrossValidation = function(object){ - res = summary(object, conf.int=.95) - cat("An object of class \"twdtwCrossValidation\"\n") - cat("Number of data partitions:",length(object@partitions),"\n") - cat("Accuracy metrics using bootstrap simulation (CI .95)\n") - cat("\nOverall\n") - print(res$Overall, digits=2) - cat("\nUser's\n") - print(res$Users, digits=2) - cat("\nProducer's\n") - print(res$Producers, digits=2) - invisible(NULL) -} - -# Project raster which belongs to a twdtwRaster object -projecttwdtwRaster.twdtwRaster = function(x, to, ...){ - x@timeseries = lapply(x@timeseries, projectRaster, to, ...) - x -} - -summary.twdtwCrossValidation = function(object, conf.int=.95, ...){ - - ov = do.call("rbind", lapply(object@accuracy, function(x){ - data.frame(OV=x$OverallAccuracy, row.names = NULL) - })) - - uapa = do.call("rbind", lapply(object@accuracy, function(x){ - data.frame(label=names(x$UsersAccuracy), UA=x$UsersAccuracy, PA=x$ProducersAccuracy, row.names = NULL) - })) - - sd_ov = sd(ov[, c("OV")]) - sd_uapa = aggregate(uapa[, c("UA","PA")], list(uapa$label), sd) - l_names = unique(uapa$label) - names(l_names) = l_names - ic_ov = mean_cl_boot(x = ov[, c("OV")], conf.int = conf.int, ...) - names(ic_ov) = NULL - assess_ov = unlist(c(Accuracy=ic_ov[1], sd=sd_ov, CImin=ic_ov[2], CImax=ic_ov[3])) - ic_ua = t(sapply(l_names, function(i) mean_cl_boot(x = uapa$UA[uapa$label==i], conf.int = conf.int, ...))) - names(ic_ua) = NULL - assess_ua = data.frame(Accuracy=unlist(ic_ua[,1]), sd=sd_uapa[,"UA"], CImin=unlist(ic_ua[,2]), CImax=unlist(ic_ua[,3])) - ic_pa = t(sapply(l_names, function(i) mean_cl_boot(x = uapa$PA[uapa$label==i], conf.int = conf.int, ...))) - names(ic_pa) = NULL - assess_pa = data.frame(Accuracy=unlist(ic_pa[,1]), sd=sd_uapa[,"PA"], CImin=unlist(ic_pa[,2]), CImax=unlist(ic_pa[,3])) - list(Overall=assess_ov, Users=assess_ua, Producers=assess_pa) -} - -#' @inheritParams twdtwCrossValidation-class -#' @rdname twdtwCrossValidation-class -#' @export -setMethod(f = "show", "twdtwCrossValidation", - definition = show.twdtwCrossValidation) - -#' @inheritParams twdtwAssessment-class -#' @rdname twdtwAssessment-class -#' @export -setMethod(f = "show", "twdtwAssessment", - definition = show.twdtwAssessment) - -#' @inheritParams twdtwCrossValidation-class -#' @rdname twdtwCrossValidation-class -#' @export -setMethod(f = "summary", "twdtwCrossValidation", - definition = summary.twdtwCrossValidation) - -#' @inheritParams twdtwTimeSeries-class -#' @rdname twdtwTimeSeries-class -#' @export -setMethod(f = "show", "twdtwTimeSeries", - definition = show.twdtwTimeSeries) - -#' @inheritParams twdtwMatches-class -#' @rdname twdtwMatches-class -#' @export -setMethod(f = "show", "twdtwMatches", - definition = show.twdtwMatches) - -#' @inheritParams twdtwRaster-class -#' @rdname twdtwRaster-class -#' @export -setMethod(f = "show", "twdtwRaster", - definition = show.twdtwRaster) - -#' @aliases as.twdtwTimeSeries -#' @inheritParams twdtwTimeSeries-class -#' @describeIn twdtwTimeSeries convert list of data.frame to class twdtwTimeSeries. -#' @export -setMethod("as.twdtwTimeSeries", "ANY", - function(x) twdtwTimeSeries(lapply(x[], function(y) zoo(y[, names(y)!="date"], order.by = y$date)))) - -#' @aliases is.twdtwTimeSeries -#' @inheritParams twdtwTimeSeries-class -#' @describeIn twdtwTimeSeries Check if the object belongs to the class twdtwTimeSeries. -#' @export -setMethod("is.twdtwTimeSeries", "ANY", - function(x) is(x, "twdtwTimeSeries")) - -#' @aliases is.twdtwMatches -#' @inheritParams twdtwMatches-class -#' @describeIn twdtwMatches Check if the object belongs to the class twdtwMatches. -#' @export -setMethod("is.twdtwMatches", "ANY", - function(x) is(x, "twdtwMatches")) - -#' @aliases is.twdtwRaster -#' @inheritParams twdtwRaster-class -#' @describeIn twdtwRaster Check if the object belongs to the class twdtwRaster. -#' @export -setMethod("is.twdtwRaster", "ANY", - function(x) is(x, "twdtwRaster")) - -#' @aliases projecttwdtwRaster -#' @inheritParams twdtwRaster-class -#' @describeIn twdtwRaster project twdtwRaster object. -#' @param crs character or object of class 'CRS'. PROJ.4 description of -#' the coordinate reference system. For other arguments and more details see -#' \code{\link[raster]{projectRaster}}. -#' -#' @export -setMethod("projecttwdtwRaster", "twdtwRaster", - function(x, crs, ...) projecttwdtwRaster.twdtwRaster(x, crs, ...)) - - - - - - diff --git a/R/miscellaneous.R b/R/miscellaneous.R index ab90d65..eaa21f9 100644 --- a/R/miscellaneous.R +++ b/R/miscellaneous.R @@ -1,4 +1,3 @@ - #' @title Get dates from year and day of the year #' @author Victor Maus, \email{vwmaus1@@gmail.com} #' @@ -20,14 +19,8 @@ #' #' \insertRef{Maus:2016}{dtwSat} #' -#' @examples -#' year = c(2000, 2001) -#' doy = c(366, 365) -#' dates = getDatesFromDOY(year, doy) -#' dates -#' #' @export -getDatesFromDOY = function(year, doy){ +get_dates_from_doy = function(year, doy){ res = as.Date(paste(as.numeric(year), as.numeric(doy)), format="%Y %j", origin="1970-01-01") I = which(diff(res)<0)+1 res[I] = as.Date(paste0(as.numeric(format(res[I],"%Y"))+1, format(res[I], "-%m-%d"))) @@ -37,7 +30,6 @@ getDatesFromDOY = function(year, doy){ #' @title Shift dates -#' @name shiftDates #' @author Victor Maus, \email{vwmaus1@@gmail.com} #' #' @description This function shifts the dates of the time series to a @@ -48,9 +40,6 @@ getDatesFromDOY = function(year, doy){ #' #' @param year the base year to shift the time series to. #' -#' @seealso -#' \code{\link[dtwSat]{twdtwTimeSeries-class}} -#' #' @return An object of the same class as the input \code{object}. #' #' @references @@ -59,44 +48,7 @@ getDatesFromDOY = function(year, doy){ #' \insertRef{Maus:2016}{dtwSat} #' #' @export -setGeneric("shiftDates", function(object, year=NULL) standardGeneric("shiftDates")) - -#' @rdname shiftDates -#' @aliases shiftDates-twdtwTimeSeries -#' -#' @references -#' \insertRef{Maus:2019}{dtwSat} -#' -#' \insertRef{Maus:2016}{dtwSat} -#' -#' @examples -#' patt = twdtwTimeSeries(MOD13Q1.patterns.list) -#' npatt = shiftDates(patt, year=2005) -#' index(patt) -#' index(npatt) -#' -#' @export -setMethod("shiftDates", "twdtwTimeSeries", - function(object, year) - do.call("twdtwTimeSeries", lapply(as.list(object), FUN=shiftDates.twdtwTimeSeries, year=year))) - -#' @rdname shiftDates -#' @aliases shiftDates-list -#' @export -setMethod("shiftDates", "list", - function(object, year) - shiftDates(twdtwTimeSeries(object), year=year)[]) - -setOldClass("zoo") -#' @rdname shiftDates -#' @aliases shiftDates-zoo -#' @export -setMethod("shiftDates", "zoo", - function(object, year) - shiftDates(twdtwTimeSeries(object), year=year)[[1]]) - - -shiftDates.twdtwTimeSeries = function(x, year){ +shift_dates = function(x, year){ labels = as.character(labels(x)) x = x[[1]] dates = index(x) @@ -105,95 +57,3 @@ shiftDates.twdtwTimeSeries = function(x, year){ d = as.numeric(dates) - shift_days new("twdtwTimeSeries", timeseries=zoo(data.frame(x), as.Date(d)), labels=labels) } - - -.adjustFactores = function(ref, pred, levels=NULL, labels=NULL){ - ref = as.character(ref) - pred = as.character(pred) - if(is.null(levels)) - levels = sort(unique(ref)) - if(is.null(labels)) - labels = levels - ref = factor(ref, levels, labels) - pred = factor(pred, levels, labels) - data = data.frame(Predicted=pred, Reference=ref) -} - -.adjustLabelID = function(y, labels, id.labels){ - if(!"label"%in%names(y)) y$label = paste0("ts",row.names(y)) - if(!is.null(id.labels)) y$label = as.character(y[[id.labels]]) - if(!is.null(id.labels) & !is.null(labels)){ - I = which(!is.na(match(as.character(y$label), as.character(labels)))) - if(length(I)<1) - stop("There are no matches between id.labels and labels") - } else if(!is.null(labels)) { - y$label = as.character(labels) - } - y -} - -.toSpatialPointsDataFrame = function(y, object, proj4string){ - if(is(y, "data.frame")){ - if(is.null(proj4string)){ - warning("Missing projection. Setting the same projection as the raster time series.", call. = FALSE) - proj4string = CRS(projection(object@timeseries[[1]])) - } - if(!is(proj4string, "CRS")) proj4string = try(CRS(proj4string)) - y = SpatialPointsDataFrame(y[,c("longitude","latitude")], y, proj4string = proj4string) - } - if(!(is(y, "SpatialPoints") | is(y, "SpatialPointsDataFrame"))) - stop("y is not SpatialPoints or SpatialPointsDataFrame") - row.names(y) = 1:nrow(y) - y -} - - -.getPredRefClasses = function(i, r_intervals, pred_classes, pred_distance, y, rlevels, rnames){ - i_leng = as.numeric(r_intervals$to[i] - r_intervals$from[i]) - from = as.Date(y$from) - to = as.Date(y$to) - # Select overlapping alignments - J = which(from <= r_intervals$to[i] & to >= r_intervals$from[i]) - # Adjust overlapping - from = sapply(from[J], function(x) ifelse(x < r_intervals$from[i], r_intervals$from[i], x)) - to = sapply(to[J], function(x) ifelse(x > r_intervals$to[i], r_intervals$to[i], x)) - # Compute overlapping proportion - if(length(to)<1) - return(NULL) - i_over = to - from - # print(i_leng) - # print(i_over) - prop_over = abs(i_over / i_leng) - # Select alignments - I = which(prop_over > .5) - # I = which((r_intervals$to[i] - as.Date(y$from) > 30) & (as.Date(y$to) - r_intervals$from[i] > 30) ) - if(length(J[I])<1) - return(NULL) - K = match(pred_classes[J[I],i], rlevels) - Predicted = factor(as.character(rnames[K]), levels = rnames, labels = rnames) - Reference = factor(as.character(y$label[J[I]]), levels = rnames, labels = rnames) - Distance = pred_distance[J[I],i] - data.frame(Sample.id = row.names(y)[J[I]], coordinates(y[J[I],]), Period=i, from=r_intervals$from[i], to=r_intervals$to[i], Predicted, Reference, Distance) -} - -.getAreaByClass = function(l, r, rlevels, rnames){ - r = raster(r, layer = l) - if(isLonLat(r)){ - warning("Computing the approximate surface area in km2 of cells in an unprojected (longitude/latitude) Raster object. See ?raster::area", call. = TRUE) - # r = projectRaster(from = r, crs = proj_str, method = 'ngb') - ra = area(r) - I = lapply(rlevels, function(i) r[]==i ) - out = sapply(I, function(i) sum(ra[i], na.rm = TRUE) ) - names(out) = rnames - } else { - npx = zonal(r, r, 'count') - I = match(npx[,'zone'], rlevels) - out = rep(0, length(rnames)) - names(out) = rnames - out[I] = npx[,'count'] * prod(res(r)) - names(out) = rnames - } - out -} - - diff --git a/R/plot.R b/R/plot.R deleted file mode 100644 index abf961b..0000000 --- a/R/plot.R +++ /dev/null @@ -1,231 +0,0 @@ -############################################################### -# # -# (c) Victor Maus # -# Institute for Geoinformatics (IFGI) # -# University of Muenster (WWU), Germany # -# # -# Earth System Science Center (CCST) # -# National Institute for Space Research (INPE), Brazil # -# # -# # -# R Package dtwSat - 2016-01-16 # -# # -############################################################### - - -#' @title Plotting twdtw* objects -#' @name plot -#' @author Victor Maus, \email{vwmaus1@@gmail.com} -#' -#' @description Methods for plotting objects of class twdtw*. -#' -#' @param x An object of class twdtw*. -#' @param type A character for the plot type: ''paths'', ''matches'', -#' ''alignments'', ''classification'', ''cost'', ''patterns'', ''timeseries'', -#' ''maps'', ''area'', ''changes'', and ''distance''. -#' -#' @param ... additional arguments to pass to plotting functions. -#' \code{\link[dtwSat]{plotPaths}}, -#' \code{\link[dtwSat]{plotCostMatrix}}, -#' \code{\link[dtwSat]{plotAlignments}}, -#' \code{\link[dtwSat]{plotMatches}}, -#' \code{\link[dtwSat]{plotClassification}}, -#' \code{\link[dtwSat]{plotPatterns}}, -#' \code{\link[dtwSat]{plotTimeSeries}}, -#' \code{\link[dtwSat]{plotMaps}}, -#' \code{\link[dtwSat]{plotArea}}, or -#' \code{\link[dtwSat]{plotChanges}}. -#' -#' @return A \link[ggplot2]{ggplot} object. -#' -#' @details -#' \describe{ -#' \item{Plot types}{: -#' \cr\code{paths}: Method for plotting the minimum paths in the cost matrix of TWDTW. -#' \cr\code{matches}: Method for plotting the matching points from TWDTW analysis. -#' \cr\code{alignments}: Method for plotting the alignments and respective TWDTW dissimilarity measures. -#' \cr\code{classification}: Method for plotting the classification of each subinterval of the time series based on TWDTW analysis. -#' \cr\code{cost}: Method for plotting the internal matrices used during the TWDTW computation. -#' \cr\code{patterns}: Method for plotting the temporal patterns. -#' \cr\code{timeseries}: Method for plotting the temporal patterns. -#' } -#' } -#' -#' @export -NULL - -#' @aliases plot-twdtwAssessment -#' @inheritParams plot -#' @rdname plot -#' @export -setMethod("plot", - signature(x = "twdtwAssessment"), - function(x, type="area", ...){ - pt = pmatch(type, c("area","accuracy","map")) - switch(pt, - plotAdjustedArea(x, ...), - plotAccuracy(x, ...), - plotMapSamples(x, ...) - ) - } -) - -#' @aliases plot-twdtwTimeSeries -#' @inheritParams plot -#' @rdname plot -#' @export -setMethod("plot", - signature(x = "twdtwCrossValidation"), - function(x, type="crossvalidation", ...){ - pt = pmatch(type, c("crossvalidation")) - switch(pt, - plotAccuracy(x, ...) - ) - } -) - -#' @aliases plot-twdtwTimeSeries -#' @inheritParams plot -#' @rdname plot -#' @export -setMethod("plot", - signature(x = "twdtwTimeSeries"), - function(x, type="timeseries", ...){ - pt = pmatch(type,c("patterns","timeseries")) - switch(pt, - plotPatterns(x, ...), - plotTimeSeries(x, ...) - ) - } -) - - -#' @aliases plot-twdtwMatches -#' @inheritParams plot -#' @rdname plot -#' @export -setMethod("plot", - signature(x = "twdtwMatches"), - function(x, type="alignments", ...){ - pt = pmatch(type,c("paths","matches","alignments","classification","cost")) - switch(pt, - plotPaths(x, ...), - plotMatches(x, ...), - plotAlignments(x, ...), - plotClassification(x, ...), - plotCostMatrix(x, ...) - ) - } -) - - - -#' @aliases plot-twdtwRaster -#' @inheritParams plot -#' @rdname plot -#' @export -setMethod("plot", signature(x = "twdtwRaster"), function(x, type="maps", ...) .PlotRaster(x, type=type, ...)) - -.PlotRaster = function(x, type, time.levels=NULL, time.labels=NULL, class.levels=NULL, class.labels=NULL, class.colors=NULL, layers=NULL, perc=TRUE, ...){ - - if(type=="distance") { - - if( is.null(time.levels)) - time.levels = names(x) - - if(is(time.levels, "numeric")) - time.levels = names(x)[time.levels] - - if( is.null(time.labels)) - time.labels = format(as.Date(time.levels, "date.%Y.%m.%d"), "%Y") - - if(length(time.levels)!=length(time.labels)) - stop("time.levels and time.labels have different lengths") - - if(is.null(layers)) { - if(any(coverages(x)=="Distance")){ - layers = "Distance" - time.levels = time.levels - labels = time.labels - time.labels=NULL - } - else { - layers = coverages(x) - layers = layers[!layers%in%"doy"] - time.levels = time.levels[1] - time.labels = time.labels[1] - labels = layers - } - } else { - if(is(layers, "numeric")) layers = coverages(x)[layers] - time.levels = time.levels[1] - time.labels = time.labels[1] - labels = layers - } - - x = lapply(as.list(x)[layers], FUN=subset, subset=time.levels) - gp = .plotDistance(brick(x), layers, labels, time.labels) - - } else { - - if( is.null(time.levels)) - time.levels = seq_along(index(x)) - - if(is.null(time.labels)) - time.labels = format(index(x), "%Y") - - if(is(time.levels, "numeric")){ - time.levels = names(x)[time.levels] - time.labels = time.labels[time.levels] - } - - - if(length(time.levels)!=length(time.labels)) - stop("time.levels and time.labels have different lengths") - - # if(length(time.levels)>16){ - # time.levels = time.levels[1:16] - # time.labels = time.labels[1:16] - # } - - if( is.null(class.levels)) - class.levels = levels(x) - - if(length(class.levels)<1) - class.levels = sort(unique(as.numeric(x[["Class"]][]))) - - if( is.null(class.labels)) - class.labels = labels(x) - - if(length(class.labels)<1) - class.labels = as.character(class.levels) - - if( is.null(class.colors) ) - class.colors = brewer.pal(length(class.levels), "Set3") - - if( length(class.colors) # -# Institute for Geoinformatics (IFGI) # -# University of Muenster (WWU), Germany # -# # -# Earth System Science Center (CCST) # -# National Institute for Space Research (INPE), Brazil # -# # -# # -# R Package dtwSat - 2016-01-16 # -# # -############################################################### - - -#' @title Plotting alignments -#' @author Victor Maus, \email{vwmaus1@@gmail.com} -#' -#' @description Method for plotting the alignments and TWDTW -#' dissimilarity measures. -#' -#' -#' @param x An object of class \code{\link[dtwSat]{twdtwMatches}}. -#' @param timeseries.labels the label or index of the time series. -#' Default is 1. -#' @param patterns.labels a vector with labels of the patterns. If not -#' declared the function will plot the alignments for all patterns in \code{x}. -#' @param attr An \link[base]{integer} or \link[base]{character} vector -#' indicating the attribute for plotting. Default is 1. -#' @param threshold A number. The TWDTW dissimilarity threshold, \emph{i.e.} the -#' maximum TWDTW cost for consideration. Default is \code{Inf}. -#' -#' @return A \link[ggplot2]{ggplot} object. -#' -#' @seealso -#' \code{\link[dtwSat]{twdtwMatches-class}}, -#' \code{\link[dtwSat]{twdtwApply}}, -#' \code{\link[dtwSat]{plotPaths}}, -#' \code{\link[dtwSat]{plotCostMatrix}}, -#' \code{\link[dtwSat]{plotMatches}}, and -#' \code{\link[dtwSat]{plotClassification}}. -#' -#' @references -#' \insertRef{Maus:2019}{dtwSat} -#' -#' \insertRef{Maus:2016}{dtwSat} -#' -#' @examples -#' log_fun = logisticWeight(-0.1, 100) -#' ts = twdtwTimeSeries(MOD13Q1.ts.list) -#' patt = twdtwTimeSeries(MOD13Q1.patterns.list) -#' mat1 = twdtwApply(x=ts, y=patt, weight.fun=log_fun, keep=TRUE, legacy=TRUE) -#' -#' plotAlignments(mat1) -#' -#' plotAlignments(mat1, attr=c("evi","ndvi")) -#' -#' @export -plotAlignments = function(x, timeseries.labels=NULL, patterns.labels=NULL, attr=1, threshold=Inf){ - - x = subset(x, timeseries.labels[1], patterns.labels) - - ## Get data - ts = getTimeSeries(x)[[1]] - alignments = x[[1]] - - # Get time series - df.x = data.frame(ts[,attr,drop=FALSE]) - df.x$Time = as.Date(rownames(df.x)) - df.alignments = melt(df.x, id="Time") - df.alignments$distance = NA - df.alignments$variable = as.character(df.alignments$variable) - df.alignments$Variable = df.alignments$variable - df.alignments$Pattern = NA - df.alignments$group = df.alignments$variable - df.alignments$facets = 1 - df.alignments$facets = factor(df.alignments$facets, levels = c(1,2), labels = c("Time series","TWDTW dissimilarity measure")) - - # Get matching points - df.matches = list() - df.matches$Time = c(alignments$from, alignments$to) - df.matches$variable = rep(alignments$label, 2) - df.matches$value = rep(alignments$distance, 2) - df.matches$distance = df.matches$value - df.matches$Variable = NA - df.matches$Pattern = df.matches$variable - df.matches$group = as.character(rep(1:length(alignments$label), 2)) - df.matches$facets = 2 - df.matches = data.frame(df.matches, stringsAsFactors = FALSE) - df.matches$facets = factor(df.matches$facets, levels = c(1,2), labels = c("Time series","TWDTW dissimilarity measure")) - - I = which(df.matches$value>threshold) - if(length(I)>0) - df.matches = df.matches[-I,] - - df.all = rbind(df.alignments, df.matches) - - gp = ggplot(data=df.all) + - geom_line(data=df.alignments, aes_string(x='Time', y='value', group='group', linetype='Variable')) + - guides(linetype = guide_legend(title = "Bands")) + - facet_wrap(~facets, ncol = 1, scales = "free_y") + - geom_path(data=df.matches, aes_string(x='Time', y='distance', group='group', colour='Pattern')) + - geom_point(data=df.matches, aes_string(x='Time', y='distance', group='group', colour='Pattern')) + - ylab("Value") - gp -} - diff --git a/R/plotArea.R b/R/plotArea.R deleted file mode 100644 index 9b904ff..0000000 --- a/R/plotArea.R +++ /dev/null @@ -1,134 +0,0 @@ -############################################################### -# # -# (c) Victor Maus # -# Institute for Geoinformatics (IFGI) # -# University of Muenster (WWU), Germany # -# # -# Earth System Science Center (CCST) # -# National Institute for Space Research (INPE), Brazil # -# # -# # -# R Package dtwSat - 2016-01-16 # -# # -############################################################### - - -#' @title Plotting accumulated area -#' @author Victor Maus, \email{vwmaus1@@gmail.com} -#' -#' @description Method for plotting time series of accumulated area. -#' -#' @param x An object of class \code{\link[dtwSat]{twdtwRaster}}. -#' @param time.levels A \link[base]{character} or \link[base]{numeric} -#' vector with the layers to plot. For plot type ''change'' the minimum length -#' is two. -#' @param time.labels A \link[base]{character} or \link[base]{numeric} -#' vector with the labels of the layers. It must have the same -#' length as time.levels. Default is NULL. -#' @param class.levels A \link[base]{character} or \link[base]{numeric} -#' vector with the levels of the raster values. Default is NULL. -#' @param class.labels A \link[base]{character} or \link[base]{numeric} -#' vector with the labels of the raster values. It must have the same -#' length as class.levels. Default is NULL. -#' @param class.colors a set of aesthetic values. It must have the same -#' length as class.levels. Default is NULL. See -#' \link[ggplot2]{scale_fill_manual} for details. -#' @param perc if TRUE shows the results in percent of area. Otherwise shows the -#' area in the map units or km2 for no project raster. Default is TRUE. -#' -#' @return A \link[ggplot2]{ggplot} object. -#' -#' @seealso -#' \code{\link[dtwSat]{twdtwRaster-class}}, -#' \code{\link[dtwSat]{twdtwApply}}, -#' \code{\link[dtwSat]{plotMaps}}, -#' \code{\link[dtwSat]{plotChanges}}, and -#' \code{\link[dtwSat]{plotDistance}}. -#' -#' @references -#' \insertRef{Maus:2019}{dtwSat} -#' -#' \insertRef{Maus:2016}{dtwSat} -#' -#' @examples -#' \dontrun{ -#' -#' # Create raster time series -#' evi = brick(system.file("lucc_MT/data/evi.tif", package="dtwSat")) -#' ndvi = brick(system.file("lucc_MT/data/ndvi.tif", package="dtwSat")) -#' red = brick(system.file("lucc_MT/data/red.tif", package="dtwSat")) -#' blue = brick(system.file("lucc_MT/data/blue.tif", package="dtwSat")) -#' nir = brick(system.file("lucc_MT/data/nir.tif", package="dtwSat")) -#' mir = brick(system.file("lucc_MT/data/mir.tif", package="dtwSat")) -#' doy = brick(system.file("lucc_MT/data/doy.tif", package="dtwSat")) -#' timeline = scan(system.file("lucc_MT/data/timeline", package="dtwSat"), what="date") -#' rts = twdtwRaster(evi, ndvi, red, blue, nir, mir, timeline = timeline, doy = doy) -#' -#' # Read field samples -#' field_samples = read.csv(system.file("lucc_MT/data/samples.csv", package="dtwSat")) -#' proj_str = scan(system.file("lucc_MT/data/samples_projection", -#' package="dtwSat"), what = "character") -#' -#' # Split samples for training (10%) and validation (90%) using stratified sampling -#' library(caret) -#' set.seed(1) -#' I = unlist(createDataPartition(field_samples$label, p = 0.1)) -#' training_samples = field_samples[I,] -#' validation_samples = field_samples[-I,] -#' -#' # Create temporal patterns -#' training_ts = getTimeSeries(rts, y = training_samples, proj4string = proj_str) -#' temporal_patterns = createPatterns(training_ts, freq = 8, formula = y ~ s(x)) -#' -#' # Run TWDTW analysis for raster time series -#' log_fun = weight.fun=logisticWeight(-0.1,50) -#' r_twdtw = twdtwApply(x=rts, y=temporal_patterns, weight.fun=log_fun, format="GTiff", -#' overwrite=TRUE) -#' -#' # Classify raster based on the TWDTW analysis -#' r_lucc = twdtwClassify(r_twdtw, format="GTiff", overwrite=TRUE) -#' -#' plotArea(r_lucc) -#' -#' plotArea(r_lucc, perc=FALSE) -#' -#' } -#' @export -plotArea = function(x, time.levels=NULL, time.labels=NULL, class.levels=NULL, class.labels=NULL, class.colors=NULL, perc=TRUE){ - plot(x, type="area", time.levels=time.levels, time.labels=time.labels, class.levels=class.levels, class.labels=class.labels, class.colors=class.colors, perc=perc) -} - -.plotArea = function(x, time.levels, time.labels, class.levels, class.labels, class.colors, perc){ - - df.area = do.call("rbind", lapply(time.levels, .getAreaByClass, x, class.levels, class.labels)) - df.area = data.frame(variable = as.numeric(time.labels), df.area, stringsAsFactors = FALSE) - names(class.colors) = names(df.area)[-1] - df.area = melt(df.area, "variable", value.name = "Freq", variable.name = "value") - df.area$Time = as.numeric(df.area$variable) - df.area$variable = factor(df.area$variable) - - if(perc) - df.area$Freq = df.area$Freq / (sum(df.area$Freq) / length(time.levels)) - - x.breaks = pretty_breaks()(range(df.area$Time)) - - gp = ggplot(data=df.area, aes_string(x="Time", y="Freq", fill="value")) + - geom_area(position = 'stack') + - scale_fill_manual(name="Legend", values = class.colors) + - scale_x_continuous(expand = c(0.01, 0), breaks = x.breaks) + - theme(legend.position = "bottom", - panel.background = element_blank()) + - ylab("Area") - - if(perc){ - gp = gp + scale_y_continuous(expand = c(0, 0), labels = percent) - } else { - gp = gp + scale_y_continuous(expand = c(0, 0)) - } - - gp - -} - - - diff --git a/R/plotChanges.R b/R/plotChanges.R deleted file mode 100644 index eb21d4f..0000000 --- a/R/plotChanges.R +++ /dev/null @@ -1,121 +0,0 @@ -############################################################### -# # -# (c) Victor Maus # -# Institute for Geoinformatics (IFGI) # -# University of Muenster (WWU), Germany # -# # -# Earth System Science Center (CCST) # -# National Institute for Space Research (INPE), Brazil # -# # -# # -# R Package dtwSat - 2016-01-16 # -# # -############################################################### - - -#' @title Plotting changes -#' @author Victor Maus, \email{vwmaus1@@gmail.com} -#' -#' @description Method for plotting changes over time. -#' -#' @param x An object of class \code{\link[dtwSat]{twdtwRaster}}. -#' @param time.levels A \link[base]{character} or \link[base]{numeric} -#' vector with the layers to plot. For plot type ''change'' the minimum length -#' is two. -#' @param time.labels A \link[base]{character} or \link[base]{numeric} -#' vector with the labels of the layers. It must have the same -#' length as time.levels. Default is NULL. -#' @param class.levels A \link[base]{character} or \link[base]{numeric} -#' vector with the levels of the raster values. Default is NULL. -#' @param class.labels A \link[base]{character} or \link[base]{numeric} -#' vector with the labels of the raster values. It must have the same -#' length as class.levels. Default is NULL. -#' @param class.colors A set of aesthetic values. It must have the same -#' length as class.levels. Default is NULL. See -#' \link[ggplot2]{scale_fill_manual} for details. -#' -#' @return A \link[ggplot2]{ggplot} object. -#' -#' @seealso -#' \code{\link[dtwSat]{twdtwRaster-class}}, -#' \code{\link[dtwSat]{twdtwApply}}, -#' \code{\link[dtwSat]{plotArea}}, -#' \code{\link[dtwSat]{plotMaps}}, and -#' \code{\link[dtwSat]{plotDistance}}. -#' -#' @references -#' \insertRef{Maus:2019}{dtwSat} -#' -#' \insertRef{Maus:2016}{dtwSat} -#' -#' @examples -#' \dontrun{ -#' # Run TWDTW analysis for raster time series -#' patt = MOD13Q1.MT.yearly.patterns -#' evi = brick(system.file("lucc_MT/data/evi.tif", package="dtwSat")) -#' ndvi = brick(system.file("lucc_MT/data/ndvi.tif", package="dtwSat")) -#' red = brick(system.file("lucc_MT/data/red.tif", package="dtwSat")) -#' blue = brick(system.file("lucc_MT/data/blue.tif", package="dtwSat")) -#' nir = brick(system.file("lucc_MT/data/nir.tif", package="dtwSat")) -#' mir = brick(system.file("lucc_MT/data/mir.tif", package="dtwSat")) -#' doy = brick(system.file("lucc_MT/data/doy.tif", package="dtwSat")) -#' timeline = scan(system.file("lucc_MT/data/timeline", package="dtwSat"), what="date") -#' rts = twdtwRaster(evi, ndvi, red, blue, nir, mir, timeline = timeline, doy = doy) -#' -#' time_interval = seq(from=as.Date("2007-09-01"), to=as.Date("2013-09-01"), -#' by="12 month") -#' log_fun = weight.fun=logisticWeight(-0.1,50) -#' -#' r_twdtw = twdtwApply(x=rts, y=patt, weight.fun=log_fun, breaks=time_interval, -#' filepath="~/test_twdtw", overwrite=TRUE, format="GTiff") -#' -#' r_lucc = twdtwClassify(r_twdtw, format="GTiff", overwrite=TRUE) -#' -#' plotChanges(r_lucc) -#' -#' } -#' @export -plotChanges = function(x, time.levels=NULL, time.labels=NULL, class.levels=NULL, class.labels=NULL, class.colors=NULL){ - plot(x, type="changes", time.levels=time.levels, time.labels=time.labels, class.levels=class.levels, class.labels=class.labels, class.colors=class.colors) -} - -.plotChanges = function(x, time.levels, time.labels, class.levels, class.labels, class.colors){ - - if(length(time.levels)<2) - stop("The length of time.levels is shorter than two") - - df = do.call("rbind", lapply(seq_along(time.levels)[-1], function(l){ - from = raster::subset(x=x, subset=time.levels[l-1])[] - to = raster::subset(x=x, subset=time.levels[l] )[] - res = data.frame(from, to) - res = data.frame(xtabs(~ from + to, res) / nrow(res)) - res$layer = paste0(time.labels[l-1],"-",time.labels[l]) - res - })) - - df$from = factor(df$from, levels = class.levels, labels = class.labels) - df$to = factor(df$to, levels = class.levels, labels = class.labels) - df$from = factor(df$from) - df$to = factor(df$to) - I = df$from!=df$to - - # Plot change - gp = ggplot() + - geom_bar(data=df[I,], position = "stack", aes_string(x="to", y="Freq", fill="from"), stat="identity") + - geom_bar(data=df[I,], position = "stack", aes_string(x="from", y="-Freq", fill="to"), stat="identity") + - facet_wrap(~layer) + - scale_fill_manual(name = "Legend", values = class.colors) + - scale_y_continuous(labels = percent) + - xlab("") + - geom_hline(yintercept = 0) + - coord_flip() + - theme(legend.position = "bottom") + - ylab("Percentage of land changes") - - gp - - -} - - - diff --git a/R/plotClassification.R b/R/plotClassification.R deleted file mode 100644 index 61a6b37..0000000 --- a/R/plotClassification.R +++ /dev/null @@ -1,114 +0,0 @@ -############################################################### -# # -# (c) Victor Maus # -# Institute for Geoinformatics (IFGI) # -# University of Muenster (WWU), Germany # -# # -# Earth System Science Center (CCST) # -# National Institute for Space Research (INPE), Brazil # -# # -# # -# R Package dtwSat - 2016-01-16 # -# # -############################################################### - - -#' @title Plotting subintervals classification -#' @author Victor Maus, \email{vwmaus1@@gmail.com} -#' -#' @description Method for plotting the classification of each -#' subinterval of the time series based on TWDTW analysis. -#' -#' @param x An object of class \code{\link[dtwSat]{twdtwMatches}}. -#' @param timeseries.labels The label or index of the time series. -#' Default is 1. -#' @param patterns.labels A vector with labels of the patterns. If not -#' declared the function will plot one alignment for each pattern. -#' -#' @param attr An \link[base]{integer} vector or \link[base]{character} vector -#' indicating the attribute for plotting. If not declared the function will plot -#' all attributes. -#' @param ... Additional arguments passed to \code{\link[dtwSat]{twdtwClassify}}. -#' -#' @return A \link[ggplot2]{ggplot} object. -#' -#' @seealso -#' \code{\link[dtwSat]{twdtwMatches-class}}, -#' \code{\link[dtwSat]{twdtwApply}}, -#' \code{\link[dtwSat]{twdtwClassify}}, -#' \code{\link[dtwSat]{plotAlignments}}, -#' \code{\link[dtwSat]{plotPaths}}, -#' \code{\link[dtwSat]{plotMatches}}, and -#' \code{\link[dtwSat]{plotCostMatrix}}. -#' -#' @references -#' \insertRef{Maus:2019}{dtwSat} -#' -#' \insertRef{Maus:2016}{dtwSat} -#' -#' @examples -#' log_fun = logisticWeight(-0.1, 100) -#' ts = twdtwTimeSeries(MOD13Q1.ts.list) -#' patt = twdtwTimeSeries(MOD13Q1.patterns.list) -#' mat1 = twdtwApply(x=ts, y=patt, weight.fun=log_fun, keep=TRUE, legacy=TRUE) -#' -#' # Classify interval -#' from = as.Date("2007-09-01") -#' to = as.Date("2013-09-01") -#' by = "6 month" -#' gp = plotClassification(x=mat1, from=from, to=to, by=by, overlap=.5) -#' gp -#' -#' -#' @export -plotClassification = function(x, timeseries.labels=NULL, patterns.labels=NULL, attr, ...){ - - if(length(timeseries.labels)>6) timeseries.labels = timeseries.labels[1:6] - x = subset(x, timeseries.labels, patterns.labels) - if(length(list(...))>0) x = twdtwClassify(x, ...) - - ## Get data - if(missing(attr)) attr = names(getTimeSeries(x,1)[[1]]) - df.x = do.call("rbind", lapply(as.list(x), function(xx){ - ts = getTimeSeries(xx)[[1]][,attr,drop=FALSE] - data.frame(Time=index(ts), ts, Series=labels(xx)$timeseries) - })) - df.x = melt(df.x, id.vars=c("Time","Series")) - - y.labels = pretty_breaks()(range(df.x$value, na.rm = TRUE)) - y.breaks = y.labels - - df.pol = do.call("rbind", lapply(as.list(x), function(xx){ - best_class = xx[[1]] - df.pol = do.call("rbind", lapply(1:nrow(best_class), function(i){ - data.frame( - Time = c(best_class$from[i], best_class$to[i], best_class$to[i], best_class$from[i]), - Group = rep(i, 4), - Class = rep(as.character(best_class$label[i]), 4), - value = rep(range(y.breaks, na.rm = TRUE), each=2)) - })) - df.pol$Group = factor(df.pol$Group) - df.pol$Class = factor(df.pol$Class) - df.pol$Series = rep(as.character(labels(xx)$timeseries), length(df.pol$Time)) - df.pol - })) - - I = min(df.pol$Time, na.rm = TRUE)-30 <= df.x$Time & - df.x$Time <= max(df.pol$Time, na.rm = TRUE)+30 - - df.x = df.x[I,,drop=FALSE] - - gp = ggplot() + - facet_wrap(~Series, scales = "free_x", ncol=1) + - geom_polygon(data=df.pol, aes_string(x='Time', y='value', group='Group', fill='Class'), alpha=.7) + - scale_fill_brewer(palette="Set3") + - geom_line(data=df.x, aes_string(x='Time', y='value', colour='variable')) + - scale_y_continuous(expand = c(0, 0), breaks=y.breaks, labels=y.labels) + - scale_x_date(breaks=waiver(), labels=waiver()) + - theme(legend.position = "bottom") + - guides(colour = guide_legend(title = "Bands")) + - ylab("Value") + - xlab("Time") - gp -} - diff --git a/R/plotCostMatrix.R b/R/plotCostMatrix.R deleted file mode 100644 index 7476b38..0000000 --- a/R/plotCostMatrix.R +++ /dev/null @@ -1,124 +0,0 @@ -############################################################### -# # -# (c) Victor Maus # -# Institute for Geoinformatics (IFGI) # -# University of Muenster (WWU), Germany # -# # -# Earth System Science Center (CCST) # -# National Institute for Space Research (INPE), Brazil # -# # -# # -# R Package dtwSat - 2016-01-16 # -# # -############################################################### - - -#' @title Plotting paths -#' @author Victor Maus, \email{vwmaus1@@gmail.com} -#' -#' @description Method for plotting low cost paths in the TWDTW -#' cost matrix. -#' -#' -#' @param x An object of class \code{\link[dtwSat]{twdtwMatches}}. -#' @param timeseries.labels The label or index of the time series. -#' Default is 1. -#' @param patterns.labels A vector with labels of the patterns. If not -#' declared the function will plot one alignment for each pattern. -#' @param matrix.name A character. The name of the matrix to plot, -#' "costMatrix" for accumulated cost, "localMatrix" for local cost, -#' or "timeWeight" for time-weight. Default is "costMatrix". -#' -#' @return A \link[ggplot2]{ggplot} object. -#' -#' @seealso -#' \code{\link[dtwSat]{twdtwMatches-class}}, -#' \code{\link[dtwSat]{twdtwApply}}, -#' \code{\link[dtwSat]{plotAlignments}}, -#' \code{\link[dtwSat]{plotPaths}}, -#' \code{\link[dtwSat]{plotMatches}}, and -#' \code{\link[dtwSat]{plotClassification}}. -#' -#' @references -#' \insertRef{Maus:2019}{dtwSat} -#' -#' \insertRef{Maus:2016}{dtwSat} -#' -#' @examples -#' log_fun = logisticWeight(-0.1, 100) -#' ts = twdtwTimeSeries(MOD13Q1.ts.list) -#' patt = twdtwTimeSeries(MOD13Q1.patterns.list) -#' mat1 = twdtwApply(x=ts, y=patt, weight.fun=log_fun, keep=TRUE, legacy=TRUE) -#' -#' plotCostMatrix(mat1, matrix.name="costMatrix") -#' -#' plotCostMatrix(mat1, matrix.name="localMatrix") -#' -#' plotCostMatrix(mat1, matrix.name="timeWeight") -#' -#' @export -plotCostMatrix = function(x, timeseries.labels=NULL, patterns.labels=NULL, matrix.name="costMatrix"){ - - pt = pmatch(matrix.name,c("costMatrix", "localMatrix", "timeWeight")) - if(is.na(pt)) - stop("matrix.name is not costMatrix, localMatrix, or timeWeight") - - legend_name = c("Accumulated cost", "Local cost", "Time weight")[pt] - - x = subset(x, timeseries.labels[1], patterns.labels) - y = as.character(labels(x)$patterns) - ## Get data - internals = getInternals(x)[[1]] - if(any(sapply(internals, function(x) length(x$internals))<1)) - stop("Plot methods requires internals, set keep=TRUE on twdtwApply() call") - ts = getTimeSeries(x)[[1]] - patterns = getPatterns(x) - - # Get cost matrix - df.m = do.call("rbind", lapply(y, function(p){ - tx = index(ts) - ty = index(shiftDates(patterns[[p]], year=2005)) - m = internals[[p]]$internals[[matrix.name]] - res = melt(m) - names(res) = c("Var1","Var2","value") - res$Pattern = p - res$tx = tx - res$ty = ty - res - })) - - ## Set axis breaks and labels - x.labels = pretty_breaks()(range(df.m$tx, na.rm = TRUE)) - timeline = unique( c(df.m$tx, x.labels) ) - x.breaks = zoo( c(unique(df.m$Var2), rep(NA, length(x.labels))), order.by = timeline ) - x.breaks = na.approx(x.breaks, rule = 2) - x.axis = data.frame(x.breaks=x.breaks[x.labels], x.labels = names(x.labels)) - - fact = 0 - for(i in seq_along(y)[-1]) fact[i] = fact[i-1] + max(df.m$Var1[df.m$Pattern==y[i]]) - df.m$Var3 = df.m$Var1 + unlist(lapply(seq_along(y), function(i) rep(fact[i], length(which(df.m$Pattern==y[i])) ))) - - y.axis = do.call("rbind", lapply(y, function(p){ - df = df.m[df.m$Pattern==p,] - y.labels = pretty_breaks()(range(df$ty, na.rm = TRUE)) - timeline <- unique(merge(unique(df[,c("ty","Var3")]), data.frame(ty = y.labels[drop = FALSE]), by.x = "ty", by.y = "ty", all.x = TRUE, all.y = TRUE)) - y.breaks <- zoo(timeline$Var3, order.by = timeline$ty) - y.breaks = na.approx(y.breaks, rule = 2) - y.breaks = y.breaks[y.labels] - data.frame(y.breaks, y.labels=names(y.labels)) - })) - - # Plot - gp = ggplot(data=df.m, aes_string(y='Var3', x='Var2')) + - facet_wrap(~Pattern, scales = "free", ncol=1) + - geom_raster(aes_string(fill='value')) + - scale_fill_gradientn(name = legend_name, colours = gray.colors(100, start = 0.1, end = 1)) + - scale_x_continuous(expand = c(0, 0), breaks=x.axis$x.breaks, labels=x.axis$x.labels) + - scale_y_continuous(expand = c(0, 0), breaks=y.axis$y.breaks, labels=y.axis$y.labels) + - xlab("Time series") + - ylab("Pattern") - - gp - -} - diff --git a/R/plotDistance.R b/R/plotDistance.R deleted file mode 100644 index 0fe7136..0000000 --- a/R/plotDistance.R +++ /dev/null @@ -1,97 +0,0 @@ -############################################################### -# # -# (c) Victor Maus # -# Institute for Geoinformatics (IFGI) # -# University of Muenster (WWU), Germany # -# # -# Earth System Science Center (CCST) # -# National Institute for Space Research (INPE), Brazil # -# # -# # -# R Package dtwSat - 2016-01-16 # -# # -############################################################### - - -#' @title Plotting distance maps -#' @author Victor Maus, \email{vwmaus1@@gmail.com} -#' -#' @description Method for plotting TWDTW distance maps. -#' -#' @param x An object of class \code{\link[dtwSat]{twdtwRaster}}. -#' @param time.levels A \link[base]{character} or \link[base]{numeric} -#' vector with the layers to plot. For plot type ''change'' the minimum length -#' is two. -#' @param time.labels A \link[base]{character} or \link[base]{numeric} -#' vector with the labels of the layers. It must have the same -#' length as time.levels. Default is NULL. -#' @param layers A \link[base]{character} or \link[base]{numeric} -#' vector with the layers/bands of the raster time series. -#' -#' @return A \link[ggplot2]{ggplot} object. -#' -#' @seealso -#' \code{\link[dtwSat]{twdtwRaster-class}}, -#' \code{\link[dtwSat]{twdtwApply}}, -#' \code{\link[dtwSat]{plotArea}}, -#' \code{\link[dtwSat]{plotChanges}}, and -#' \code{\link[dtwSat]{plotDistance}}. -#' -#' @references -#' \insertRef{Maus:2019}{dtwSat} -#' -#' \insertRef{Maus:2016}{dtwSat} -#' -#' @examples -#' \dontrun{ -#' # Run TWDTW analysis for raster time series -#' patt = MOD13Q1.MT.yearly.patterns -#' evi = brick(system.file("lucc_MT/data/evi.tif", package="dtwSat")) -#' ndvi = brick(system.file("lucc_MT/data/ndvi.tif", package="dtwSat")) -#' red = brick(system.file("lucc_MT/data/red.tif", package="dtwSat")) -#' blue = brick(system.file("lucc_MT/data/blue.tif", package="dtwSat")) -#' nir = brick(system.file("lucc_MT/data/nir.tif", package="dtwSat")) -#' mir = brick(system.file("lucc_MT/data/mir.tif", package="dtwSat")) -#' doy = brick(system.file("lucc_MT/data/doy.tif", package="dtwSat")) -#' timeline = scan(system.file("lucc_MT/data/timeline", package="dtwSat"), what="date") -#' rts = twdtwRaster(evi, ndvi, red, blue, nir, mir, timeline = timeline, doy = doy) -#' -#' time_interval = seq(from=as.Date("2007-09-01"), to=as.Date("2013-09-01"), -#' by="12 month") -#' log_fun = weight.fun=logisticWeight(-0.1,50) -#' -#' r_twdtw = twdtwApply(x=rts, y=patt, weight.fun=log_fun, breaks=time_interval, -#' filepath="~/test_twdtw", overwrite=TRUE, format="GTiff", mc.cores=3) -#' -#' plotDistance(r_twdtw) -#' -#' } -#' @export -plotDistance = function(x, time.levels=1, time.labels=1, layers=NULL){ - plot(x, type="distance", time.levels=time.levels, time.labels=time.labels, layers=layers) -} - -.plotDistance = function(x, layers, labels, time.label){ - - df.map = data.frame(coordinates(x), x[], stringsAsFactors=FALSE) - df.map = melt(df.map, id.vars = c("x", "y")) - df.map$variable = labels[match(as.character(df.map$variable), names(x))] - - gp = ggplot(data=df.map, aes_string(x="x", y="y")) + - geom_raster(aes_string(fill="value")) + - scale_fill_gradient(name="TWDTW distance", low="blue", high="red") + - facet_wrap(~variable) + - scale_y_continuous(expand = c(0, 0), breaks = NULL) + - scale_x_continuous(expand = c(0, 0), breaks = NULL) + - theme(legend.position = "bottom") + - coord_fixed(ratio = 1) + - xlab("") + - ylab("") + - #xlab("Longitude") + - #ylab("Latitude") + - ggtitle(time.label) - gp - -} - - diff --git a/R/plotMapSamples.R b/R/plotMapSamples.R deleted file mode 100644 index dbf5aee..0000000 --- a/R/plotMapSamples.R +++ /dev/null @@ -1,48 +0,0 @@ - -#' @title Plotting maps -#' @author Victor Maus, \email{vwmaus1@@gmail.com} -#' -#' @description Method for plotting maps and samples. -#' -#' @param x An object of class \code{\link[dtwSat]{twdtwAssessment}}. -#' @param samples A character defining the samples to plot -#' "correct", "incorrect", "all". Default is "all". -#' @param ... Other arguments to pass to \code{\link[dtwSat]{twdtwRaster}} -#' -#' @return A \link[ggplot2]{ggplot} object. -#' -#' @seealso -#' \code{\link[dtwSat]{twdtwAssessment}}, -#' \code{\link[dtwSat]{plotAccuracy}}, and -#' \code{\link[dtwSat]{plotAdjustedArea}}. -#' -#' @references -#' \insertRef{Maus:2019}{dtwSat} -#' -#' \insertRef{Maus:2016}{dtwSat} -#' -#' @example examples/test_twdtw_raster_analysis.R -#' @export -plotMapSamples = function(x, samples="all", ...){ - .plotMapSamples(x, samples, ...) -} - -.plotMapSamples = function(x, samples){ - - x.sp = switch(samples, - all = x@data, - correct = x@data[x@data$Predicted == x@data$Reference, ], - incorrect = x@data[x@data$Predicted != x@data$Reference, ]) - - gp = plot(x@map, type="maps") - - - df = data.frame(x.sp) - df$variable = gp$data[match(df$Period, gp$data$rast.layer),"variable"] - df$variable = as.numeric(format(as.Date(df$to), "%Y")) - - gp = gp + geom_point(shape = 1, data = df, aes_string(x = "longitude", y = "latitude")) + - scale_shape(solid = FALSE) - gp - -} diff --git a/R/plotMaps.R b/R/plotMaps.R deleted file mode 100644 index 9c69dc8..0000000 --- a/R/plotMaps.R +++ /dev/null @@ -1,103 +0,0 @@ -############################################################### -# # -# (c) Victor Maus # -# Institute for Geoinformatics (IFGI) # -# University of Muenster (WWU), Germany # -# # -# Earth System Science Center (CCST) # -# National Institute for Space Research (INPE), Brazil # -# # -# # -# R Package dtwSat - 2016-01-16 # -# # -############################################################### - - -#' @title Plotting maps -#' @author Victor Maus, \email{vwmaus1@@gmail.com} -#' -#' @description Method for plotting time series of maps. -#' -#' @param x An object of class \code{\link[dtwSat]{twdtwRaster}}. -#' @param time.levels A \link[base]{character} or \link[base]{numeric} -#' vector with the layers to plot. For plot type ''change'' the minimum length -#' is two. -#' @param time.labels A \link[base]{character} or \link[base]{numeric} -#' vector with the labels of the layers. It must have the same -#' length as time.levels. Default is NULL. -#' @param class.levels A \link[base]{character} or \link[base]{numeric} -#' vector with the levels of the raster values. Default is NULL. -#' @param class.labels A \link[base]{character} or \link[base]{numeric} -#' vector with the labels of the raster values. It must have the same -#' length as class.levels. Default is NULL. -#' @param class.colors A set of aesthetic values. It must have the same -#' length as class.levels. Default is NULL. See -#' \link[ggplot2]{scale_fill_manual} for details. -#' -#' @return A \link[ggplot2]{ggplot} object. -#' -#' @seealso -#' \code{\link[dtwSat]{twdtwRaster-class}}, -#' \code{\link[dtwSat]{twdtwApply}}, -#' \code{\link[dtwSat]{plotArea}}, -#' \code{\link[dtwSat]{plotChanges}}, and -#' \code{\link[dtwSat]{plotDistance}}. -#' -#' @references -#' \insertRef{Maus:2019}{dtwSat} -#' -#' \insertRef{Maus:2016}{dtwSat} -#' -#' @examples -#' \dontrun{ -#' # Run TWDTW analysis for raster time series -#' patt = MOD13Q1.MT.yearly.patterns -#' evi = brick(system.file("lucc_MT/data/evi.tif", package="dtwSat")) -#' ndvi = brick(system.file("lucc_MT/data/ndvi.tif", package="dtwSat")) -#' red = brick(system.file("lucc_MT/data/red.tif", package="dtwSat")) -#' blue = brick(system.file("lucc_MT/data/blue.tif", package="dtwSat")) -#' nir = brick(system.file("lucc_MT/data/nir.tif", package="dtwSat")) -#' mir = brick(system.file("lucc_MT/data/mir.tif", package="dtwSat")) -#' doy = brick(system.file("lucc_MT/data/doy.tif", package="dtwSat")) -#' timeline = scan(system.file("lucc_MT/data/timeline", package="dtwSat"), what="date") -#' rts = twdtwRaster(evi, ndvi, red, blue, nir, mir, timeline = timeline, doy = doy) -#' -#' time_interval = seq(from=as.Date("2007-09-01"), to=as.Date("2013-09-01"), -#' by="12 month") -#' log_fun = weight.fun=logisticWeight(-0.1,50) -#' -#' r_twdtw = twdtwApply(x=rts, y=patt, weight.fun=log_fun, breaks=time_interval, -#' filepath="~/test_twdtw", overwrite=TRUE, format="GTiff", mc.cores=3) -#' -#' r_lucc = twdtwClassify(r_twdtw, format="GTiff", overwrite=TRUE) -#' -#' plotMaps(r_lucc) -#' -#' } -#' @export -plotMaps = function(x, time.levels=NULL, time.labels=NULL, class.levels=NULL, class.labels=NULL, class.colors=NULL){ - plot(x, type="maps", time.levels=time.levels, time.labels=time.labels, class.levels=class.levels, class.labels=class.labels, class.colors=class.colors) -} - -.plotMaps = function(x, time.levels, time.labels, class.levels, class.labels, class.colors){ - - df.map = data.frame(coordinates(x), x[], stringsAsFactors=FALSE) - df.map = melt(df.map, id.vars = c("x", "y")) - df.map$value = factor(df.map$value, levels = class.levels, labels = class.labels) - df.map$rast.layer = seq_along(time.levels)[match(as.character(df.map$variable), time.levels)] - df.map$rast.level = time.levels[match(as.character(df.map$variable), time.levels)] - df.map$variable = time.labels[match(as.character(df.map$variable), time.levels)] - - gp = ggplot(data=df.map, aes_string(x="x", y="y")) + - geom_raster(aes_string(fill="value")) + - scale_fill_manual(name="Legend", values = class.colors) + - facet_wrap(~variable) + - scale_y_continuous(expand = c(0, 0), breaks = NULL) + - scale_x_continuous(expand = c(0, 0), breaks = NULL) + - theme(legend.position = "bottom") + - coord_fixed(ratio = 1) + - xlab("") + - ylab("") - gp - -} diff --git a/R/plotMatches.R b/R/plotMatches.R deleted file mode 100644 index 11a6825..0000000 --- a/R/plotMatches.R +++ /dev/null @@ -1,150 +0,0 @@ -############################################################### -# # -# (c) Victor Maus # -# Institute for Geoinformatics (IFGI) # -# University of Muenster (WWU), Germany # -# # -# Earth System Science Center (CCST) # -# National Institute for Space Research (INPE), Brazil # -# # -# # -# R Package dtwSat - 2016-01-16 # -# # -############################################################### - - -#' @title Plotting matching points -#' @author Victor Maus, \email{vwmaus1@@gmail.com} -#' -#' @description Method for plotting the matching points from -#' TWDTW analysis. -#' -#' @param x An object of class \code{\link[dtwSat]{twdtwMatches}}. -#' @param timeseries.labels The label or index of the time series. -#' Default is 1. -#' @param patterns.labels A vector with labels of the patterns. If not -#' declared the function will plot one alignment for each pattern. -#' @param k A positive integer. The index of the last alignment to include in -#' the plot. If not declared the function will plot the best match for -#' each pattern. -#' @param attr An \link[base]{integer} or \link[base]{character} vector -#' indicating the attribute for plotting. Default is 1. -#' @param shift A number that shifts the pattern position in the \code{x} -#' direction. Default is 0.5. -#' @param show.dist Show the distance for each alignment. Default is FALSE. -#' @docType methods -#' -#' @return A \link[ggplot2]{ggplot} object. -#' -#' @seealso -#' \code{\link[dtwSat]{twdtwMatches-class}}, -#' \code{\link[dtwSat]{twdtwApply}}, -#' \code{\link[dtwSat]{plotPaths}}, -#' \code{\link[dtwSat]{plotCostMatrix}}, -#' \code{\link[dtwSat]{plotAlignments}}, and -#' \code{\link[dtwSat]{plotClassification}}. -#' -#' @references -#' \insertRef{Maus:2019}{dtwSat} -#' -#' \insertRef{Maus:2016}{dtwSat} -#' -#' @examples -#' log_fun = logisticWeight(-0.1, 100) -#' ts = twdtwTimeSeries(MOD13Q1.ts.list) -#' patt = twdtwTimeSeries(MOD13Q1.patterns.list) -#' mat1 = twdtwApply(x=ts, y=patt, weight.fun=log_fun, keep=TRUE, legacy=TRUE) -#' -#' plotMatches(mat1) -#' -#' plotMatches(mat1, patterns.labels="Soybean", k=4) -#' -#' plotMatches(mat1, patterns.labels=c("Soybean","Maize"), k=4) -#' -#' plotMatches(mat1, patterns.labels=c("Soybean","Cotton"), k=c(3,1)) -#' -#' @export -plotMatches = function(x, timeseries.labels=1, patterns.labels=NULL, k=1, attr=1, shift=0.5, show.dist=FALSE){ - - x = subset(x, timeseries.labels[1], patterns.labels) - ## Get data - internals = getInternals(x)[[1]] - if(any(sapply(internals, function(x) length(x$internals))<1)) - stop("Plot methods requires internals, set keep=TRUE on twdtwApply() call") - matching = getMatches(x)[[1]] - alignments = getAlignments(x)[[1]] - ts = getTimeSeries(x)[[1]] - patterns = getPatterns(x) - - y = as.character(labels(x)$patterns) - if(length(k)==1){ - y = rep(y, each=k) - k = unlist(lapply(table(y), function(i) seq(from=1, to=i) )) - } - if(length(y)!=length(k)) - stop("If length of k greater than 1, then patterns.labels must have the same length as k.") - - xx = ts[,attr,drop=FALSE] - tx = index(xx) - - y.labels = pretty_breaks()(range(xx, na.rm = TRUE)) - y.breaks = y.labels - - # Get time series - df.x = data.frame(Time=tx, xx) - - # Build matching points data.frame - df.list = lapply(seq_along(y), function(i){ - p = y[i] - yy = patterns[[p]][,attr,drop=FALSE] - ty = index(yy) - - if(k[i]>alignments[[p]]$K){ - warning("Alignment index out of bounds", call. = TRUE) - return(NULL) - } - - map = data.frame(matching[[p]]$matching[[k[i]]]) - delay = tx[map$index2[1]]-ty[1] - if(delay>0) - delay = delay + diff(range(ty, na.rm = TRUE))*shift - if(delay<0) - delay = delay - diff(range(ty, na.rm = TRUE))*shift - - df.pt = data.frame(Time=ty[map$index1]+delay, yy[map$index1,,drop=FALSE]+max(xx, na.rm = TRUE)) - df.match.pt = df.pt - df.match.pt$alig = paste(1:nrow(map),p,k[i],sep="_") - df.match.x = df.x[map$index2,] - df.match.x$alig = paste(1:nrow(map),p,k[i],sep="_") - df.match = rbind(df.match.pt, df.match.x) - df.pt$Matches = paste(p,k[i]) - df.dist = data.frame(Time=max(ty[map$index1]+delay)+diff(range(df.pt$Time))/3, - max(df.pt[,names(yy)]),Dist=alignments[[p]]$distance[k[i]]) - names(df.dist) = c("Time", names(yy), "Dist") - list(match=df.match, pt=df.pt, dist=df.dist) - }) - - df.pt = do.call("rbind", lapply(df.list, function(df) df$pt)) - df.match = do.call("rbind", lapply(df.list, function(df) df$match)) - - attr_names = names(df.x)[2] - gp = ggplot(data=df.x, aes_string(x='Time', y=eval(attr_names))) + - geom_line() + - geom_line(data=df.pt, aes_string(x='Time', y=eval(attr_names), - group='Matches', colour='Matches')) + - geom_line(data=df.match, linetype = 2, colour = "grey", - aes_string(x='Time', y=eval(attr_names), group='alig')) + - scale_y_continuous(breaks=y.breaks, labels=y.labels) + - scale_x_date(breaks=waiver(), labels=waiver()) + - ylab(attr_names) - - if(show.dist){ - df.dist = do.call("rbind", lapply(df.list, function(df) df$dist)) - df.dist$Dist = paste("Distance:",round(df.dist$Dist,2)) - gp = gp + geom_text(data=df.dist, mapping = aes_string(x='Time', y=eval(attr_names), label='Dist')) - } - - gp -} - - diff --git a/R/plotPaths.R b/R/plotPaths.R deleted file mode 100644 index 00c3052..0000000 --- a/R/plotPaths.R +++ /dev/null @@ -1,129 +0,0 @@ -############################################################### -# # -# (c) Victor Maus # -# Institute for Geoinformatics (IFGI) # -# University of Muenster (WWU), Germany # -# # -# Earth System Science Center (CCST) # -# National Institute for Space Research (INPE), Brazil # -# # -# # -# R Package dtwSat - 2016-01-16 # -# # -############################################################### - - -#' @title Plotting paths -#' @author Victor Maus, \email{vwmaus1@@gmail.com} -#' -#' @description Method for plotting low cost paths in the TWDTW -#' cost matrix. -#' -#' -#' @param x An object of class \code{\link[dtwSat]{twdtwMatches}}. -#' @param timeseries.labels The label or index of the time series. -#' Default is 1. -#' @param patterns.labels A vector with labels of the patterns. If not -#' declared the function will plot one alignment for each pattern. -#' @param k A positive integer. The index of the last alignment to include in -#' the plot. If not declared the function will plot all low cost paths. -#' -#' @return A \link[ggplot2]{ggplot} object. -#' -#' @seealso -#' \code{\link[dtwSat]{twdtwMatches-class}}, -#' \code{\link[dtwSat]{twdtwApply}}, -#' \code{\link[dtwSat]{plotAlignments}}, -#' \code{\link[dtwSat]{plotCostMatrix}}, -#' \code{\link[dtwSat]{plotMatches}}, and -#' \code{\link[dtwSat]{plotClassification}}. -#' -#' @references -#' \insertRef{Maus:2019}{dtwSat} -#' -#' \insertRef{Maus:2016}{dtwSat} -#' -#' @examples -#' log_fun = logisticWeight(-0.1, 100) -#' ts = twdtwTimeSeries(MOD13Q1.ts.list) -#' patt = twdtwTimeSeries(MOD13Q1.patterns.list) -#' mat1 = twdtwApply(x=ts, y=patt, weight.fun=log_fun, keep=TRUE, legacy=TRUE) -#' -#' plotPaths(mat1) -#' -#' plotPaths(mat1, patterns.labels="Soybean", k=1:2) -#' -#' plotPaths(mat1, patterns.labels=c("Maize","Cotton"), k=2) -#' -#' @export -plotPaths = function(x, timeseries.labels=NULL, patterns.labels=NULL, k=NULL){ - - x = subset(x, timeseries.labels[1], patterns.labels, k) - y = as.character(labels(x)$patterns) - ## Get data - internals = getInternals(x)[[1]] - if(any(sapply(internals, function(x) length(x$internals))<1)) - stop("Plot methods requires internals, set keep=TRUE on twdtwApply() call") - matching = getMatches(x)[[1]] - ts = getTimeSeries(x)[[1]] - patterns = getPatterns(x) - - # Get cost matrix - df.m = do.call("rbind", lapply(y, function(p){ - tx = index(ts) - ty = index(shiftDates(patterns[[p]], year=2005)) - m = internals[[p]]$internals$costMatrix - res = melt(m) - names(res) = c("Var1","Var2","value") - res$Pattern = p - res$tx = tx - res$ty = ty - res - })) - - # Get minimun cost paths - df.path = do.call("rbind", lapply(y, function(p){ - res = do.call("rbind", lapply(seq_along(matching[[p]]$matching), function(i) - data.frame(matching[[p]]$matching[[i]], alignment=i) - )) - res$Pattern = p - res - })) - - ## Set axis breaks and labels - x.labels = pretty_breaks()(range(df.m$tx, na.rm = TRUE)) - timeline = unique( c(df.m$tx, x.labels) ) - x.breaks = zoo( c(unique(df.m$Var2), rep(NA, length(x.labels))), timeline ) - x.breaks = na.approx(x.breaks, rule = 2) - x.axis = data.frame(x.breaks=x.breaks[x.labels], x.labels = names(x.labels)) - - fact = 0 - for(i in seq_along(y)[-1]) fact[i] = fact[i-1] + max(df.m$Var1[df.m$Pattern==y[i]]) - df.m$Var3 = df.m$Var1 + unlist(lapply(seq_along(y), function(i) rep(fact[i], length(which(df.m$Pattern==y[i])) ))) - df.path$Var3 = df.path$index1 + unlist(lapply(seq_along(y), function(i) rep(fact[i], length(which(df.path$Pattern==y[i])) ))) - - y.axis = do.call("rbind", lapply(y, function(p){ - df = df.m[df.m$Pattern==p,] - y.labels = pretty_breaks()(range(df$ty, na.rm = TRUE)) - timeline <- unique(merge(unique(df[,c("ty","Var3")]), data.frame(ty = y.labels[drop = FALSE]), by.x = "ty", by.y = "ty", all.x = TRUE, all.y = TRUE)) - y.breaks <- zoo(timeline$Var3, order.by = timeline$ty) - y.breaks = na.approx(y.breaks, rule = 2) - y.breaks = y.breaks[y.labels] - data.frame(y.breaks, y.labels=names(y.labels)) - })) - - # Plot - gp = ggplot(data=df.m, aes_string(y='Var3', x='Var2')) + - facet_wrap(~Pattern, scales = "free", ncol=1) + - geom_raster(aes_string(fill='value')) + - scale_fill_gradientn(name = 'Warping cost', colours = terrain.colors(100)) + - geom_path(data=df.path, aes_string(y='Var3', x='index2', group='alignment')) + - scale_x_continuous(expand = c(0, 0), breaks=x.axis$x.breaks, labels=x.axis$x.labels) + - scale_y_continuous(expand = c(0, 0), breaks=y.axis$y.breaks, labels=y.axis$y.labels) + - xlab("Time series") + - ylab("Pattern") - - gp - -} - diff --git a/R/plotTimeSeries.R b/R/plotTimeSeries.R deleted file mode 100644 index f8f05cf..0000000 --- a/R/plotTimeSeries.R +++ /dev/null @@ -1,82 +0,0 @@ -############################################################### -# # -# (c) Victor Maus # -# Institute for Geoinformatics (IFGI) # -# University of Muenster (WWU), Germany # -# # -# Earth System Science Center (CCST) # -# National Institute for Space Research (INPE), Brazil # -# # -# # -# R Package dtwSat - 2016-01-16 # -# # -############################################################### - - -#' @title Plotting time series -#' @author Victor Maus, \email{vwmaus1@@gmail.com} -#' -#' @description Method for plotting the temporal patterns. -#' -#' @param x An object of class \code{\link[dtwSat]{twdtwTimeSeries}}, -#' \code{\link[zoo]{zoo}}, or list of class \code{\link[zoo]{zoo}}. -#' @param labels A vector with labels of the time series. If missing, all -#' elements in the list will be plotted (up to a maximum of 16). -#' @param attr An \link[base]{integer} vector or \link[base]{character} vector -#' indicating the attribute for plotting. If not declared the function will plot -#' all attributes. -#' -#' @return A \link[ggplot2]{ggplot} object. -#' -#' @seealso -#' \code{\link[dtwSat]{twdtwTimeSeries-class}} and -#' \code{\link[dtwSat]{plotPatterns}} -#' -#' @references -#' \insertRef{Maus:2019}{dtwSat} -#' -#' \insertRef{Maus:2016}{dtwSat} -#' -#' @examples -#' ts = twdtwTimeSeries(MOD13Q1.ts.list) -#' plotTimeSeries(ts) -#' plotTimeSeries(ts, attr="evi") -#' -#' @export -plotTimeSeries = function(x, labels=NULL, attr){ - - if(is(x, "twdtwMatches")) x = subset(x@timeseries, labels) - if(is(x, "twdtwTimeSeries")) x = subset(x, labels) - if(is.null(labels)) labels = labels(x) - new_labels = labels(x) - labels_tabel = table(new_labels) - if(any(labels_tabel>1)) - for(p in names(labels_tabel)){ - i = p==labels(x) - new_labels[i] = paste(new_labels[i], 1:labels_tabel[p]) - } - x = twdtwTimeSeries(x@timeseries, labels=new_labels) - labels = new_labels - if(length(labels)>16) labels = labels[1:16] - - # Build data.frame - if(missing(attr)) attr = names(x[[1]]) - df.p = do.call("rbind", lapply(as.list(x), function(xx){ - ts = xx[[1]][,attr,drop=FALSE] - data.frame(Time=index(ts), ts, Series=labels(xx)[1]) - })) - df.p = melt(df.p, id.vars=c("Time","Series")) - - # Plot time series - gp = ggplot(df.p, aes_string(x="Time", y="value", colour="variable") ) + - geom_line() + - theme(legend.position = "bottom") + - facet_wrap(~Series, scales = "free_x", ncol=1) + - guides(colour = guide_legend(title = "Bands")) + - ylab("Value") - - gp - -} - - diff --git a/R/plotPatterns.R b/R/plot_patterns.R similarity index 60% rename from R/plotPatterns.R rename to R/plot_patterns.R index 5bb6bd6..5c8860d 100644 --- a/R/plotPatterns.R +++ b/R/plot_patterns.R @@ -1,18 +1,3 @@ -############################################################### -# # -# (c) Victor Maus # -# Institute for Geoinformatics (IFGI) # -# University of Muenster (WWU), Germany # -# # -# Earth System Science Center (CCST) # -# National Institute for Space Research (INPE), Brazil # -# # -# # -# R Package dtwSat - 2016-01-16 # -# # -############################################################### - - #' @title Plotting temporal patterns #' @author Victor Maus, \email{vwmaus1@@gmail.com} #' @@ -39,16 +24,9 @@ #' #' \insertRef{Maus:2016}{dtwSat} #' -#' @examples -#' patt = twdtwTimeSeries(MOD13Q1.patterns.list) -#' plotPatterns(patt) -#' plotPatterns(patt, attr="evi") -#' #' @export -plotPatterns = function(x, labels=NULL, attr, year=2005){ +plot_patterns = function(x, labels=NULL, attr, year=2005){ - if(is(x, "twdtwMatches")) x = x@patterns - if(is(x, "twdtwTimeSeries")) x = subset(x, labels) x = twdtwTimeSeries(x, labels) labels = labels(x) diff --git a/R/resampleTimeSeries.R b/R/resampleTimeSeries.R deleted file mode 100644 index d310a9f..0000000 --- a/R/resampleTimeSeries.R +++ /dev/null @@ -1,64 +0,0 @@ -############################################################### -# # -# (c) Victor Maus # -# Institute for Geoinformatics (IFGI) # -# University of Muenster (WWU), Germany # -# # -# Earth System Science Center (CCST) # -# National Institute for Space Research (INPE), Brazil # -# # -# # -# R Package dtwSat - 2016-02-22 # -# # -############################################################### - - -#' @title Resample time series -#' @name resampleTimeSeries -#' @author Victor Maus, \email{vwmaus1@@gmail.com} -#' -#' @description Resample time series in the object to have the same length. -#' -#' @inheritParams twdtwTimeSeries-class -#' @param length An integer. The number of samples to resample the time series to. -#' If not declared the length is set to the length of the longest time series. -#' -#' @seealso -#' \code{\link[dtwSat]{twdtwTimeSeries-class}}, and -#' \code{\link[dtwSat]{twdtwApply}} -#' -#' @return An object of class \code{\link[dtwSat]{twdtwTimeSeries}} whose -#' time series have the same number of samples (points). -#' -#' @export -setGeneric("resampleTimeSeries", function(object, length=NULL) standardGeneric("resampleTimeSeries")) - -#' @rdname resampleTimeSeries -#' @aliases resampleTimeSeries-twdtwMatches -#' @examples -#' # Resampling time series from objects of class twdtwTimeSeries -#' patt = twdtwTimeSeries(MOD13Q1.patterns.list) -#' npatt = resampleTimeSeries(patt, length=46) -#' nrow(patt) -#' nrow(npatt) -#' -#' @export -setMethod("resampleTimeSeries", "twdtwTimeSeries", - function(object, length) { - if(is.null(length)) length = max(nrow(object), na.rm=TRUE) - twdtwTimeSeries(lapply(object[], resampleTimeSeries.twdtwTimeSeries, length=length), labels=labels(object)) - }) - -resampleTimeSeries.twdtwTimeSeries = function(x, length){ - #labels = as.character(labels(x)) - dates = index(x) - freq = trunc(as.numeric(diff(range(dates)))/(length-1)) - timeline = seq(min(dates, na.rm = TRUE), max(dates, na.rm = TRUE), by=freq) - zoo(data.frame(na.spline(x, xout = timeline)), timeline) -} - - - - - - diff --git a/R/subset.R b/R/subset.R deleted file mode 100644 index f834e33..0000000 --- a/R/subset.R +++ /dev/null @@ -1,171 +0,0 @@ -############################################################### -# # -# (c) Victor Maus # -# Institute for Geoinformatics (IFGI) # -# University of Muenster (WWU), Germany # -# # -# Earth System Science Center (CCST) # -# National Institute for Space Research (INPE), Brazil # -# # -# # -# R Package dtwSat - 2016-02-18 # -# # -############################################################### - -#' @title Subset time series -#' @name subset -#' @author Victor Maus, \email{vwmaus1@@gmail.com} -#' -#' @description Get subsets from objects of class twdtw*. -#' -#' @inheritParams get -#' @param x An objects of class twdtw*. -#' -#' @param k A positive integer. The index of the last alignment to include in -#' the subset. -#' -#' @param e An extent object, or any object from which an Extent object can -#' be extracted. See \link[raster]{crop} for details. -#' -#' @param layers A vector with the names of the \code{twdtwRaster} object to include in -#' the subset. -#' -#' @param labels A character vector with time series labels. -#' -#' @seealso -#' \code{\link[dtwSat]{twdtwRaster-class}}, -#' \code{\link[dtwSat]{twdtwTimeSeries-class}}, and -#' \code{\link[dtwSat]{twdtwMatches-class}} -#' -#' @return An object of class twdtw*. -#' -#' @references -#' \insertRef{Maus:2019}{dtwSat} -#' -#' \insertRef{Maus:2016}{dtwSat} -#' -#' @examples -#' # Getting time series from objects of class twdtwTimeSeries -#' ts = twdtwTimeSeries(MOD13Q1.ts.list) -#' ts = subset(ts, 2) -#' ts -#' # Getting time series from objects of class twdtwTimeSeries -#' patt = twdtwTimeSeries(MOD13Q1.patterns.list) -#' mat = twdtwApply(x=ts, y=patt, weight.fun=logisticWeight(-0.1,100), -#' keep=TRUE, legacy=TRUE) -#' mat = subset(mat, k=4) -#' -#' ## This example creates a twdtwRaster object and extracts time series from it. -#' -#' # Creating objects of class twdtwRaster with evi and ndvi time series -#' evi = brick(system.file("lucc_MT/data/evi.tif", package="dtwSat")) -#' ndvi = brick(system.file("lucc_MT/data/ndvi.tif", package="dtwSat")) -#' timeline = scan(system.file("lucc_MT/data/timeline", package="dtwSat"), what="date") -#' rts = twdtwRaster(evi, ndvi, timeline=timeline) -#' -#' rts_evi = subset(rts, layers="evi") -#' -#' field_samples = read.csv(system.file("lucc_MT/data/samples.csv", package="dtwSat")) -#' prj_string = scan(system.file("lucc_MT/data/samples_projection", package="dtwSat"), -#' what = "character") -#' -#' # Extract time series -#' ts_evi = getTimeSeries(rts_evi, y = field_samples, proj4string = prj_string) -#' -#' # Subset all labels = "Forest" -#' ts_forest = subset(ts_evi, labels="Forest") -#' -NULL - -#' @aliases subset-twdtwTimeSeries -#' @inheritParams subset -#' @rdname subset -#' @export -setMethod("subset", "twdtwTimeSeries", function(x, labels=NULL) - subset.twdtwTimeSeries(x=x, labels=labels)) - - -subset.twdtwTimeSeries = function(x, labels){ - if(is.null(labels)) labels = labels(x) - if(is.numeric(labels)) return(twdtwTimeSeries(x@timeseries[labels], labels=x@labels[labels])) - I = which(!is.na(match(x@labels, labels))) - if(length(I)<1) return(new("twdtwTimeSeries")) - twdtwTimeSeries(x@timeseries[I], labels=x@labels[I]) -} - - -#' @aliases subset-twdtwMatches -#' @inheritParams subset -#' @rdname subset -#' @export -setMethod("subset", "twdtwMatches", function(x, timeseries.labels=NULL, patterns.labels=NULL, k=NULL) - subset.twdtwMatches(x=x, timeseries.labels=timeseries.labels, patterns.labels=patterns.labels, k=k) ) - - -subset.twdtwMatches = function(x, timeseries.labels, patterns.labels, k){ - if(is.null(timeseries.labels)) timeseries.labels = as.character(labels(x@timeseries)) - if(is.null(patterns.labels)) patterns.labels = as.character(labels(x@patterns)) - if(is.null(k)) k = 1:length(x) - k = unique(k) - I = timeseries.labels - J = patterns.labels - if(is.character(I)) I = which(!is.na(match(x@timeseries@labels, timeseries.labels))) - if(is.character(J)) J = which(!is.na(match(x@patterns@labels, patterns.labels))) - timeseries = subset(x@timeseries, labels=I) - patterns = subset(x@patterns, labels=J) - names(J) = labels(patterns) - alignments = lapply(I, function(i){ - out = lapply(J, function(j){ - res = x@alignments[[i]][[j]] - k = k[ k<=res$K ] - res$K = length(k) - res$from = res$from[k] - res$to = res$to[k] - res$distance = res$distance[k] - if(length(k)<1) res$label = numeric(0) - if(length(res$matching)>length(k)) res$matching = res$matching[k] - res - }) - # names(out) = patterns.labels - out - }) - twdtwMatches(timeseries=timeseries, patterns=patterns, alignments=alignments) -} - -#' @aliases subset-twdtwRaster -#' @inheritParams subset -#' @rdname subset -#' @export -setMethod("subset", "twdtwRaster", function(x, e=NULL, layers=NULL) - subset.twdtwRaster(x=x, e=e, layers=layers) ) - -subset.twdtwRaster = function(x, e, layers){ - if(is.null(layers)) - layers = names(x) - if(is.null(e)) - e = extent(x) - res = x - res@layers = layers - res@timeseries = res@timeseries[layers] - res@timeseries = lapply(res@timeseries, crop, y=e) - res -} - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/R/twdtw.R b/R/twdtw.R deleted file mode 100644 index daa97f4..0000000 --- a/R/twdtw.R +++ /dev/null @@ -1,164 +0,0 @@ -############################################################### -# # -# (c) Victor Maus # -# Institute for Geoinformatics (IFGI) # -# University of Muenster (WWU), Germany # -# # -# Earth System Science Center (CCST) # -# National Institute for Space Research (INPE), Brazil # -# # -# # -# R Package dtwSat - 2016-02-22 # -# # -############################################################### - -.twdtw = function(x, y, weight.fun, dist.method, step.matrix, - n, span, min.length, keep){ - labels = as.character(labels(y)) - names(labels) = labels - timeseries = x[[1]] - # Remove possible NA values - timeseries = timeseries[!apply(is.na(timeseries), 1, all),,drop=FALSE] - - fun = function(l){ - pattern = y[[l]] - # Adjust columns by name if possible - #pattern = pattern[,!is.na(match(names(pattern), names(timeseries)))] - #timeseries = timeseries[,!is.na(match(names(timeseries), names(pattern)))] - - # Get day of the year - ty = index(pattern) - tx = index(timeseries) - doyy = as.numeric(format(index(pattern), "%j")) - doyx = as.numeric(format(index(timeseries), "%j")) - - - # Compute local cost matrix - phi = dist(pattern, timeseries, method=dist.method) - # Time cost matrix - psi = .g(dist(doyy, doyx, method=dist.method)) - # Weighted local cost matrix - cm = weight.fun(phi, psi) - # Compute cost matris - # xm = na.omit(cbind(doyx, as.matrix(timeseries))) - # ym = na.omit(cbind(doyy, as.matrix(pattern))) - # internals = .computecost_fast(xm, ym, step.matrix) - internals = .computecost(cm, step.matrix) - internals$timeWeight = matrix(psi, nrow = nrow(psi)) - internals$localMatrix = matrix(cm, nrow = nrow(cm)) - - # Find low cost candidates - d = internals$costMatrix[internals$N,1:internals$M] - a = internals$startingMatrix[internals$N,1:internals$M] - if(is.null(span)){ - candidates = data.frame(a, d) - candidates = candidates[ candidates$d==ave(candidates$d, candidates$a, FUN=min), ] - candidates$b = as.numeric(row.names(candidates)) - } - else { - b = .findMin(d, tx, span = span) - candidates = data.frame(a[b], d[b], b) - } - - # Order maches by similarity - I = order(candidates$d) - if(length(I)<1) return(NULL) - - # Select alignments - if(is.null(n)) n = length(I) - if(length(I) > n) I = I[1:n] - - # Remove overfit - I = I[diff(range(ty))*min.length <= tx[candidates$b[I]] - tx[candidates$a[I]]] - - alignments = initAlignments() - if(length(I)<1) return(alignments) - - alignments$label = labels[l] - alignments$from = tx[candidates$a[I]] # This is a vector of Dates - alignments$to = tx[candidates$b[I]] # This is a vector of Dates - alignments$distance = candidates$d[I] # This is a numeric vector - alignments$K = length(I) # This is an integer - alignments$matching = list() # This is a list of data.frames with the matching points - alignments$internals = list() # These is a list variables used in the TWDTW computation - if(alignments$K<1) alignments$label = numeric(0) - - if(keep){ - # Trace low cost paths (k-th paths) - alignments$matching = .tracepath(dm=internals$directionMatrix, step.matrix=step.matrix, jmin=candidates$b[I]) - alignments$internals = internals - } - alignments - } - - res = NULL - - if(length(timeseries)>3) - res = try(lapply(seq_along(labels), FUN=fun)) - - if(is(res, "try-error") | is.null(res)) - res = lapply(labels, function(l) list(label = numeric(0), from = numeric(0), to = numeric(0), distance = numeric(0), K = numeric(0), matching = list(), internals = list())) - - names(res) = labels - res -} - -initAlignments = function(...){ - list( - label = numeric(0), - from = numeric(0), - to = numeric(0), - distance = numeric(0), - K = 0, - matching = list(), - internals = list() - ) -} - -.findMin = function(x, timeline, span){ - NonNA = which(!is.na(x)) - dx = diff(x[NonNA]) - index_min = NonNA[which(dx[-length(dx)] < 0 & dx[-1] >= 0)] + 1 - if(tail(dx,1) < 0) - index_min = c(index_min,length(x)) - order_min = index_min[order(x[index_min])] - min_out = array() - for(i in seq_along(index_min)){ - min_out[i] = order_min[i] - lower_bound = timeline[order_min[i]] - span - upper_bound = timeline[order_min[i]] + span - in_span = lower_bound <= timeline[order_min] & timeline[order_min] <= upper_bound - order_min[in_span] = NA - } - res = min_out[!is.na(min_out)] - res -} - -.removeConcurrent = function(I, startPoints, endPoints, d){ - res = !(I | duplicated(startPoints, fromLast = TRUE)) - J = unlist(lapply(unique(startPoints[!res]), function(i){ - J = which(startPoints==i) - min_j = rep(FALSE, length(J)) - min_j[which.min(d[endPoints[J]])] = TRUE - min_j - })) - res[!res] = J - res -} - -# @useDynLib dtwSat g -.g = function(phi, step.matrix){ - - if(!is.loaded("g", PACKAGE = "dtwSat", type = "Fortran")) - stop("Fortran lib is not loaded") - - n = nrow(phi) - m = ncol(phi) - res = .Fortran(g, - TM = matrix(as.double(phi), n, m), - N = as.integer(n), - M = as.integer(m), - PC = as.double(366)) - res$TM -} - diff --git a/R/twdtwApply.R b/R/twdtwApply.R deleted file mode 100644 index b27e4ae..0000000 --- a/R/twdtwApply.R +++ /dev/null @@ -1,513 +0,0 @@ -#' @include methods.R -#' @title Apply TWDTW analysis -#' @name twdtwApply -#' @author Victor Maus, \email{vwmaus1@@gmail.com} -#' -#' @description This function performs a multidimensional Time-Weighted DTW -#' analysis and retrieves the matches between the temporal patterns and -#' a set of time series \insertCite{Maus:2019}{dtwSat}. -#' -#' @inheritParams twdtwClassify -#' -#' @param x An object of class twdtw*. This is the target time series. -#' Usually, it is a set of unclassified time series. -#' -#' @param y An object of class \link[dtwSat]{twdtwTimeSeries}. -#' The temporal patterns. -#' -#' @param ... Arguments to pass to \code{\link[raster]{writeRaster}} and -#' \code{\link[raster]{pbCreate}} -#' -#' @param resample Resample the patterns to have the same length. Default is TRUE. -#' See \link[dtwSat]{resampleTimeSeries} for details. -#' -#' @param length An integer. Length of patterns used with \code{patterns.length}. -#' If not declared the length of the output patterns will be the length of -#' the longest pattern. -#' -#' @param weight.fun A function. Any function that receives two matrices and -#' performs a computation on them, returning a single matrix with the same -#' dimensions. The first matrix is the DTW local cost matrix and the -#' second a matrix of the time differences in days. The function should return a -#' matrix of DTW local cost weighted by the time differences. If not declared -#' the time-weight is zero. In this case the function runs the standard version -#' of the dynamic time warping. See details. -#' -#' @param dist.method A character. Method to derive the local cost matrix. -#' Default is ''Euclidean'' see \code{\link[proxy]{dist}} in package -#' \pkg{proxy}. -#' -#' @param step.matrix See \code{\link[dtw]{stepPattern}} in package \pkg{dtw} -#' \insertCite{Giorgino:2009}{dtwSat}. -#' -#' @param n An integer. The maximun number of matches to perform. -#' NULL will return all matches. -#' -#' @param keep Preserves the cost matrix, inputs, and other internal structures. -#' Default is FALSE. For plot methods use \code{keep=TRUE}. -#' -#' @param span A number. Span between two matches, \emph{i.e.} the minimum -#' interval between two matches; for details see \insertCite{Muller:2007}{dtwSat}. -#' If not declared it removes all overlapping matches of the same pattern. To include -#' overlapping matches of the same pattern use \code{span=0}. -#' -#' @param min.length A number between 0 an 1. This argument removes overfittings. -#' Minimum length after warping. Percentage of the original pattern length. Default is 0.5, -#' meaning that the matching cannot be shorter than half of the pattern length. -#' -#' @param filepath A character. The path at which to save the raster with results. If not provided the -#' function saves in the current work directory. -#' -#' @param minrows Integer. Minimum number of rows in each block -#' -#' @param progress character. 'text' or 'window'. -#' -#' @param legacy logical. If FALSE, runs a faster new TWDTW implementation. Default FLASE -#' -#' @param alpha Numeric. The steepness of TWDTW logistic weight. -#' -#' @param beta Numeric. The midpoint of TWDTW logistic weight. -#' -#' @references -#' \insertAllCited{} -#' -#' @details The linear \code{linearWeight} and \code{logisticWeight} weight functions -#' can be passed to \code{twdtwApply} through the argument \code{weight.fun}. This will -#' add a time-weight to the dynamic time warping analysis. The time weight -#' creates a global constraint useful for analyzing time series with phenological cycles -#' of vegetation that are usually bound to seasons. In previous studies by -#' \insertCite{Maus:2016}{dtwSat} the logistic weight had better results than the -#' linear for land cover classification. -#' See \insertCite{Maus:2016,Maus:2019}{dtwSat} for details about the method. -#' -#' @return An object of class twdtw*. -#' -#' @seealso -#' \code{\link[dtwSat]{twdtwMatches-class}}, -#' \code{\link[dtwSat]{twdtwTimeSeries-class}}, -#' \code{\link[dtwSat]{twdtwRaster-class}}, -#' \code{\link[dtwSat]{getTimeSeries}}, and -#' \code{\link[dtwSat]{createPatterns}} -#' -#' @export -setGeneric(name = "twdtwApply", - def = function(x, y, resample=TRUE, length=NULL, weight.fun=function(phi, psi) phi, - dist.method="Euclidean", step.matrix = symmetric1, n=NULL, - span=NULL, min.length=0, ...) standardGeneric("twdtwApply")) - -#' @rdname twdtwApply -#' @aliases twdtwApply-twdtwTimeSeries -#' @examples -#' # Applying TWDTW analysis to objects of class twdtwTimeSeries -#' log_fun = logisticWeight(-0.1, 100) -#' ts = twdtwTimeSeries(MOD13Q1.ts.list) -#' patt = twdtwTimeSeries(MOD13Q1.patterns.list) -#' mat1 = twdtwApply(x=ts, y=patt, weight.fun=log_fun, keep=TRUE, legacy=TRUE) -#' mat1 -#' -#' \dontrun{ -#' # Parallel processin -#' require(parallel) -#' mat_list = mclapply(as.list(ts), mc.cores=2, FUN=twdtwApply, y=patt, weight.fun=log_fun) -#' mat2 = twdtwMatches(alignments=mat_list) -#' } -#' @export -setMethod(f = "twdtwApply", "twdtwTimeSeries", - def = function(x, y, resample, length, weight.fun, dist.method, step.matrix, n, span, min.length, legacy=FALSE, keep=FALSE, ...){ - if(!is(y, "twdtwTimeSeries")) - stop("y is not of class twdtwTimeSeries") - if(!is(step.matrix, "stepPattern")) - stop("step.matrix is not of class stepPattern") - if(is.null(weight.fun)) - weight.fun = function(psi) 0 - if(!is(weight.fun, "function")) - stop("weight.fun is not a function") - if(resample) - y = resampleTimeSeries(object=y, length=length) - if(legacy){ - twdtwApply.twdtwTimeSeries(x, y, weight.fun, dist.method, step.matrix, n, span, min.length, keep) - } else { - twdtwApply.twdtwTimeSeries.fast(x, y, ...) - } - - }) - -twdtwApply.twdtwTimeSeries.fast = function(x, y, ...){ - yy = lapply(y@timeseries, function(ts)cbind(data.frame(date = index(ts)), as.data.frame(ts))) - xm = lapply(x@timeseries, function(ts)twdtwReduceTime(cbind(data.frame(date = index(ts)), as.data.frame(ts)), keep = FALSE, y = yy, ...)) - lb = as.numeric(labels(y@labels)) - lv = levels(y) - names(lb) = lv - list(x = x, y = y, aligs = lapply(xm, function(al) lapply(lb, function(i){ - bm = list(label = numeric(), - from = numeric(), - to = numeric(), - distance = numeric(), - K = 0, - matching = list(), - internals = list()) - if(!any(al$label == i)){ - return(bm) - } - bm$label = lv[i] - bm$from = al$from[al$label == i] - bm$to = al$to[al$label == i] - bm$distance = al$distance[al$label == i] - bm$K = length(bm$distance) - return(bm) - }))) -} - -twdtwApply.twdtwTimeSeries = function(x, y, weight.fun, dist.method, step.matrix, n, span, min.length, keep){ - res = lapply(as.list(x), FUN = .twdtw, y, weight.fun, dist.method, step.matrix, n, span, min.length, keep) - new("twdtwMatches", timeseries=x, patterns=y, alignments=res) -} - -#' @rdname twdtwApply -#' @aliases twdtwApply-twdtwRaster -#' @example examples/test_twdtw_raster_analysis.R -#' @export -setMethod(f = "twdtwApply", "twdtwRaster", - def = function(x, y, resample, length, weight.fun, dist.method, step.matrix, n, span, min.length, - breaks=NULL, from=NULL, to=NULL, by=NULL, overlap=0.5, filepath="", fill=NULL, - legacy=FALSE, progress = "text", minrows=1, alpha = -0.1, beta = 50, ...){ - if(!is(step.matrix, "stepPattern")) - stop("step.matrix is not of class stepPattern") - if(is.null(weight.fun)) - weight.fun = function(psi) 0 - if(!is(weight.fun, "function")) - stop("weight.fun is not a function") - if( overlap < 0 & 1 < overlap ) - stop("overlap out of range, it must be a number between 0 and 1") - if(is.null(breaks)) - if( !is.null(from) & !is.null(to) ){ - breaks = seq(as.Date(from), as.Date(to), by=by) - } else { - patt_range = lapply(index(y), range) - patt_diff = trunc(sapply(patt_range, diff)/30)+1 - min_range = which.min(patt_diff) - by = patt_diff[[min_range]] - from = patt_range[[min_range]][1] - to = from - month(to) = month(to) + by - year(from) = year(range(index(x))[1]) - year(to) = year(range(index(x))[2]) - if(to0) datasets = lapply(datasets, function(x) x[-k] ) - - # Build multi-band zoo object - zoo(data.frame(datasets[-idoy]), order.by = datasets$doy) -} - -# Match and set a list of arguments to a function -.setFunArgs = function(fun, ..., args = list(...)){ - base_formals = formals(fun) - base_formals_names = names(base_formals) - given_formals = args[names(args) %in% base_formals_names] - missing_formals_names = setdiff(base_formals_names, names(args)) - new_formals = c(base_formals[missing_formals_names], given_formals) - new_formals = new_formals[base_formals_names] - formals(fun) = new_formals - fun -} diff --git a/R/twdtwAssess.R b/R/twdtwAssess.R deleted file mode 100644 index 8799427..0000000 --- a/R/twdtwAssess.R +++ /dev/null @@ -1,359 +0,0 @@ - -setGeneric("twdtwAssess", - def = function(object, ...) standardGeneric("twdtwAssess") -) - -#' @title Assess TWDTW classification -#' @name twdtwAssess -#' @author Victor Maus, \email{vwmaus1@@gmail.com} -#' -#' @description Performs an accuracy assessment -#' of the classified maps. The function returns Overall Accuracy, -#' User's Accuracy, Produce's Accuracy, error matrix (confusion matrix), -#' and estimated area according to \insertCite{Olofsson:2013,Olofsson:2014;textual}{dtwSat}. -#' The function returns the metrics for each time interval and a summary considering all -#' classified intervals. -#' -#' @param object An object of class \code{\link[dtwSat]{twdtwRaster}} resulting from -#' the classification, i.e. \code{\link[dtwSat]{twdtwClassify}}. -#' The argument can also receive an error matrix (confusion matrix) using the classes -#' \code{\link[base]{data.frame}} or \code{\link[base]{table}}. In this case the user -#' must provide the area for each class to the argument \code{area}. -#' -#' @param area A numeric vector with the area for each class if the argument \code{object} -#' is an error matrix (confusion matrix). If \code{object} is \code{\link[dtwSat]{twdtwMatches}} -#' area can be either a vector with the area of each classified object, or a single number -#' if the objects are single pixels. - -#' @param y A \code{\link[base]{data.frame}} whose attributes are: longitude, -#' latitude, the start ''from'' and the end ''to'' of the time interval -#' for each sample. This can also be a \code{\link[sp]{SpatialPointsDataFrame}} -#' whose attributes are the start ''from'' and the end ''to'' of the time interval. -#' If missing ''from'' and/or ''to'', they are set to the time range of the -#' \code{object}. -#' -#' @param id.labels A numeric or character with an column name from \code{y} to -#' be used as samples labels. Optional. -#' -#' @param labels Character vector with time series labels. For signature -#' \code{\link[dtwSat]{twdtwRaster}} this argument can be used to set the -#' labels for each sample in \code{y}, or it can be combined with \code{id.labels} -#' to select samples with a specific label. -#' -#' @param proj4string Projection string, see \code{\link[sp]{CRS-class}}. Used -#' if \code{y} is a \code{\link[base]{data.frame}}. -#' -#' @param conf.int Specifies the confidence level (0-1). -#' -#' @param rm.nosample If sum of columns and sum of rows of the error matrix are zero -#' then remove class. Default is TRUE. -#' -#' @param start_date A date. Required if there is only one map to be assessed. Usually this is the -#' first date of the timeline from satellite images. -#' -#' @references -#' \insertAllCited{} -#' -#' \insertRef{Maus:2019}{dtwSat} -#' -#' \insertRef{Maus:2016}{dtwSat} -#' -#' @seealso \code{\link[dtwSat]{twdtwClassify}}, -#' \code{\link[dtwSat]{twdtwAssessment}}, and -#' \code{\link[dtwSat]{twdtwXtable}}. -#' -NULL - -#' @aliases twdtwAssess-twdtwRaster -#' @inheritParams twdtwAssess -#' @rdname twdtwAssess -#' @example examples/test_twdtw_raster_analysis.R -#' @export -setMethod(f = "twdtwAssess", signature = "twdtwRaster", - definition = function(object, y, labels=NULL, id.labels=NULL, proj4string=NULL, conf.int=.95, rm.nosample=FALSE, start_date=NULL) - twdtwAssess.twdtwRaster(object, y, labels, id.labels, proj4string, conf.int, rm.nosample, start_date)) - -#' @aliases twdtwAssess-data.frame -#' @inheritParams twdtwAssess -#' @rdname twdtwAssess -#' @export -setMethod(f = "twdtwAssess", signature = "data.frame", - definition = function(object, area, conf.int=.95, rm.nosample=TRUE) - twdtwAssess.table(object, area, conf.int, rm.nosample)) - -#' @aliases twdtwAssess-table -#' @inheritParams twdtwAssess -#' @rdname twdtwAssess -#' @export -setMethod(f = "twdtwAssess", signature = "table", - definition = function(object, area, conf.int=.95, rm.nosample=TRUE) - twdtwAssess(as.data.frame.matrix(object), area, conf.int, rm.nosample)) - -#' @aliases twdtwAssess-matrix -#' @inheritParams twdtwAssess -#' @rdname twdtwAssess -#' -#' @examples -#' -#' # Total mapped area by class. Data from [1] -#' area = c(A = 22353, B = 1122543, C = 610228) -#' -#' # Error matrix, columns (Reference) rows (Map) -#' x = -#' rbind( -#' c( 97, 0, 3), -#' c( 3, 279, 18), -#' c( 2, 1, 97) -#' ) -#' -#' table_assess = twdtwAssess(x, area, conf.int = .95) -#' -#' table_assess -#' -#' plot(table_assess, type="area", perc=FALSE) -#' -#' plot(table_assess, type="accuracy") -#' -#' @export -setMethod(f = "twdtwAssess", signature = "matrix", - definition = function(object, area, conf.int=.95, rm.nosample=TRUE) - twdtwAssess(as.data.frame.matrix(object), area, conf.int, rm.nosample)) - -#' @aliases twdtwAssess-twdtwMatches -#' @inheritParams twdtwAssess -#' @rdname twdtwAssess -#' @example examples/test_twdtw_raster_analysis.R -#' @export -setMethod(f = "twdtwAssess", signature = "twdtwMatches", - definition = function(object, area, conf.int=.95, rm.nosample=TRUE) - twdtwAssess.twdtwTimeSeries(object, area, conf.int, rm.nosample)) - -twdtwAssess.twdtwTimeSeries = function(object, area, conf.int, rm.nosample){ - - df = do.call("rbind", lapply(object[], function(xx) xx[which.min(xx$distance),]) ) - - ref = labels(object)$timeseries - - pred = as.character(df$label) - - data = data.frame(.adjustFactores(ref, pred, levels=NULL, labels=NULL), df[,!names(df)%in%"labels"]) - - error_matrix = table(Predicted=data$Predicted, Reference=data$Reference) - - if(length(area)==1) - a = rep(area, length(object@timeseries)) - - a = aggregate(x = a, by = list(pred), FUN = sum) - - area = a$x - - names(area) = a$Group.1 - - res = .twdtwAssess(error_matrix, area, conf.int, rm.nosample) - - new("twdtwAssessment", accuracySummary=res) -} - -twdtwAssess.table = function(object, area, conf.int, rm.nosample){ - - if(ncol(object)!=nrow(object)) - stop("object has have the same number of rows and columns") - - if(nrow(object)!=length(area)) - stop("area must have length equal to the number of rows in object") - - accuracy = .twdtwAssess(object, area, conf.int, rm.nosample) - - new("twdtwAssessment", accuracySummary=accuracy, accuracyByPeriod=accuracy) -} - -twdtwAssess.twdtwRaster = function(object, y, labels, id.labels, proj4string, conf.int, rm.nosample, start_date){ - - if(rm.nosample) - warning("The argument rm.nosample is obsolete and will be removed in the next package release") - - # Check control points - y = .adjustLabelID(y, labels, id.labels) - if(!"from"%in%names(y) || !"to"%in%names(y)) - stop("Argument 'y' must contain columns called 'to' and 'from' to locate start and end dates") - y = .toSpatialPointsDataFrame(y, object, proj4string) - - # Get classified raster - x = object@timeseries$Class - x_twdtw = object@timeseries$Distance - - # Reproject points to raster projection - y = spTransform(y, CRS(projection(object@timeseries[[1]]))) - - # Remove samples outside raster bbox - n_s <- length(y) - y <- intersect(y, x) - if(n_s > length(y)){ - warning(cat(n_s - length(y), "samples out of bounds removed")) - } - if(length(y) < 1){ - stop(cat(n_s - length(y), "samples out of bounds removed. There are no samples intersecting the study area")) - } - - # Get time intervals - timeline = index(object) - if(length(timeline) < 2){ - if(is.null(start_date)){ - stop("The classification assessment requires matching time intervals. - If there is only one map please provide the starting date of the map interval - using the argument 'start_date'") - } - timeline = c(as.Date(start_date), timeline) - } else { - timeline = c(timeline[1] - diff(timeline[1:2]) - 1, timeline) - } - - r_intervals = data.frame(from=timeline[-length(timeline)], to=timeline[-1]) - - # Get land use/cover classes - rnames = labels(object) - rlevels = levels(object) - - # Compute mapped area of each class by classification interval - a_by_interval = lapply(1:nlayers(x), FUN = .getAreaByClass, x, rlevels, rnames) - - # Compute total mapped area by class - area_by_class = do.call("rbind", a_by_interval) - area_by_class = colSums(area_by_class) - - # Get classified and predicted land cover/use classes for each control point - pred_classes = extract(x, y) - pred_distance = extract(x_twdtw, y) - samples_by_period = lapply(1:nrow(r_intervals), FUN = .getPredRefClasses, r_intervals, pred_classes, pred_distance, y, rlevels, rnames) - samples_all = do.call("rbind", samples_by_period) - - # Compute error matrix - error_matrix_by_period = lapply(1:nrow(r_intervals), function(i) table(samples_by_period[[i]][,c("Predicted","Reference")])) - error_matrix_summary = table(samples_all[,c("Predicted","Reference")]) - - # Compute accuracy assessment - accuracy_by_period = lapply(seq_along(error_matrix_by_period), function(i) - .twdtwAssess(x = error_matrix_by_period[[i]], a_by_interval[[i]], conf.int=conf.int, rm.nosample=FALSE)) - names(accuracy_by_period) = index(object) - accuracy_summary = .twdtwAssess(error_matrix_summary, area_by_class, conf.int=conf.int, rm.nosample=FALSE) - - sp.data = SpatialPointsDataFrame(coords = samples_all[,c("longitude", "latitude")], - data = samples_all[,!names(samples_all)%in%c("longitude", "latitude")], - proj4string = CRS(projection(object@timeseries[[1]]))) - - new("twdtwAssessment", accuracySummary = accuracy_summary, - accuracyByPeriod = accuracy_by_period, - data = sp.data, - map = object) - -} - -.twdtwAssess = function(x, mapped_area, conf.int, rm.nosample){ - - if(nrow(x)<1) - return(NULL) - - mult = qnorm(1-(1-conf.int)/2, mean = 0, sd = 1) - - cnames = names(mapped_area) - rownames(x) = cnames - names(x) = cnames - - total_map = rowSums(x) - total_ref = colSums(x) - total_area = sum(mapped_area) - total_samples = sum(total_ref) - - if(rm.nosample){ - I = total_ref>0 | total_map>0 - x = x[I,I] - cnames = cnames[I] - total_map = total_map[I] - total_ref = total_ref[I] - mapped_area = mapped_area[I] - total_area = sum(mapped_area) - total_samples = sum(total_ref) - } - - # Weight - w = mapped_area / total_area - - # Error matrix - error_matrix = cbind(x, Total=total_map, Area=mapped_area, w=w) - error_matrix = rbind(error_matrix, Total = colSums(error_matrix)) - - # Proportions - y = t(apply(error_matrix[!rownames(error_matrix)%in%"Total",], 1, function(x) (x[cnames] / x["Total"]) * x["w"])) - y[total_map==0,] = 0 - total_prop_map = rowSums(y, na.rm = TRUE) - total_prop_ref = colSums(y, na.rm = TRUE) - - # Proportions matrix - prop_matrix = cbind(y, Total = total_prop_map, Area = mapped_area, w = w) - prop_matrix = rbind(prop_matrix, Total = colSums(prop_matrix, na.rm = TRUE)) - - # Accuracy - UA = as.numeric(diag(as.matrix(prop_matrix[cnames,cnames])) / prop_matrix[cnames,"Total"]) - UA[total_map==0] = 1 - names(UA) = cnames - - PA = as.numeric(diag(as.matrix(prop_matrix[cnames,cnames])) / prop_matrix["Total",cnames]) - PA[total_ref==0] = 1 - names(PA) = cnames - OA = sum(diag(as.matrix(prop_matrix[cnames,cnames])), na.rm = TRUE) - - temp = w^2*UA*(1-UA)/(total_map-1) - - VO = sum(temp, na.rm = TRUE) - SO = sqrt(VO) - OCI = SO * mult - - VU = UA*(1-UA)/(total_map-1) - SU = sqrt(VU) - UCI = SU * mult - - fun1 = function(x, xt, Area){ - sum(Area*x/xt, na.rm = TRUE) - } - - fun2 = function(i, x, xt, Area, PA){ - x = as.numeric(x[,i]) - x = x[-i] - xt = xt[-i] - Area = Area[-i] - PA = PA[i] - PA^2*sum(Area^2*x/xt*(1-x/xt)/(xt-1), na.rm = TRUE) - } - - Nj = apply(x, 2, fun1, total_map, mapped_area) - expr1 = mapped_area^2*(1-PA)^2*UA*(1-UA)/(total_map-1) - expr2 = sapply(1:nrow(x), fun2, x=x, xt=total_map, Area=mapped_area, PA=PA) - VP = (1/sapply(Nj, function(x) ifelse(x==0, 1, x))^2)*(expr1+expr2) - SP = sapply(VP, function(x) ifelse(x==0, 0, sqrt(x))) - PCI = SP * mult - - # Compute adjusted area - estimated_area = prop_matrix["Total",cnames] * prop_matrix["Total","Area"] - sd_error = apply(prop_matrix[cnames,cnames], 2, function(x) sqrt(sum( (prop_matrix[cnames,"w"]*x[cnames]-x[cnames]^2)/(error_matrix[cnames,"Total"]-1) )) ) - sd_error_estimated_area = sd_error * prop_matrix["Total","Area"] - CI_estimated_area = sd_error_estimated_area * mult - - res = list(OverallAccuracy = c(Accuracy=OA, Var=VO, sd=SO, ci=OCI), - UsersAccuracy = cbind(Accuracy=UA, Var=VU, sd=SU, ci=UCI), - ProducersAccuracy = cbind(Accuracy=PA, Var=VP, sd=SP, ci=PCI), - AreaUncertainty = cbind(Mapped=c(prop_matrix[cnames,"Area"]), - Adjusted=c(estimated_area), - ci=c(CI_estimated_area)), - ErrorMatrix = error_matrix, - ProportionMatrix = prop_matrix, - conf.int = conf.int - ) - - res - -} - - - - - diff --git a/R/twdtwClassify.R b/R/twdtwClassify.R deleted file mode 100644 index 7c47619..0000000 --- a/R/twdtwClassify.R +++ /dev/null @@ -1,281 +0,0 @@ -############################################################### -# # -# (c) Victor Maus # -# Institute for Geoinformatics (IFGI) # -# University of Muenster (WWU), Germany # -# # -# Earth System Science Center (CCST) # -# National Institute for Space Research (INPE), Brazil # -# # -# # -# R Package dtwSat - 2016-01-16 # -# # -############################################################### - - -#' @include methods.R -#' @title Classify time series -#' @name twdtwClassify -#' @author Victor Maus, \email{vwmaus1@@gmail.com} -#' -#' @description This function classifies the intervals of a time series -#' based on the TWDTW results. -#' -#' @inheritParams twdtwReduceTime -#' -#' @param x An object of class twdtw*. This is the target time series. -#' Usually, it is a set of unclassified time series. -#' -#' @param from A character or \code{\link[base]{Dates}} object in the format "yyyy-mm-dd". -#' -#' @param to A \code{\link[base]{character}} or \code{\link[base]{Dates}} object in the format "yyyy-mm-dd". -#' -#' @param by A \code{\link[base]{character}} with the interval size, \emph{e.g.} "6 month". -#' -#' @param breaks A vector of class \code{\link[base]{Dates}}. This replaces the arguments \code{from}, -#' \code{to}, and \code{by}. -#' -#' @param overlap A number between 0 and 1. The minimum overlapping -#' between one match and the interval of classification. Default is 0.5, -#' \emph{i.e.} an overlap minimum of 50\%. -#' -#' @param patterns.labels a vector with labels of the patterns. -#' -#' @param thresholds A numeric vector the same length as \code{patterns.labels}. -#' The TWDTW dissimilarity thresholds, i.e. the maximum TWDTW cost for consideration -#' in the classification. Default is \code{Inf} for all \code{patterns.labels}. -#' -#' @param fill A character to fill the classification gaps. -#' For signature \code{twdtwTimeSeries} the default is \code{fill="unclassified"}, -#' for signature \code{twdtwRaster} the default is \code{fill="unclassified"}. -#' -#' @param filepath A character. The path at which to save the raster with results. -#' If not provided the function saves in the same directory as the input time series raster. -#' -#' @param ... Arguments to pass to specific methods for each twdtw* class -#' and other arguments to pass to \code{\link[raster]{writeRaster}} and -#' \code{\link[raster]{pbCreate}}. If \code{x} of -#' \code{\link[dtwSat]{twdtwTimeSeries-class}} additional arguments passed to -#' \code{\link[dtwSat]{twdtwApply}}. -#' -#' @return An object of class twdtw*. -#' -#' @seealso -#' \code{\link[dtwSat]{twdtwApply}}, -#' \code{\link[dtwSat]{twdtwMatches-class}}, -#' \code{\link[dtwSat]{twdtwTimeSeries-class}}, and -#' \code{\link[dtwSat]{twdtwRaster-class}}, -#' -#' @references -#' \insertRef{Maus:2019}{dtwSat} -#' -#' \insertRef{Maus:2016}{dtwSat} -#' -#' @export -setGeneric(name = "twdtwClassify", - def = function(x, ...) standardGeneric("twdtwClassify")) - - -#' @rdname twdtwClassify -#' @aliases twdtwClassify-data.frame -#' @example examples/test_twdtw_raster_analysis.R -#' @export -setMethod(f = "twdtwClassify", "data.frame", - def = function(x, y, step.matrix=symmetric1, breaks=NULL, from=NULL, to=NULL, by=NULL, - overlap=0.5,fill=length(y),alpha=-0.1,beta=50,time.window=FALSE, keep=FALSE, ...){ - twdtwReduceTime(x=x, y=y, step.matrix=step.matrix, breaks=breaks, from=from, to=to, by=by, - overlap=overlap,fill=fill,alpha=alpha,beta=beta,time.window=time.window,keep=keep, ...) - }) - -#' @rdname twdtwClassify -#' @aliases twdtwClassify-list -#' @example examples/test_twdtw_raster_analysis.R -#' @export -setMethod(f = "twdtwClassify", "list", - def = function(x, y, step.matrix=symmetric1, breaks=NULL, from=NULL, to=NULL, by=NULL, - overlap=0.5,fill=length(y),alpha=-0.1,beta=50,time.window=FALSE, keep=FALSE, ...){ - lapply(x, FUN = twdtwReduceTime, y=y, step.matrix=step.matrix, breaks=breaks, from=from, to=to, by=by, - overlap=overlap,fill=fill,alpha=alpha,beta=beta,time.window=time.window,keep=keep, ...) - }) - -#' @rdname twdtwClassify -#' @aliases twdtwClassify-twdtwTimeSeries -#' @example examples/test_twdtw_raster_analysis.R -#' @export -setMethod("twdtwClassify", "twdtwTimeSeries", - function(x, patterns.labels=NULL, from=NULL, to=NULL, by=NULL, breaks=NULL, - overlap=.5, thresholds=Inf, fill="unclassified", ...){ - xm = twdtwApply(x = x, from = from, to = to, by = by, breaks = breaks, ...) - if(is(xm, "twdtwMatches")){ - x = xm - if(is.null(patterns.labels)) patterns.labels = labels(x@patterns) - if( overlap < 0 & 1 < overlap ) - stop("overlap out of range, it must be a number between 0 and 1") - if(is.null(breaks)) - if( !is.null(from) & !is.null(to) ){ - breaks = seq(as.Date(from), as.Date(to), by=by) - } else { - # These automatic breaks needs to be improved - y = x@patterns - patt_range = lapply(index(y), range) - patt_diff = trunc(sapply(patt_range, diff)/30)+1 - min_range = which.min(patt_diff) - by = patt_diff[[min_range]] - cycles = c(18,12,6,4,3,2) - by = cycles[which.min(abs(by-cycles))] - from = patt_range[[min_range]][1] - to = from - month(to) = month(to) + by - dates = as.Date(unlist(index(x@timeseries))) - year(from) = year(min(dates)) - year(to) = year(max(dates)) - breaks = seq(from, to, paste(by,"month")) - } - breaks = as.Date(breaks) - twdtwClassify.twdtwMatches(x, patterns.labels=patterns.labels, breaks=breaks, - overlap=overlap, thresholds=thresholds, fill=fill) - } else { - new("twdtwMatches", timeseries=xm$x, patterns=xm$y, alignments=xm$aligs) - } - }) - -#' @rdname twdtwClassify -#' @aliases twdtwClassify-twdtwTimeSeries -#' @example examples/test_twdtw_raster_analysis.R -#' @export -setMethod("twdtwClassify", "twdtwMatches", - function(x, patterns.labels=NULL, from=NULL, to=NULL, by=NULL, breaks=NULL, - overlap=.5, thresholds=Inf, fill="unclassified"){ - if(is.null(patterns.labels)) patterns.labels = labels(x@patterns) - if( overlap < 0 & 1 < overlap ) - stop("overlap out of range, it must be a number between 0 and 1") - if(is.null(breaks)) - if( !is.null(from) & !is.null(to) ){ - breaks = seq(as.Date(from), as.Date(to), by=by) - } else { - # These automatic breaks needs to be improved - y = x@patterns - patt_range = lapply(index(y), range) - patt_diff = trunc(sapply(patt_range, diff)/30)+1 - min_range = which.min(patt_diff) - by = patt_diff[[min_range]] - cycles = c(18,12,6,4,3,2) - by = cycles[which.min(abs(by-cycles))] - from = patt_range[[min_range]][1] - to = from - month(to) = month(to) + by - dates = as.Date(unlist(index(x@timeseries))) - year(from) = year(min(dates)) - year(to) = year(max(dates)) - breaks = seq(from, to, paste(by,"month")) - } - breaks = as.Date(breaks) - twdtwClassify.twdtwMatches(x, patterns.labels=patterns.labels, breaks=breaks, - overlap=overlap, thresholds=thresholds, fill=fill) - }) - -#' @rdname twdtwClassify -#' @aliases twdtwClassify-twdtwRaster -#' @example examples/test_twdtw_raster_analysis.R -setMethod("twdtwClassify", "twdtwRaster", - function(x, patterns.labels=NULL, thresholds=Inf, fill=255, filepath="", ...){ - if(is.null(patterns.labels)) patterns.labels = coverages(x) - patterns.labels = patterns.labels[!patterns.labels%in%"doy"] - twdtwClassify.twdtwRaster(x, patterns.labels=patterns.labels, thresholds=thresholds, fill=fill, filepath=filepath, ...) - }) - -twdtwClassify.twdtwRaster = function(x, patterns.labels, thresholds, fill, filepath, ...){ - - if(thresholds == Inf) { - thresholds = 9999 - } - - levels = c(seq_along(patterns.labels), fill) - labels = c(patterns.labels, "unclassified") - - # Create output raster objects - class_b <- brick(x@timeseries[[1]], nl = length(index(x)), values = FALSE) - distance_b <- brick(x@timeseries[[1]], nl = length(index(x)), values = FALSE) - class_vv <- matrix(class_b, ncol = nlayers(class_b)) - distance_vv <- matrix(distance_b, ncol = nlayers(distance_b)) - names(class_b) = paste0("date.",index(x)) - names(distance_b) = paste0("date.",index(x)) - - filepath <- trim(filepath) - filename <- NULL - if (filepath != "") { - dir.create(path = filepath, showWarnings = TRUE, recursive = TRUE) - filename <- paste0(filepath, "/", c("Class", "Distance"), ".grd") - names(filename) <- c("Class", "Distance") - } else if (!canProcessInMemory(class_b, n = length(x@timeseries) + 2)) { - filename <- c(rasterTmpFile("Class"), rasterTmpFile("Distance")) - } - - if (!is.null(filename)) { - class_b <- writeStart(class_b, filename = filename[1], ...) - distance_b <- writeStart(distance_b, filename = filename[2], ...) - } - - bs <- blockSize(x@timeseries[[1]]) - bs$array_rows <- cumsum(c(1, bs$nrows * class_b@ncols)) - pb <- pbCreate(bs$n, ...) - - for(k in 1:bs$n){ - - v <- lapply(x@timeseries[patterns.labels], getValues, row = bs$row[k], nrows = bs$nrows[k]) - rows <- seq(from = bs$array_rows[k], by = 1, length.out = bs$nrows[k]*class_b@ncols) - - for(i in seq_along(index(x))) { - - r <- sapply(v, function(vv) vv[, i]) - d <- apply(r, 1, min) - dc <- apply(r, 1, which.min) - dc[which(d[]>=thresholds)] = fill - class_vv[rows, i] <- dc - distance_vv[rows, i] <- d - } - - if (!is.null(filename)) { - writeValues(class_b, class_vv[rows, ], bs$row[k]) - writeValues(distance_b, distance_vv[rows, ], bs$row[k]) - } - - pbStep(pb, k) - - } - - if (!is.null(filename)) { - class_b <- writeStop(class_b) - distance_b <- writeStop(distance_b) - } else { - class_b <- setValues(class_b, values = class_vv) - distance_b <- setValues(distance_b, values = distance_vv) - } - - pbClose(pb) - - twdtwRaster(Class = class_b, Distance = distance_b, ..., timeline = index(x), - labels = labels, levels = levels, filepath = filepath) - -} - -twdtwClassify.twdtwMatches = function(x, patterns.labels, breaks, overlap, thresholds, fill){ - levels = as.character(patterns.labels) - names(levels) = levels - m = length(levels) - n = length(breaks)-1 - aligs = lapply(as.list(x), FUN=.bestIntervals, m=m, n=n, levels=levels, breaks=breaks, overlap=overlap) - twdtwMatches(x@timeseries, patterns=x@patterns, alignments=aligs) -} - -.bestIntervals = function(x, m, n, levels, breaks, overlap) -{ - best_matches = .bestmatches(x, m, n, levels, breaks, overlap)$IM - IL = best_matches[,1] - I = unique(best_matches[,1]) - I = I[I>0] - names(I) = levels[I] - aligs = lapply(levels, initAlignments) - aligs[names(I)] = lapply(I, function(i) subset(x, timeseries.labels = 1, patterns.labels = i, k = best_matches[IL==i,3])@alignments[[1]][[1]] ) - new("twdtwMatches", x@timeseries, x@patterns, alignments=list(aligs)) -} diff --git a/R/twdtwCrossValidate.R b/R/twdtwCrossValidate.R deleted file mode 100644 index bb91e93..0000000 --- a/R/twdtwCrossValidate.R +++ /dev/null @@ -1,117 +0,0 @@ - -setGeneric("twdtwCrossValidate", - def = function(object, ...) standardGeneric("twdtwCrossValidate") -) - -#' @title Cross Validate temporal patterns -#' @name twdtwCrossValidate -#' @author Victor Maus, \email{vwmaus1@@gmail.com} -#' -#' @description Splits the set of time series into training and validation and -#' computes accuracy metrics. The function uses stratified sampling and a simple -#' random sampling for each stratum. For each data partition this function -#' performs a TWDTW analysis and returns the Overall Accuracy, User's Accuracy, -#' Produce's Accuracy, error matrix (confusion matrix), and a \code{\link[base]{data.frame}} -#' with the classification (Predicted), the reference classes (Reference), -#' and the results of the TWDTW analysis. -#' -#' @param object An object of class \code{\link[dtwSat]{twdtwTimeSeries}}. -#' -#' @param times Number of partitions to create. -#' -#' @param p The percentage of data that goes to training. -#' See \code{\link[caret]{createDataPartition}} for details. -#' -#' @param ... Other arguments to be passed to \code{\link[dtwSat]{createPatterns}} and -#' to \code{\link[dtwSat]{twdtwApply}}. -#' -#' @references -#' \insertRef{Maus:2019}{dtwSat} -#' -#' \insertRef{Maus:2016}{dtwSat} -#' -#' @examples -#' \dontrun{ -#' # Data folder -#' data_folder = system.file("lucc_MT/data", package = "dtwSat") -#' -#' # Read dates -#' dates = scan(paste(data_folder,"timeline", sep = "/"), what = "dates") -#' -#' # Read raster time series -#' evi = brick(paste(data_folder,"evi.tif", sep = "/")) -#' raster_timeseries = twdtwRaster(evi, timeline = dates) -#' -#' # Read field samples -#' field_samples = read.csv(paste(data_folder,"samples.csv", sep = "/")) -#' table(field_samples[["label"]]) -#' -#' # Read field samples projection -#' proj_str = scan(paste(data_folder,"samples_projection", sep = "/"), -#' what = "character") -#' -#' # Get sample time series from raster time series -#' field_samples_ts = getTimeSeries(raster_timeseries, -#' y = field_samples, proj4string = proj_str) -#' field_samples_ts -#' -#' # Run cross validation -#' set.seed(1) -#' # Define TWDTW weight function -#' log_fun = logisticWeight(alpha=-0.1, beta=50) -#' cross_validation = twdtwCrossValidate(field_samples_ts, times=3, p=0.1, -#' freq = 8, formula = y ~ s(x, bs="cc"), weight.fun = log_fun) -#' cross_validation -#' -#' summary(cross_validation) -#' -#' plot(cross_validation) -#' -#' twdtwXtable(cross_validation) -#' -#' twdtwXtable(cross_validation, show.overall=FALSE) -#' -#' } -NULL - -#' @aliases twdtwCrossValidate-twdtwTimeSeries -#' @inheritParams twdtwCrossValidate -#' @rdname twdtwCrossValidate -#' @export -setMethod(f = "twdtwCrossValidate", signature = "twdtwTimeSeries", - definition = function(object, times, p, ...) twdtwCrossValidate.twdtwTimeSeries(object, times, p, ...)) - -twdtwCrossValidate.twdtwTimeSeries = function(object, times, p, ...){ - - partitions = createDataPartition(y = labels(object), times, p, list = TRUE) - - res = lapply(partitions, function(I){ - training_ts = subset(object, I) - validation_ts = subset(object, -I) - patt = createPatterns(training_ts, ...) - twdtw_res = twdtwApply(x = validation_ts, y = patt, n=1, ...) - df = do.call("rbind", lapply(twdtw_res[], function(xx) { - i = which.min(xx$distance) - if(length(i)<1) - return(data.frame(Alig.N=NA, from=NA, to=NA, distance=NA, label = "Unclassified")) - xx[i,] - })) - ref = labels(twdtw_res)$timeseries - pred = df$label - data = data.frame(.adjustFactores(ref, pred, levels=NULL, labels=NULL), df[,!names(df)%in%"labels"]) - error.matrix = table(Predicted=data$Predicted, Reference=data$Reference) - UA = diag(error.matrix) / rowSums(error.matrix) - PA = diag(error.matrix) / colSums(error.matrix) - O = sum(diag(error.matrix)) / sum(rowSums(error.matrix)) - list(OverallAccuracy=O, UsersAccuracy=UA, ProducersAccuracy=PA, ErrorMatrix=error.matrix, data=data) - }) - - new("twdtwCrossValidation", partitions=partitions, accuracy=res) - -} - - - - - - diff --git a/R/twdtwDist.R b/R/twdtwDist.R deleted file mode 100644 index 187c399..0000000 --- a/R/twdtwDist.R +++ /dev/null @@ -1,11 +0,0 @@ - -.twdtwDist = function (x, y, ...) { - d = do.call("rbind", lapply(x, function (xx) { - sapply(y, function (yy) { - res = twdtwApply(twdtwTimeSeries(xx), twdtwTimeSeries(yy), n=1, ...) - res[[1]]$distance[1] - }) - })) - as.matrix(d) -} - diff --git a/R/twdtwXtable.R b/R/twdtwXtable.R deleted file mode 100644 index fb1c98f..0000000 --- a/R/twdtwXtable.R +++ /dev/null @@ -1,302 +0,0 @@ -setGeneric("twdtwXtable", - def = function(object, ...) standardGeneric("twdtwXtable") -) - -#' @title LaTeX table from accuracy metrics -#' @name twdtwXtable -#' @author Victor Maus, \email{vwmaus1@@gmail.com} -#' -#' @description Creates LaTeX table from accuracy metrics -#' -#' @inheritParams twdtwAssessment-class -#' -#' @param table.type Table type, 'accuracy' for User's and Producer's Accuracy, -#' 'errormatrix' for error matrix, and 'area' for area and uncertainty. -#' Default is 'accuracy'. -#' -#' @param time.labels A character or numeric for the time period or NULL to -#' include all classified periods. Default is NULL. -#' -#' @param category.name A character vector defining the class names. If NULL -#' the class names in the object \code{x} are used. Default is NULL. -#' -#' @param category.type A character defining the categories type "numeric" -#' or "letter", if NULL the class names are used. Default is NULL. -#' -#' @param show.prop If TRUE shows the estimated proportion of area. -#' Used with \code{table.type='accuracy'}. Default is TRUE. -#' -#' @param show.overall If TRUE shows the overall accuracy of the cross-validation. -#' Default is TRUE. -#' -#' @param rotate.col Rotate class column names in latex table. Default is FALSE. -#' -#' @param caption The table caption. -#' -#' @param digits Number of digits to show. -#' -#' @param conf.int Specifies the confidence level (0-1). -#' -#' @param show.footnote Show confidence interval in the footnote. -#' -#' @param ... Other arguments to pass to \code{\link[xtable]{print.xtable}}. -#' -#' @seealso \code{\link[dtwSat]{twdtwAssess}} and -#' \code{\link[dtwSat]{twdtwAssessment}}. -#' -#' @references -#' \insertRef{Maus:2019}{dtwSat} -#' -#' \insertRef{Maus:2016}{dtwSat} -#' -#' @examples -#' \dontrun{ -#' -#' # Create raster time series -#' evi = brick(system.file("lucc_MT/data/evi.tif", package="dtwSat")) -#' ndvi = brick(system.file("lucc_MT/data/ndvi.tif", package="dtwSat")) -#' red = brick(system.file("lucc_MT/data/red.tif", package="dtwSat")) -#' blue = brick(system.file("lucc_MT/data/blue.tif", package="dtwSat")) -#' nir = brick(system.file("lucc_MT/data/nir.tif", package="dtwSat")) -#' mir = brick(system.file("lucc_MT/data/mir.tif", package="dtwSat")) -#' doy = brick(system.file("lucc_MT/data/doy.tif", package="dtwSat")) -#' timeline = scan(system.file("lucc_MT/data/timeline", package="dtwSat"), what="date") -#' rts = twdtwRaster(evi, ndvi, red, blue, nir, mir, timeline = timeline, doy = doy) -#' -#' # Read field samples -#' field_samples = read.csv(system.file("lucc_MT/data/samples.csv", package="dtwSat")) -#' proj_str = scan(system.file("lucc_MT/data/samples_projection", -#' package="dtwSat"), what = "character") -#' -#' # Split samples for training (10%) and validation (90%) using stratified sampling -#' library(caret) -#' set.seed(1) -#' I = unlist(createDataPartition(field_samples$label, p = 0.1)) -#' training_samples = field_samples[I,] -#' validation_samples = field_samples[-I,] -#' -#' # Create temporal patterns -#' training_ts = getTimeSeries(rts, y = training_samples, proj4string = proj_str) -#' temporal_patterns = createPatterns(training_ts, freq = 8, formula = y ~ s(x)) -#' -#' # Run TWDTW analysis for raster time series -#' log_fun = weight.fun=logisticWeight(-0.1,50) -#' r_twdtw = twdtwApply(x=rts, y=temporal_patterns, weight.fun=log_fun, format="GTiff", -#' overwrite=TRUE) -#' -#' # Classify raster based on the TWDTW analysis -#' r_lucc = twdtwClassify(r_twdtw, format="GTiff", overwrite=TRUE) -#' plot(r_lucc) -#' -#' # Assess classification -#' twdtw_assess = twdtwAssess(object = r_lucc, y = validation_samples, -#' proj4string = proj_str, conf.int=.95) -#' twdtw_assess -#' -#' # Create latex tables -#' twdtwXtable(twdtw_assess, table.type="errormatrix", rotate.col=TRUE, -#' caption="Error matrix", digits=2, comment=FALSE) -#' twdtwXtable(twdtw_assess, table.type="accuracy", category.type="letter", -#' caption="Accuracy metrics.") -#' twdtwXtable(twdtw_assess, table.type="area", category.type="letter", -#' digits = 0, caption="Area and uncertainty") -#' -#' } -NULL - -#' @aliases twdtwXtable-twdtwAssessment -#' @inheritParams twdtwXtable -#' @rdname twdtwXtable -#' @export -setMethod("twdtwXtable", - signature = signature(object = "twdtwAssessment"), - definition = function(object, table.type="accuracy", show.prop=TRUE, category.name=NULL, - category.type=NULL, rotate.col=FALSE, time.labels=NULL, - caption = NULL, digits = 2, show.footnote=TRUE, ...){ - y = object@accuracySummary - if(!is.null(time.labels)) - y = object@accuracyByPeriod[[time.labels]] - if(is.null(y)) - stop("time.labels out of bounds", call. = TRUE) - n = nrow(object@accuracySummary$ProportionMatrix) - 1 - if(is.null(category.name)) - category.name = rownames(object@accuracySummary$ProportionMatrix)[-(n+1)] - if(!is.null(category.type)) - category.name = switch(pmatch(category.type,c("numeric","letter")), - as.character(seq(1:n)), - LETTERS[1:n] - ) - category.colname = category.name - if(rotate.col) - category.colname = paste0("\\rotatebox[origin=l]{90}{",category.colname,"}") - pt = pmatch(table.type,c("accuracy","matrix","area","errormatrix")) - switch(pt, - .xtable.accuracy(x=y, category.name, category.colname, show.prop, caption, digits, show.footnote, ...), - .xtable.matrix(x=y, category.name, category.colname, caption, digits, ...), - .xtable.area(x=y, category.name, caption, digits, show.footnote, ...), - .xtable.matrix(x=y, category.name, category.colname, caption, digits, ...) - ) - } -) - -#' @aliases twdtwXtable-twdtwCrossValidation -#' @inheritParams twdtwXtable -#' @rdname twdtwXtable -#' @export -setMethod("twdtwXtable", - signature = signature(object = "twdtwCrossValidation"), - definition = function(object, conf.int=.95, show.overall=TRUE, - category.name=NULL, category.type=NULL, caption = NULL, digits = 2, show.footnote=TRUE, ...){ - y = summary(object, conf.int = conf.int) - n = nrow(y$Users) - if(is.null(category.name)) - category.name = rownames(y$Users) - if(!is.null(category.type)) - category.name = switch(pmatch(category.type,c("numeric","letter")), - as.character(seq(1:n)), - LETTERS[1:n] - ) - .xtable.crossvalidation(x=y, category.name, show.overall, conf.int, caption, digits, show.footnote, ...) - } -) - -.xtable.crossvalidation = function(x, category.name, show.overall, conf.int, caption, digits, show.footnote, ...){ - - ua = sprintf(paste0("%.",digits,"f"), round(x$Users[["Accuracy"]],digits)) - ua_sd = sprintf(paste0("(%.",digits,"f)"), round(x$Users[["sd"]],digits)) - ua_ci = sprintf(paste0("[%.",digits,"f-%.",digits,"f]"), round(x$Users[["CImin"]],digits), round(x$Users[["CImax"]],digits)) - - pa = sprintf(paste0("%.",digits,"f"), round(x$Producers[["Accuracy"]],digits)) - pa_sd = sprintf(paste0("(%.",digits,"f)"), round(x$Producers[["sd"]],digits)) - pa_ci = sprintf(paste0("[%.",digits,"f-%.",digits,"f]"), round(x$Producers[["CImin"]],digits), round(x$Producers[["CImax"]],digits)) - - tbl = data.frame(ua, ua_sd, ua_ci, pa, pa_sd, pa_ci) - table_columns = " & \\multicolumn{3}{c}{User's} & \\multicolumn{3}{c}{Producer's}" - n = 2 - - if(show.overall){ - oa = sprintf(paste0("%.",digits,"f"), round(x$Overall[["Accuracy"]],digits)) - oa_sd = sprintf(paste0("(%.",digits,"f)"), round(x$Overall[["sd"]],digits)) - oa_ci = sprintf(paste0("[%.",digits,"f-%.",digits,"f]"), round(x$Overall[["CImin"]],digits), round(x$Overall[["CImax"]],digits)) - - tbl$oa = "" - tbl$oa_sd = "" - tbl$oa_ci = "" - - tbl$oa[1] = oa - tbl$oa_sd[1] = oa_sd - tbl$oa_ci[1] = oa_ci - - table_columns = paste0(table_columns, " & \\multicolumn{3}{c}{Overall}") - n = 3 - } - - comment = list() - comment$pos = list() - comment$pos[[1]] = c(0) - comment$pos[[2]] = c(nrow(tbl)) - comment$command = c(paste0(table_columns, "\\\\\n", - "\\multicolumn{1}{c}{Class}", paste(rep(" & \\multicolumn{1}{c}{$\\mu$} & \\multicolumn{1}{c}{$\\sigma$} & \\multicolumn{1}{c}{ci*}", n),collapse = ""),"\\\\\n"), - paste("\\hline \n", ifelse(show.footnote, paste0("\\multicolumn{",ncol(tbl)+1,"}{l}{* ",conf.int*100,"\\% confidence interval.}\n"), ""), sep = "")) - - rownames(tbl) = category.name - - tbl = xtable(tbl, caption) - - print.xtable(tbl, add.to.row = comment, include.rownames=TRUE, include.colnames = FALSE, - hline.after = c(-1, 0), sanitize.text.function = function(x) x, ...) - -} - - -.xtable.accuracy = function(x, category.name, category.colname, show.prop, caption, digits, show.footnote, ...){ - - ua = sprintf(paste0("%.",digits,"f$\\pm$%.",digits,"f"), round(x$UsersAccuracy[,"Accuracy"],digits), round(x$UsersAccuracy[,"ci"], digits)) - pa = sprintf(paste0("%.",digits,"f$\\pm$%.",digits,"f"), round(x$ProducersAccuracy[,"Accuracy"],digits), round(x$ProducersAccuracy[,"ci"], digits)) - oa = c(sprintf(paste0("%.",digits,"f$\\pm$%.",digits,"f"), round(x$OverallAccuracy["Accuracy"],digits), round(x$OverallAccuracy["ci"], digits)), rep("", length(pa)-1)) - - prop = data.frame(ua, pa, oa) - names(prop) = c("User's*", "Producers's*", "Overall*") - - if(show.prop){ - prop = data.frame(`User's*` = "", `Producers's*` = "", `Overall*` = "") - prop = as.data.frame.matrix(x$ProportionMatrix) - prop = data.frame(apply(prop[,!names(prop)%in%c("Area","w")], 1, FUN = sprintf, fmt=paste0(paste0("%.",digits,"f"))), stringsAsFactors = FALSE) - rownames(prop) = names(prop) - prop$`User's*` = "" - prop$`Producers's*` = "" - prop$`Overall*` = "" - names(prop)[1:length(category.name)] = category.colname - prop$`User's*`[1:length(ua)] = ua - prop$`Producers's*`[1:length(pa)] = pa - prop$`Overall*`[1:length(oa)] = oa - } - - rownames(prop)[1:length(category.name)] = category.name - tbl = xtable(prop, caption) - - comment = list() - comment$pos = list() - comment$pos[[1]] = c(0) - comment$pos[[2]] = c(nrow(tbl)) - if(show.prop){ - comment$command = c(paste0("&\\multicolumn{",length(category.name),"}{c}{Reference class}&&&&\\\\\n", - paste(c("\\multicolumn{1}{c}{Map class}",names(tbl)), collapse = " & "),"\\\\\n"), - paste("\\hline \n", ifelse(show.footnote, paste0("\\multicolumn{",ncol(tbl),"}{l}{* ",x$conf.int*100,"\\% confidence interval.}\n"), ""), sep = "")) - } else { - comment$command = c(paste0(paste(c("\\multicolumn{1}{c}{Class}",names(tbl)), collapse = " & "),"\\\\\n"), - paste("\\hline \n", ifelse(show.footnote, paste0("\\multicolumn{",ncol(tbl),"}{l}{* ",x$conf.int*100,"\\% confidence interval.}\n"), ""), sep = "")) - } - - - print.xtable(tbl, add.to.row = comment, include.rownames=TRUE, include.colnames = FALSE, - hline.after = c(-1, 0), sanitize.text.function = function(x) x, ...) -} - -.xtable.matrix = function(x, category.name, category.colname, caption, digits, ...){ - m = as.data.frame.matrix(x$ErrorMatrix) - # names(m)[ncol(m)] = "Estimation weight" - names(m)[1:length(category.name)] = category.colname - rownames(m)[1:length(category.name)] = category.name - - tbl = xtable(m, caption, digits = c(rep(0, ncol(m)-1), digits, 3)) - - comment = list() - comment$pos = list() - comment$pos[[1]] = c(0) - comment$command = c(paste0("&\\multicolumn{",length(category.name),"}{c}{Reference class}&&\\\\\n", - paste(c("\\multicolumn{1}{c}{Map class}",names(tbl)), collapse = " & "),"\\\\\n")) - - print.xtable(tbl, add.to.row = comment, include.rownames=TRUE, include.colnames = FALSE, - hline.after = c(-1, 0, nrow(tbl)), sanitize.text.function = function(x) x, ...) - -} - -.xtable.area = function(x, category.name, caption, digits, show.footnote, ...){ - - a = x$AreaUncertainty - a = data.frame(a) - - mp = sprintf(paste0("%.",digits,"f"), round(unlist(a$Mapped),digits)) - ad = sprintf(paste0("%.",digits,"f"), round(unlist(a$Adjusted),digits)) - ci = sprintf(paste0("$\\pm$%.",digits,"f"), round(unlist(a$ci),digits)) - - tbl = data.frame(mp, ad, ci) - rownames(tbl) = category.name - names(tbl) = c("Mapped area", "Adjusted area", "Margin of error*") - tbl = xtable(tbl, caption) - - comment = list() - comment$pos = list() - comment$pos[[1]] = c(0) - comment$pos[[2]] = c(nrow(tbl)) - comment$command = c(paste0(paste(c("\\multicolumn{1}{c}{Class}",names(tbl)), collapse = " & "), "\\\\\n"), - paste("\\hline \n", ifelse(show.footnote, paste0("\\multicolumn{",ncol(tbl),"}{l}{* ",x$conf.int*100,"\\% confidence interval.}\n"), ""), sep = "")) - - print.xtable(tbl, add.to.row = comment, include.rownames=TRUE, include.colnames = FALSE, - hline.after = c(-1, 0), sanitize.text.function = function(x) x, ...) - -} - - - diff --git a/R/twdtw_reduce_time.R b/R/twdtw_reduce_time.R deleted file mode 100644 index db1fbe7..0000000 --- a/R/twdtw_reduce_time.R +++ /dev/null @@ -1,263 +0,0 @@ -#' @include methods.R -#' @title Faster version of TWDTW apply -#' @name twdtwReduceTime -#' @author Victor Maus, \email{vwmaus1@@gmail.com} -#' @rdname twdtwReduceTime -#' -#' @description This function is a faster implementation of -#' \link[dtwSat]{twdtwApply} that is in average 4x faster. The time weight function -#' is coded in Fortran. It does not keep any intermediate data. -#' It performs a multidimensional TWDTW analysis -#' \insertCite{Maus:2019}{dtwSat} and retrieves only the best matches between -#' the unclassified time series and the patterns for each defined time interval. -#' -#' @inheritParams twdtwApply -#' @inheritParams twdtwClassify -#' -#' @param x a data.frame with the target time series. Usually, it is an -#' unclassified time series. It must contain two or more columns, one column -#' called \code{date} with dates in the format "YYYY-MM-DD". The other columns -#' can have any names (e.g., red, blue, nir, evi, ndvi) as long as they match -#' the column names in the temporal patterns \code{y}. -#' -#' @param y a list of data.frame objects similar to \code{x}. -#' The temporal patterns used to classify the time series in \code{x}. -#' -#' @param time.window logical. TRUE will constrain the TWDTW computation to the -#' value of the parameter \code{beta} defined in the logistic weight function. -#' Default is FALSE. -#' -#' @param fill An integer to fill the classification gaps. -#' -#' @examples -#' \dontrun{ -#' -#' library(dtwSat) -#' from = "2009-09-01" -#' to = "2017-09-01" -#' by = "12 month" -#' -#' # S4 objects for original implementation -#' tw_patt = readRDS(system.file("lucc_MT/patterns/patt.rds", package = "dtwSat")) -#' tw_ts = twdtwTimeSeries(MOD13Q1.ts) -#' -#' # Table from csv for faster version -#' mn_patt <- lapply(dir(system.file("lucc_MT/patterns", package = "dtwSat"), -#' pattern = ".csv$", full.names = TRUE), read.csv, stringsAsFactors = FALSE) -#' mn_ts <- read.csv(system.file("reduce_time/ts_MODIS13Q1.csv", package = "dtwSat"), -#' stringsAsFactors = FALSE) -#' -#' # Benchtmark -#' rbenchmark::benchmark( -#' legacy_twdtw = twdtwClassify(twdtwApply(x = tw_ts, y = tw_patt, weight.fun = log_fun), -#' from = from, to = to, by = by)[[1]], -#' fast_twdtw = twdtwReduceTime(x = mn_ts, y = mn_patt, from = from, to = to, by = by) -#' ) -#' } -#' -#' @export -twdtwReduceTime = function(x, - y, - alpha = -0.1, - beta = 50, - time.window = FALSE, - dist.method = "Euclidean", - step.matrix = symmetric1, - from = NULL, - to = NULL, - by = NULL, - breaks = NULL, - overlap = .5, - fill = length(y) + 1, - keep = FALSE, ...){ - - # Split time series from dates - px <- x[,names(x)!="date",drop=FALSE] - tx <- as.Date(x$date) - - # Compute TWDTW alignments for all patterns - twdtw_data <- lapply(seq_along(y), function(l){ - - # Split pattern time series from dates - py <- y[[l]][,names(y[[l]])!="date",drop=FALSE] - ty <- as.Date(y[[l]]$date) - - # Match bands and remove bands that are not in both time series - names(py) <- tolower(names(py)) - names(px) <- tolower(names(px)) - px <- px[,names(py),drop=FALSE] - py <- py[,names(px),drop=FALSE] - - # Get day of the year for pattern and time series - doyy <- as.numeric(format(ty, "%j")) - doyx <- as.numeric(format(tx, "%j")) - - # Compute accumulated DTW cost matrix - xm = na.omit(cbind(doyx, as.matrix(px))) - ym = na.omit(cbind(doyy, as.matrix(py))) - internals = .fast_twdtw(xm, ym, alpha, beta, step.matrix, time.window) - - # Find all low cost candidates - b <- internals$JB[internals$JB!=0] - a <- internals$VM[-1,][internals$N,b] - d <- internals$CM[-1,][internals$N,b] - # View(internals$VM[-1,]) - # CM <- internals$CM[-1,]; CM[CM>10000] <- NA; CM |> t() |> image() - candidates <- matrix(c(a, d, b, b, rep(l, length(b))), ncol = 5, byrow = F) - - # Order matches by minimum TWDTW distance - I <- order(candidates[,3]) - if(length(I)<1) return(NULL) - - # Build alignments table table - candidates[,4] <- I - - if(!keep){ - internals = NULL - } else { - internals$tsDates <- tx - internals$patternDates <- ty - } - - return(list(candidates = candidates, internals = internals)) - - }) - - aligs <- do.call("rbind", lapply(twdtw_data, function(x) x$candidates)) - il <- order(aligs[,1], aligs[,2]) - - # Create classification intervals - # if(is.null(breaks)){ - # breaks <- seq(as.Date(from), as.Date(to), by = by) - # } - if(is.null(breaks)) - if( !is.null(from) & !is.null(to) ){ - breaks = seq(as.Date(from), as.Date(to), by = by) - } else { - patt_range = lapply(y, function(yy) range(yy$date)) - patt_diff = trunc(sapply(patt_range, diff)/30)+1 - min_range = which.min(patt_diff) - by = patt_diff[[min_range]] - from = patt_range[[min_range]][1] - to = from - month(to) = month(to) + by - year(from) = year(range(x$date)[1]) - year(to) = year(range(x$date)[2]) - if(to # -# Institute for Geoinformatics (IFGI) # -# University of Muenster (WWU), Germany # -# # -# Earth System Science Center (CCST) # -# National Institute for Space Research (INPE), Brazil # -# # -# # -# R Package dtwSat - 2015-09-01 # -# # -############################################################### - -.onAttach = function(lib, pkg){ - packageStartupMessage( - sprintf("Loaded dtwSat v%s. See ?dtwSat for help; citation(\"dtwSat\") for use in publications.\n", - utils::packageDescription("dtwSat")$Version) ) - - ## Register TWDTW as a distance function into package proxy - is_there <- c("TWDTW","twdtw") %in% proxy::pr_DB$get_entry_names() - sapply(c("TWDTW","twdtw")[is_there], proxy::pr_DB$delete_entry) - - proxy::pr_DB$set_entry(FUN = .twdtwDist, - names = c("TWDTW","twdtw"), - loop = FALSE, - type = "metric", - description = "Time-Weighted Dynamic Time Warping", - reference = "Maus V, Camara G, Cartaxo R, Sanchez A, Ramos FM, de Queiroz GR (2016). A Time-Weighted Dynamic Time Warping method for land use and land cover mapping. IEEE Journal of Selected Topics in Applied Earth Observations and Remote Sensing, 9 (8), pp. 3729--3739. ." ) -} - -#' @import zoo -#' @import raster -#' @import ggplot2 -#' @import methods -#' @import rgdal -#' @importFrom foreach foreach %dopar% -#' @importFrom proxy dist pr_DB -#' @importFrom reshape2 melt -#' @importFrom scales pretty_breaks date_format percent -#' @importFrom grDevices terrain.colors gray.colors -#' @importFrom plyr alply -#' @importFrom sp Polygon Polygons SpatialPoints SpatialPolygons SpatialPointsDataFrame over CRS spTransform coordinates bbox +#' @import twdtw +#' @import stars #' @importFrom mgcv gam predict.gam -#' @importFrom RColorBrewer brewer.pal -#' @importFrom stats xtabs ave window na.omit sd qnorm -#' @importFrom lubridate month month<- day day<- year year<- -#' @importFrom caret createDataPartition -#' @importFrom xtable xtable print.xtable -#' @importFrom utils packageDescription flush.console globalVariables -#' @importFrom Rdpack reprompt -#' @importFrom data.table rbindlist -#' @useDynLib dtwSat, .registration = TRUE #' NULL - -if(getRversion() >= "2.15.1") utils::globalVariables("tsidopar") - -### Import and export functions from other packages - -#' @importFrom dtw symmetric1 -#' @export -dtw::symmetric1 - -#' @importFrom dtw symmetric2 -#' @export -dtw::symmetric2 - -#' @importFrom dtw asymmetric -#' @export -dtw::asymmetric - -#' @importFrom dtw rabinerJuangStepPattern -#' @export -dtw::rabinerJuangStepPattern diff --git a/README.Rmd b/README.Rmd deleted file mode 100644 index a15fd28..0000000 --- a/README.Rmd +++ /dev/null @@ -1,46 +0,0 @@ ---- -title: "dtwSat" -author: "Victor Maus" -date: "`r Sys.Date()`" -output: - md_document: - variant: markdown_github -bibliography: ./inst/REFERENCES.bib ---- - -```{r, echo=FALSE} -knitr::opts_chunk$set( - warning = FALSE, - message = FALSE, - error = FALSE, - cache = FALSE, - results = "hide" -) -``` - -dtwSat -===== - -[![Build Status](https://travis-ci.org/vwmaus/dtwSat.png?branch=master)](https://travis-ci.org/vwmaus/dtwSat) [![License](http://img.shields.io/badge/license-GPL%20%28%3E=%202%29-brightgreen.svg?style=flat)](http://www.gnu.org/licenses/gpl-2.0.html) [![CRAN](http://www.r-pkg.org/badges/version/dtwSat)](http://cran.r-project.org/package=dtwSat) [![month](http://cranlogs.r-pkg.org/badges/dtwSat)](http://www.r-pkg.org/pkg/dtwSat) [![total](http://cranlogs.r-pkg.org/badges/grand-total/dtwSat)](http://www.r-pkg.org/pkg/dtwSat) - -### Time-Weighted Dynamic Time Warping for satellite image time series analysis - -The \proglang{R} package *dtwSat* provides an implementation of the Time-Weighted Dynamic Time Warping (TWDTW) method for land cover mapping using multi-band satellite image time series [@Maus:2016; @Maus:2019]. *dtwSat* provides full cycle of land cover classification using image time series, ranging from selecting temporal patterns to visualizing, and assessing the results. - -## Installing - -Install either from CRAN - -```{r, eval = FALSE} -install.packages("dtwSat") -``` - -or install the development versions from GitHub - -```{r, eval = FALSE} -library(devtools) -devtools::install_github("vwmaus/dtwSat") -``` - -## References - diff --git a/_config.yml b/_config.yml deleted file mode 100644 index 2f7efbe..0000000 --- a/_config.yml +++ /dev/null @@ -1 +0,0 @@ -theme: jekyll-theme-minimal \ No newline at end of file diff --git a/figure/plot-MOD13Q1.ts-ts-1.png b/figure/plot-MOD13Q1.ts-ts-1.png deleted file mode 100644 index 9a49f829fe47080108deaf43ad4db9dc0d62e33d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 77723 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 diff --git a/figure/plot-area-uncertainty-1.png b/figure/plot-area-uncertainty-1.png deleted file mode 100644 index a6031996906510103ceb6502be31742a3ecc023c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 12498 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 diff --git a/figure/plot-changes-1.png b/figure/plot-changes-1.png deleted file mode 100644 index 73c2c02f9c0c2e5df7b6d694cc5fef41f3767dac..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 24077 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

tfbs3)^ztiXqo{b5Y+mmF7k6H-Iax7sUT;> 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 diff --git a/figure/plot-group-1.png b/figure/plot-group-1.png deleted file mode 100644 index 6ac7fb9818e24d114101c7a587cf17c525784637..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 90036 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

@v-{3IPRGi|koEl8&S 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 z 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 diff --git a/figure/plot-maps-1.png b/figure/plot-maps-1.png deleted file mode 100644 index 29cefd307e749e74dd9d9eef2d92d241fdbd145f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6914 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 a2rRMn+9V?xSp^#aLTB`i^>R;MzV<(EsqYs6 diff --git a/figure/plot-match-1.png b/figure/plot-match-1.png deleted file mode 100644 index 5d49f58e5f3bb9c339aaa98f3c88140ff157565e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 42711 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 diff --git a/data/MOD13Q1.patterns.list.RData b/data/MOD13Q1.patterns.list.RData deleted file mode 100644 index d5fcb4a04b91801a95810770620f271b509ad9f6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3931 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 diff --git a/data/MOD13Q1.ts.RData b/data/MOD13Q1.ts.RData deleted file mode 100644 index 55d0f35c2ccc6d36515ad059ba39a4dcf6550f62..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3520 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 B@N@tG diff --git a/data/MOD13Q1.ts.labels.RData b/data/MOD13Q1.ts.labels.RData deleted file mode 100644 index 81770c1b2d25b3ae2f3d1b6db6aa52b37609b95d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 240 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 Bgw6l} literal 0 HcmV?d00001 diff --git a/inst/mato_grosso_brazil/MOD13Q1_20111219_subset_from_h12v10.tif b/inst/mato_grosso_brazil/MOD13Q1_20111219_subset_from_h12v10.tif new file mode 100644 index 0000000000000000000000000000000000000000..93d85ae46847209950983e7f091156278a36f264 GIT binary patch literal 23745 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 i);=FB~X@;=oNhi@Adf(oivy-QNJ>qak+ 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 literal 0 HcmV?d00001 diff --git a/inst/mato_grosso_brazil/MOD13Q1_20120101_subset_from_h12v10.tif b/inst/mato_grosso_brazil/MOD13Q1_20120101_subset_from_h12v10.tif new file mode 100644 index 0000000000000000000000000000000000000000..d64155bef8220ea2b3dfd029d0c9f3fab4c587ea GIT binary patch literal 24714 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 literal 0 HcmV?d00001 diff --git a/inst/mato_grosso_brazil/MOD13Q1_20120117_subset_from_h12v10.tif b/inst/mato_grosso_brazil/MOD13Q1_20120117_subset_from_h12v10.tif new file mode 100644 index 0000000000000000000000000000000000000000..55418c1cdbb6f380cdc086552c3bf1188815af16 GIT binary patch literal 23848 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 p literal 0 HcmV?d00001 diff --git a/inst/mato_grosso_brazil/MOD13Q1_20120609_subset_from_h12v10.tif b/inst/mato_grosso_brazil/MOD13Q1_20120609_subset_from_h12v10.tif new file mode 100644 index 0000000000000000000000000000000000000000..19bca353692d8778938f43a3439571b178ff8bfc GIT binary patch literal 24434 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 F{2wcLol^h+ literal 0 HcmV?d00001 diff --git a/inst/mato_grosso_brazil/MOD13Q1_20120625_subset_from_h12v10.tif b/inst/mato_grosso_brazil/MOD13Q1_20120625_subset_from_h12v10.tif new file mode 100644 index 0000000000000000000000000000000000000000..5332230ce7c85b01608e6ee339af08070453b95f GIT binary patch literal 25403 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 XlUOMf2H>m;uU6TEX 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 Y5}y7?Qdc~E`;C+p5T)|AZiYnqKZGc~m;e9( literal 0 HcmV?d00001 diff --git a/inst/mato_grosso_brazil/MOD13Q1_20120828_subset_from_h12v10.tif b/inst/mato_grosso_brazil/MOD13Q1_20120828_subset_from_h12v10.tif new file mode 100644 index 0000000000000000000000000000000000000000..6de99df7124e8dd91f6c7d5f7f9c18352f21d798 GIT binary patch literal 24033 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 B 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 literal 0 HcmV?d00001 diff --git a/tests/testthat/test-twdtw_classify.R b/tests/testthat/test-twdtw_classify.R new file mode 100644 index 0000000..36a3574 --- /dev/null +++ b/tests/testthat/test-twdtw_classify.R @@ -0,0 +1,34 @@ +library(stars) +library(stringr) + +samples <- st_read("inst/mato_grosso_brazil/samples.gpkg") + +#tif_files <- system.file("inst/mato_grosso_brazil", package = "dtwSat") |> +# dir(pattern = "\\.tif$", full.names = TRUE) +tif_files <- dir("inst/mato_grosso_brazil", pattern = "\\.tif$", full.names = TRUE) + +# The acquisition date is in the file name are not the true acquisition date of each pixel +# MOD13Q1 is a 16-day composite product, so the acquisition date is the first day of the 16-day period +acquisition_date <- as.Date(str_extract(tif_files, "[0-9]{8}"), format = "%Y%m%d") + +# Read the data as a stars object and set band names +dc <- read_stars(tif_files, proxy = FALSE, along = list(time = acquisition_date)) |> + st_set_dimensions(3, c("EVI", "NDVI", "RED", "BLUE", "NIR", "MIR", "DOY")) |> + split("band") + +# Remove the DOY band - this will be supported int he future +dc <- dc[c("EVI", "NDVI", "RED", "BLUE", "NIR", "MIR")] + +# extract the samples +ts_samples <- st_extract(dc, samples) +ts_samples$id <- 1:dim(ts_samples)["geom"] +ts_samples$label <- samples$label + +a <- as.data.frame(ts_samples) +a$geom <- NULL + +head(a) + +a[a$id == "1",] + +# training set ready! \ No newline at end of file From 8a27fe2f8bd2d90fc2fa339abe677bf0a07f05d1 Mon Sep 17 00:00:00 2001 From: vwmaus Date: Tue, 25 Jul 2023 22:28:34 +0200 Subject: [PATCH 5/9] Remove dependencies --- R/create_patterns.R | 10 +++++----- R/plot_patterns.R | 7 ++----- 2 files changed, 7 insertions(+), 10 deletions(-) diff --git a/R/create_patterns.R b/R/create_patterns.R index 4313a0b..95c72c3 100644 --- a/R/create_patterns.R +++ b/R/create_patterns.R @@ -1,7 +1,7 @@ #' @title Create patterns #' @author Victor Maus, \email{vwmaus1@@gmail.com} #' -#' @description Create temporal patterns from objects of class twdtwTimeSeries. +#' @description Create temporal patterns. #' #' @param x an object of class \code{\link[base]{data.frame}}. #' @@ -39,8 +39,8 @@ create_pattern = function(x, from, to, freq, attr, formula, ...){ # Pattern period if( is.null(from) | is.null(to) ){ - from = as.Date(min(index(x[[1]]))) - to = as.Date(max(index(x[[1]]))) + from = min(as.Date(x[[1]])) + to = max(as.Date(x[[1]])) } from = as.Date(from) @@ -74,8 +74,8 @@ create_pattern = function(x, from, to, freq, attr, formula, ...){ if(is.null(attr)) attr = names(df)[-which(names(df) %in% vars[2])] res = sapply(as.list(df[attr]), FUN=fun, ...) - zoo(data.frame(res), as.Date(pred_time)) -} + + } diff --git a/R/plot_patterns.R b/R/plot_patterns.R index 8321ac8..59072d0 100644 --- a/R/plot_patterns.R +++ b/R/plot_patterns.R @@ -17,17 +17,14 @@ #' @export plot_patterns = function(x, labels=NULL, attr, year=2005){ - x = twdtwTimeSeries(x, labels) - labels = labels(x) - # Shift dates - if(!is.null(year)) x = shiftDates(x, year=year) + if(!is.null(year)) x = shift_dates(x, year=year) # Build data.frame if(missing(attr)) attr = names(x[[1]]) df.p = do.call("rbind", lapply(labels, function(p){ ts = x[[p]][,attr,drop=FALSE] - data.frame(Time=index(ts), ts, Pattern=p) + data.frame(Time=ts[,1], ts, Pattern=p) })) df.p = melt(df.p, id.vars=c("Time","Pattern")) From 407121d005590340e9dcc594fce351dce80e5e69 Mon Sep 17 00:00:00 2001 From: vwmaus Date: Tue, 25 Jul 2023 22:37:14 +0200 Subject: [PATCH 6/9] Fixes labels in ts extract --- tests/testthat/test-twdtw_classify.R | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/tests/testthat/test-twdtw_classify.R b/tests/testthat/test-twdtw_classify.R index 36a3574..e9eadcf 100644 --- a/tests/testthat/test-twdtw_classify.R +++ b/tests/testthat/test-twdtw_classify.R @@ -11,15 +11,15 @@ tif_files <- dir("inst/mato_grosso_brazil", pattern = "\\.tif$", full.names = TR # MOD13Q1 is a 16-day composite product, so the acquisition date is the first day of the 16-day period acquisition_date <- as.Date(str_extract(tif_files, "[0-9]{8}"), format = "%Y%m%d") -# Read the data as a stars object and set band names +# Read the data as a stars object, setting time as a dimension and band as attribute dc <- read_stars(tif_files, proxy = FALSE, along = list(time = acquisition_date)) |> st_set_dimensions(3, c("EVI", "NDVI", "RED", "BLUE", "NIR", "MIR", "DOY")) |> split("band") -# Remove the DOY band - this will be supported int he future +# Remove the DOY band - this will be supported int the future dc <- dc[c("EVI", "NDVI", "RED", "BLUE", "NIR", "MIR")] -# extract the samples +# Extract the samples ts_samples <- st_extract(dc, samples) ts_samples$id <- 1:dim(ts_samples)["geom"] ts_samples$label <- samples$label @@ -29,6 +29,6 @@ a$geom <- NULL head(a) -a[a$id == "1",] +a[a$id == "1", ] # training set ready! \ No newline at end of file From c5d1a857fd71c5dcf4c450fcdc2a9ce1cd25e9f7 Mon Sep 17 00:00:00 2001 From: vwmaus Date: Sun, 27 Aug 2023 18:36:14 +0200 Subject: [PATCH 7/9] Adds create patetrs and github workflows --- .gitignore | 46 ++++--- DESCRIPTION | 29 +++-- NAMESPACE | 12 +- R/create_patterns.R | 187 +++++++++++++++++---------- R/miscellaneous.R | 45 ------- R/plot_patterns.R | 62 +++++---- R/utils.R | 64 +++++++++ R/zzz.R | 6 + README.md | 13 +- inst/.gitignore | 1 + man/create_pattern.Rd | 47 ------- man/create_patterns.Rd | 42 ++++++ man/extract_time_series.Rd | 21 +++ man/get_dates_from_doy.Rd | 24 ---- man/get_stars_time_freq.Rd | 18 +++ man/plot_patterns.Rd | 30 ++--- man/shift_dates.Rd | 33 +++-- tests/testthat/test-twdtw_classify.R | 25 ++-- 18 files changed, 412 insertions(+), 293 deletions(-) delete mode 100644 R/miscellaneous.R create mode 100644 R/utils.R create mode 100644 inst/.gitignore delete mode 100644 man/create_pattern.Rd create mode 100644 man/create_patterns.Rd create mode 100644 man/extract_time_series.Rd delete mode 100644 man/get_dates_from_doy.Rd create mode 100644 man/get_stars_time_freq.Rd diff --git a/.gitignore b/.gitignore index 1e046a7..527b631 100644 --- a/.gitignore +++ b/.gitignore @@ -1,29 +1,39 @@ -Meta -doc # History files .Rhistory +.Rapp.history +# Session Data files +.RData +# User-specific files +.Ruserdata # Example code in package build process *-Ex.R -# R data files from past sessions -.Rdata +# Output files from R CMD build +/*.tar.gz +# Output files from R CMD check +/*.Rcheck/ # RStudio files .Rproj.user/ +# produced vignettes +vignettes/*.html +vignettes/*.pdf +# OAuth2 token, see https://github.com/hadley/httr/releases/tag/v0.3 +.httr-oauth +# knitr and R markdown default cache directories +*_cache/ +/cache/ +# Temporary files created by R markdown +*.utf8.md +*.knit.md +# R Environment Variables +.Renviron .Rproj.user -# Man fileis -#man/ -#.Rd -.Rd~ -README.md~ +.Rdata +.DS_Store +.quarto +revdep/ +CRAN-SUBMISSION + # Other files src/symbols.rds -twdtw_results/ -*.xml -corinho.R -tardis.f *.o *.so -Makefile -dtw_result_subarea_250m_1_2017-09-01.tif -/doc/ -/Meta/ -CRAN-SUBMISSION diff --git a/DESCRIPTION b/DESCRIPTION index c687018..29374cc 100644 --- a/DESCRIPTION +++ b/DESCRIPTION @@ -22,14 +22,16 @@ Authors@R: role = c("ctb"), comment = c(ORCID = "0000-0002-6642-2543")) ) -Description: Provides an implementation of the Time-Weighted Dynamic Time - Warping (TWDTW) method for land cover mapping. TWDTW computes the similarity between - satellite image time series with a set of known temporal patterns - (e.g. phenological cycles of the vegetation). - 'dtwSat' offers the user methods to create temporal patterns for land cover types, - perform TWDTW analysis for satellite datasets, visualize the results of the analysis, - produce land cover maps, create temporal plots for land cover change, and compute - accuracy metrics. +Description: Provides a robust approach to land use mapping using multi-dimensional + (multi-band) satellite image time series. By leveraging the Time-Weighted Dynamic + Time Warping (TWDTW) distance metric in tandem with a 1-NN classifier, the package + provides functions to produce land use maps based on distinct seasonality patterns, + typically observed in the phenological cycles of vegetation. The TWDTW algorithm is + described in Maus et al. (2016) and + Maus et al. (2019) . A key strength of TWDTW is its ability + to recognize patterns with only a minimal training set, achieving notable accuracy. + The package features tools for generating temporal patterns for various land cover types, + conducting land use mapping, and visualizing the outcomes. License: GPL (>= 3) URL: https://github.com/vwmaus/dtwSat/ BugReports: https://github.com/vwmaus/dtwSat/issues/ @@ -39,10 +41,17 @@ Roxygen: list(markdown = TRUE) RoxygenNote: 7.2.3 Depends: twdtw, - stars + sf, + stars, + ggplot2 Imports: - mgcv + mgcv, + stats, + scales, + reshape2, + rlang Suggests: rbenchmark, + stringr, testthat (>= 3.0.0) Config/testthat/edition: 3 diff --git a/NAMESPACE b/NAMESPACE index 49b478b..d21d6bd 100644 --- a/NAMESPACE +++ b/NAMESPACE @@ -1,10 +1,18 @@ # Generated by roxygen2: do not edit by hand -export(create_pattern) -export(get_dates_from_doy) +export(create_patterns) export(plot_patterns) export(shift_dates) +import(ggplot2) +import(sf) import(stars) import(twdtw) importFrom(mgcv,gam) importFrom(mgcv,predict.gam) +importFrom(reshape2,melt) +importFrom(rlang,.data) +importFrom(scales,date_format) +importFrom(scales,percent) +importFrom(scales,pretty_breaks) +importFrom(stats,as.formula) +importFrom(stats,predict) diff --git a/R/create_patterns.R b/R/create_patterns.R index 95c72c3..12d7198 100644 --- a/R/create_patterns.R +++ b/R/create_patterns.R @@ -1,89 +1,142 @@ -#' @title Create patterns -#' @author Victor Maus, \email{vwmaus1@@gmail.com} -#' -#' @description Create temporal patterns. -#' -#' @param x an object of class \code{\link[base]{data.frame}}. -#' -#' @param from A character or \code{\link[base]{Dates}} object in the format -#' "yyyy-mm-dd". If not provided it is equal to the smallest date of the -#' first element in x. See details. -#' -#' @param to A \code{\link[base]{character}} or \code{\link[base]{Dates}} -#' object in the format "yyyy-mm-dd". If not provided it is equal to the -#' greatest date of the first element in x. See details. -#' -#' @param attr A vector character or numeric. The attributes in \code{x} to be used. -#' If not declared the function uses all attributes. -#' -#' @param freq An integer. The sampling frequency of the output patterns. +#' Create a Pattern Using GAM #' -#' @param split A logical. If TRUE the samples are split by label. If FALSE -#' all samples are set to the same label. -#' -#' @param formula A formula. Argument to pass to \code{\link[mgcv]{gam}}. -#' -#' @param ... other arguments to pass to the function \code{\link[mgcv]{gam}} in the -#' package \pkg{mgcv}. -#' -#' @return an object of class \code{\link[base]{data.frame}} -#' +#' This function creates a pattern based on Generalized Additive Models (GAM). +#' It uses the specified formula to fit the model and predict values. +#' It operates on stars objects (for spatial-temporal data) and sf objects (for spatial data). +#' +#' @param x A stars object representing spatial-temporal data. +#' @param y An sf object representing spatial data with associated attributes. +#' @param formula A formula for the GAM. +#' @param start_column Name of the column in y that indicates the start date. Default is 'start_date'. +#' @param end_column Name of the column in y that indicates the end date. Default is 'end_date'. +#' @param label_colum Name of the column in y that contains labels. Default is 'label'. +#' @param sampling_freq The time frequency for sampling. If NULL, the function will infer it. +#' @param ... Additional arguments passed to the GAM function. +#' +#' @return A list containing the predicted values for each label. #' -#' @details The hidden assumption is that the temporal pattern is a cycle the repeats itself -#' within a given time interval. Therefore, all time series samples in \code{x} are aligned -#' with each other, keeping their respective sequence of days of the year. The function fits a -#' Generalized Additive Model (GAM) to the aligned set of samples. #' +#' #' @export -create_pattern = function(x, from, to, freq, attr, formula, ...){ +create_patterns = function(x, y, formula, start_column = 'start_date', + end_column = 'end_date', label_colum = 'label', + sampling_freq = NULL, ...){ - # Pattern period - if( is.null(from) | is.null(to) ){ - from = min(as.Date(x[[1]])) - to = max(as.Date(x[[1]])) + # Check if x is a stars object with a time dimension + if (!inherits(x, "stars") || dim(x)['time'] < 1) { + stop("x must be a stars object with a 'time' dimension") } - from = as.Date(from) - to = as.Date(to) - - # Get formula variables - vars = all.vars(formula) - - # Shift dates to match the same period - df = do.call("rbind", lapply(as.list(x), function(x){ - res = shift_dates(x, year=as.numeric(format(to, "%Y"))) - res = window(res, start = from, end = to) - res = data.frame(time=index(res), res) - names(res) = c("time", names(x)) - res - })) - names(df)[1] = vars[2] - - dates = as.Date(df[[vars[2]]]) - pred_time = seq(from, to, freq) - - fun = function(y, ...){ - df = data.frame(y, as.numeric(dates)) - names(df) = vars - fit = gam(data = df, formula = formula, ...) - time = data.frame(as.numeric(pred_time)) - names(time) = vars[2] - predict.gam(fit, newdata = time) + # Check if y is an sf object with point geometry + if (!inherits(y, "sf") || !all(st_is(y, "POINT"))) { + stop("y must be an sf object with point geometry") + } + + # Check for required columns in y + required_columns <- c(start_column, end_column, label_colum) + missing_columns <- setdiff(required_columns, names(y)) + if (length(missing_columns) > 0) { + stop(paste("Missing required columns in y:", paste(missing_columns, collapse = ", "))) } - - if(is.null(attr)) attr = names(df)[-which(names(df) %in% vars[2])] - res = sapply(as.list(df[attr]), FUN=fun, ...) + # Convert columns to date-time + y[ , start_column] <- to_date_time(y[[start_column]]) + y[ , end_column] <- to_date_time(y[[end_column]]) + # Extract time series from stars + y_ts <- extract_time_series(x, y) + y_ts$geom <- NULL + + # Shift dates + unique_ids <- unique(y_ts$id) + for (id in seq_along(unique_ids)) { + idx <- y_ts$id == unique_ids[id] + y_ts[idx, 'time'] <- shift_dates(y_ts[idx, 'time']) } + # Split data frame by label and remove label column + y_ts <- lapply(split(y_ts, y_ts$label), function(df) { + df$label <- NULL + return(df) + }) + + # Determine sampling frequency + if (is.null(sampling_freq)) { + warning("Sampling frequency not defined; inferring from the stars object.") + sampling_freq <- get_stars_time_freq(x) + } + + # Extract variables from formula + vars <- all.vars(formula) + + # Define GAM function + gam_fun = function(y, t, formula_vars, ...){ + df = data.frame(y, t = as.numeric(t)) + names(df) <- formula_vars + fit = mgcv::gam(data = df, formula = as.formula(paste(formula_vars[1], "~", formula_vars[2])), ...) + pred_t = data.frame(t = as.numeric(seq(min(t), max(t), by = sampling_freq))) + predict(fit, newdata = pred_t) + } + # Apply GAM function + res <- lapply(y_ts, function(ts){ + y_time <- ts$time + ts$time <- NULL + ts$id <- NULL + sapply(as.list(ts), function(y) { + gam_fun(y, y_time, vars) + }) + }) + return(res) +} +#' Extract Time Series from a Stars Object for Specified Points +#' +#' This function extracts a time series from a stars object for each specified point in the sf object. +#' Each extracted sample is then labeled with an ID and the label from the sf object. +#' +#' @param x A stars object containing the raster time series data. +#' @param y An sf object containing the point geometries and their associated labels. +#' +#' @return A data.frame with the extracted time series for each point in the sf object, +#' with additional columns for the ID and label of each sample. +#' +#' +extract_time_series <- function(x, y) { + ts_samples <- st_extract(x, y) + ts_samples$id <- 1:dim(ts_samples)["geom"] + ts_samples$label <- y$label + as.data.frame(ts_samples) +} + + + +#' Compute the Most Common Sampling Frequency in a Stars Object +#' +#' This function calculates the most common difference between consecutive time points in a stars object. +#' This can be useful for determining the sampling frequency of the time series data. +#' +#' @param stars_object A stars object containing time series data. +#' +#' @return A difftime object representing the most common time difference between consecutive samples. +#' +#' +get_stars_time_freq <- function(stars_object) { + # Extract the time dimension + time_values <- st_get_dimension_values(stars_object, "time") + # Compute the differences between consecutive time points + time_diffs <- diff(time_values) + # Convert differences to days + time_diffs <- as.difftime(time_diffs, units = "days") + # Compute the most common difference (mode) + freq <- unique(time_diffs)[which.max(tabulate(match(time_diffs, unique(time_diffs))))] + return(freq) +} diff --git a/R/miscellaneous.R b/R/miscellaneous.R deleted file mode 100644 index 8e07ffd..0000000 --- a/R/miscellaneous.R +++ /dev/null @@ -1,45 +0,0 @@ -#' @title Get dates from year and day of the year -#' @author Victor Maus, \email{vwmaus1@@gmail.com} -#' -#' @description This function retrieves the date corresponding to the given -#' year and day of the year. -#' -#' @param year A vector with the years. -#' @param doy A vector with the day of the year. -#' It must have the same length as \code{year}. -#' -#' @return A \code{\link[base]{Dates}} object. -#' -#' -#' @export -get_dates_from_doy = function(year, doy){ - res = as.Date(paste(as.numeric(year), as.numeric(doy)), format="%Y %j", origin="1970-01-01") - I = which(diff(res)<0)+1 - res[I] = as.Date(paste0(as.numeric(format(res[I],"%Y"))+1, format(res[I], "-%m-%d"))) - res -} - - - -#' @title Shift dates -#' @author Victor Maus, \email{vwmaus1@@gmail.com} -#' -#' @description This function shifts the dates of the time series to a -#' given base year. -#' -#' @param object \code{\link[base]{data.frame}} objects. -#' -#' @param year the base year to shift the time series to. -#' -#' @return An object of the same class as the input \code{object}. -#' -#' @export -shift_dates = function(x, year){ - labels = as.character(labels(x)) - x = x[[1]] - dates = index(x) - last_date = tail(dates, 1) - shift_days = as.numeric(last_date - as.Date(paste0(year,format(last_date, "-%m-%d")))) - d = as.numeric(dates) - shift_days - new("twdtwTimeSeries", timeseries=zoo(data.frame(x), as.Date(d)), labels=labels) -} diff --git a/R/plot_patterns.R b/R/plot_patterns.R index 59072d0..dd983b8 100644 --- a/R/plot_patterns.R +++ b/R/plot_patterns.R @@ -1,43 +1,41 @@ -#' @title Plotting temporal patterns -#' @author Victor Maus, \email{vwmaus1@@gmail.com} +#' Plot Patterns from Time Series Data +#' +#' This function takes a list of time series data and creates a multi-faceted plot +#' where each facet corresponds to a different time series from the list. +#' Within each facet, different attributes (columns of the time series) are +#' plotted as lines with different colors. +#' +#' @param x A list where each element is a data.frame representing a time series. +#' Each data.frame should have the same number of rows and columns, +#' with columns representing different attributes (e.g., bands or indices) +#' and rows representing time points. +#' The name of each element in the list will be used as the facet title. #' -#' @description Method for plotting the temporal patterns. -#' -#' @param x An object of class \code{\link[base]{data.frame}}. -#' @param labels A vector with labels of the time series. If not declared -#' the function will plot all time series. -#' @param year An integer. The base year to shift the dates of the time series to. -#' If NULL then the time series is not shifted. Default is 2005. -#' @param attr An \link[base]{integer} vector or \link[base]{character} vector -#' indicating the attribute for plotting. If not declared the function will plot -#' all attributes. -#' -#' @return A \link[ggplot2]{ggplot} object. +#' @param ... Not used. #' +#' @return A ggplot object displaying the time series patterns. +#' #' @export -plot_patterns = function(x, labels=NULL, attr, year=2005){ - - # Shift dates - if(!is.null(year)) x = shift_dates(x, year=year) - - # Build data.frame - if(missing(attr)) attr = names(x[[1]]) - df.p = do.call("rbind", lapply(labels, function(p){ - ts = x[[p]][,attr,drop=FALSE] - data.frame(Time=ts[,1], ts, Pattern=p) +plot_patterns = function(x, ...) { + + # Convert the list of time series data into a long-format data.frame + df.p = do.call("rbind", lapply(names(x), function(p) { + ts = x[[p]] + # Create a new data.frame with a 'Time' column and a 'Pattern' column + # representing the name of the current time series (facet name). + data.frame(Time = 1:nrow(ts), ts, Pattern = p) # Assuming the time series are evenly spaced })) - df.p = melt(df.p, id.vars=c("Time","Pattern")) - # Plot temporal patterns - gp = ggplot(df.p, aes_string(x="Time", y="value", colour="variable") ) + + # Melt the data into long format suitable for ggplot2 + df.p = melt(df.p, id.vars = c("Time", "Pattern")) + + # Construct the ggplot + gp = ggplot(df.p, aes(x = .data$Time, y = .data$value, colour = .data$variable)) + geom_line() + facet_wrap(~Pattern) + theme(legend.position = "bottom") + - scale_x_date(labels = date_format("%b")) + guides(colour = guide_legend(title = "Bands")) + ylab("Value") - gp - -} - + return(gp) +} \ No newline at end of file diff --git a/R/utils.R b/R/utils.R new file mode 100644 index 0000000..b9bb556 --- /dev/null +++ b/R/utils.R @@ -0,0 +1,64 @@ +#' Shift Dates to Start on a Specified Origin Year +#' +#' Shifts a vector of dates to start on the same day-of-year in a specified origin year +#' while preserving the relative difference in days among the observations. +#' This way the temporal pattern (e.g., seasonality) inherent to the original dates +#' will also be preserved in the shifted dates. +#' +#' The primary goal of this function is to align a sequence of dates based on the day-of-year +#' in a desired origin year. This can be particularly useful for comparing or visualizing +#' two or more time series with different absolute dates but aiming to align them based on +#' the day-of-year or another relative metric. +#' +#' @param x A vector of date strings or Date objects representing the sequence to shift. +#' @param origin A date string or Date object specifying the desired origin year for the shifted dates. +#' Default is "1970-01-01". +#' +#' @return A vector of Date objects with the shifted dates starting on the same day-of-year in the specified origin year. +#' +#' @examples +#' +#' x <- c("2011-09-14", "2011-09-30", "2011-10-16", "2011-11-01") +#' +#' shift_dates(x) +#' +#' @export +shift_dates <- function(x, origin = "1970-01-01") { + + # Convert the input dates to Date objects + x <- as.Date(x) + + # Extract the day-of-year from the first date in x + doy <- as.numeric(format(x[1], "%j")) + + # Compute the new starting date in the origin year + new_start <- as.Date(paste0(format(as.Date(origin), "%Y"), sprintf("-%03d", doy)), format="%Y-%j") + + # Determine the difference in days + day_diff <- as.numeric(x[1] - new_start) + + # Adjust each date in x by this difference + shifted_dates <- x - day_diff + + return(shifted_dates) +} + +#### TO BE REMOVED: twdtw package will export this fucntion +to_date_time <- function(x){ + if (!inherits(x, c("Date", "POSIXt"))) { + # check if all strings in the vector include hours, minutes, and seconds + if (all(grepl("\\d{4}-\\d{2}-\\d{2} \\d{2}:\\d{2}:\\d{2}", x))) { + x <- try(as.POSIXct(x), silent = TRUE) + } else { + x <- try(as.Date(x), silent = TRUE) + } + if (inherits(x, "try-error")) { + stop("Some elements of x could not be converted to a date or datetime format") + } + } + return(x) +} + + + + diff --git a/R/zzz.R b/R/zzz.R index 80631c1..06468d0 100644 --- a/R/zzz.R +++ b/R/zzz.R @@ -1,5 +1,11 @@ #' @import twdtw +#' @import sf #' @import stars +#' @import ggplot2 +#' @importFrom stats as.formula predict #' @importFrom mgcv gam predict.gam +#' @importFrom scales pretty_breaks date_format percent +#' @importFrom reshape2 melt +#' @importFrom rlang .data #' NULL diff --git a/README.md b/README.md index 9ad5ec5..4db524f 100644 --- a/README.md +++ b/README.md @@ -1,11 +1,14 @@ # dtwSat -[![Build -Status](https://travis-ci.org/vwmaus/dtwSat.png?branch=master)](https://travis-ci.org/vwmaus/dtwSat) -[![License](http://img.shields.io/badge/license-GPL%20%28%3E=%202%29-brightgreen.svg?style=flat)](http://www.gnu.org/licenses/gpl-2.0.html) -[![CRAN](http://www.r-pkg.org/badges/version/dtwSat)](http://cran.r-project.org/package=dtwSat) -[![month](http://cranlogs.r-pkg.org/badges/dtwSat)](http://www.r-pkg.org/pkg/dtwSat) + +[![License](https://img.shields.io/badge/license-GPL%20%28%3E=%202%29-brightgreen.svg?style=flat)](https://www.gnu.org/licenses/gpl-3.0.html) +[![R-CMD-check](https://github.com/vwmaus/dtwSat/actions/workflows/R-CMD-check.yaml/badge.svg)](https://github.com/vwmaus/dtwSat/actions/workflows/R-CMD-check.yaml) +[![Coverage Status](https://img.shields.io/codecov/c/github/vwmaus/dtwSat/main.svg)](https://app.codecov.io/gh/vwmaus/dtwSat) +[![CRAN](https://www.r-pkg.org/badges/version/dtwSat)](https://cran.r-project.org/package=dtwSat) +[![Downloads](https://cranlogs.r-pkg.org/badges/dtwSat?color=brightgreen)](https://www.r-pkg.org/pkg/dtwSat) [![total](http://cranlogs.r-pkg.org/badges/grand-total/dtwSat)](http://www.r-pkg.org/pkg/dtwSat) + + ### Time-Weighted Dynamic Time Warping for satellite image time series analysis diff --git a/inst/.gitignore b/inst/.gitignore new file mode 100644 index 0000000..b81c795 --- /dev/null +++ b/inst/.gitignore @@ -0,0 +1 @@ +*.xml \ No newline at end of file diff --git a/man/create_pattern.Rd b/man/create_pattern.Rd deleted file mode 100644 index c275cb6..0000000 --- a/man/create_pattern.Rd +++ /dev/null @@ -1,47 +0,0 @@ -% Generated by roxygen2: do not edit by hand -% Please edit documentation in R/create_patterns.R -\name{create_pattern} -\alias{create_pattern} -\title{Create patterns} -\usage{ -create_pattern(x, from, to, freq, attr, formula, ...) -} -\arguments{ -\item{x}{an object of class \code{\link[base]{data.frame}}.} - -\item{from}{A character or \code{\link[base]{Dates}} object in the format -"yyyy-mm-dd". If not provided it is equal to the smallest date of the -first element in x. See details.} - -\item{to}{A \code{\link[base]{character}} or \code{\link[base]{Dates}} -object in the format "yyyy-mm-dd". If not provided it is equal to the -greatest date of the first element in x. See details.} - -\item{freq}{An integer. The sampling frequency of the output patterns.} - -\item{attr}{A vector character or numeric. The attributes in \code{x} to be used. -If not declared the function uses all attributes.} - -\item{formula}{A formula. Argument to pass to \code{\link[mgcv]{gam}}.} - -\item{...}{other arguments to pass to the function \code{\link[mgcv]{gam}} in the -package \pkg{mgcv}.} - -\item{split}{A logical. If TRUE the samples are split by label. If FALSE -all samples are set to the same label.} -} -\value{ -an object of class \code{\link[base]{data.frame}} -} -\description{ -Create temporal patterns from objects of class twdtwTimeSeries. -} -\details{ -The hidden assumption is that the temporal pattern is a cycle the repeats itself -within a given time interval. Therefore, all time series samples in \code{x} are aligned -with each other, keeping their respective sequence of days of the year. The function fits a -Generalized Additive Model (GAM) to the aligned set of samples. -} -\author{ -Victor Maus, \email{vwmaus1@gmail.com} -} diff --git a/man/create_patterns.Rd b/man/create_patterns.Rd new file mode 100644 index 0000000..389c860 --- /dev/null +++ b/man/create_patterns.Rd @@ -0,0 +1,42 @@ +% Generated by roxygen2: do not edit by hand +% Please edit documentation in R/create_patterns.R +\name{create_patterns} +\alias{create_patterns} +\title{Create a Pattern Using GAM} +\usage{ +create_patterns( + x, + y, + formula, + start_column = "start_date", + end_column = "end_date", + label_colum = "label", + sampling_freq = NULL, + ... +) +} +\arguments{ +\item{x}{A stars object representing spatial-temporal data.} + +\item{y}{An sf object representing spatial data with associated attributes.} + +\item{formula}{A formula for the GAM.} + +\item{start_column}{Name of the column in y that indicates the start date. Default is 'start_date'.} + +\item{end_column}{Name of the column in y that indicates the end date. Default is 'end_date'.} + +\item{label_colum}{Name of the column in y that contains labels. Default is 'label'.} + +\item{sampling_freq}{The time frequency for sampling. If NULL, the function will infer it.} + +\item{...}{Additional arguments passed to the GAM function.} +} +\value{ +A list containing the predicted values for each label. +} +\description{ +This function creates a pattern based on Generalized Additive Models (GAM). +It uses the specified formula to fit the model and predict values. +It operates on stars objects (for spatial-temporal data) and sf objects (for spatial data). +} diff --git a/man/extract_time_series.Rd b/man/extract_time_series.Rd new file mode 100644 index 0000000..c4aebe3 --- /dev/null +++ b/man/extract_time_series.Rd @@ -0,0 +1,21 @@ +% Generated by roxygen2: do not edit by hand +% Please edit documentation in R/create_patterns.R +\name{extract_time_series} +\alias{extract_time_series} +\title{Extract Time Series from a Stars Object for Specified Points} +\usage{ +extract_time_series(x, y) +} +\arguments{ +\item{x}{A stars object containing the raster time series data.} + +\item{y}{An sf object containing the point geometries and their associated labels.} +} +\value{ +A data.frame with the extracted time series for each point in the sf object, +with additional columns for the ID and label of each sample. +} +\description{ +This function extracts a time series from a stars object for each specified point in the sf object. +Each extracted sample is then labeled with an ID and the label from the sf object. +} diff --git a/man/get_dates_from_doy.Rd b/man/get_dates_from_doy.Rd deleted file mode 100644 index 6ace42a..0000000 --- a/man/get_dates_from_doy.Rd +++ /dev/null @@ -1,24 +0,0 @@ -% Generated by roxygen2: do not edit by hand -% Please edit documentation in R/miscellaneous.R -\name{get_dates_from_doy} -\alias{get_dates_from_doy} -\title{Get dates from year and day of the year} -\usage{ -get_dates_from_doy(year, doy) -} -\arguments{ -\item{year}{A vector with the years.} - -\item{doy}{A vector with the day of the year. -It must have the same length as \code{year}.} -} -\value{ -A \code{\link[base]{Dates}} object. -} -\description{ -This function retrieves the date corresponding to the given -year and day of the year. -} -\author{ -Victor Maus, \email{vwmaus1@gmail.com} -} diff --git a/man/get_stars_time_freq.Rd b/man/get_stars_time_freq.Rd new file mode 100644 index 0000000..97a3ad4 --- /dev/null +++ b/man/get_stars_time_freq.Rd @@ -0,0 +1,18 @@ +% Generated by roxygen2: do not edit by hand +% Please edit documentation in R/create_patterns.R +\name{get_stars_time_freq} +\alias{get_stars_time_freq} +\title{Compute the Most Common Sampling Frequency in a Stars Object} +\usage{ +get_stars_time_freq(stars_object) +} +\arguments{ +\item{stars_object}{A stars object containing time series data.} +} +\value{ +A difftime object representing the most common time difference between consecutive samples. +} +\description{ +This function calculates the most common difference between consecutive time points in a stars object. +This can be useful for determining the sampling frequency of the time series data. +} diff --git a/man/plot_patterns.Rd b/man/plot_patterns.Rd index 5133d63..97e24d6 100644 --- a/man/plot_patterns.Rd +++ b/man/plot_patterns.Rd @@ -2,29 +2,25 @@ % Please edit documentation in R/plot_patterns.R \name{plot_patterns} \alias{plot_patterns} -\title{Plotting temporal patterns} +\title{Plot Patterns from Time Series Data} \usage{ -plot_patterns(x, labels = NULL, attr, year = 2005) +plot_patterns(x, ...) } \arguments{ -\item{x}{An object of class \code{\link[base]{data.frame}}.} +\item{x}{A list where each element is a data.frame representing a time series. +Each data.frame should have the same number of rows and columns, +with columns representing different attributes (e.g., bands or indices) +and rows representing time points. +The name of each element in the list will be used as the facet title.} -\item{labels}{A vector with labels of the time series. If not declared -the function will plot all time series.} - -\item{attr}{An \link[base]{integer} vector or \link[base]{character} vector -indicating the attribute for plotting. If not declared the function will plot -all attributes.} - -\item{year}{An integer. The base year to shift the dates of the time series to. -If NULL then the time series is not shifted. Default is 2005.} +\item{...}{Not used.} } \value{ -A \link[ggplot2]{ggplot} object. +A ggplot object displaying the time series patterns. } \description{ -Method for plotting the temporal patterns. -} -\author{ -Victor Maus, \email{vwmaus1@gmail.com} +This function takes a list of time series data and creates a multi-faceted plot +where each facet corresponds to a different time series from the list. +Within each facet, different attributes (columns of the time series) are +plotted as lines with different colors. } diff --git a/man/shift_dates.Rd b/man/shift_dates.Rd index 0c82c90..87d58c1 100644 --- a/man/shift_dates.Rd +++ b/man/shift_dates.Rd @@ -1,23 +1,36 @@ % Generated by roxygen2: do not edit by hand -% Please edit documentation in R/miscellaneous.R +% Please edit documentation in R/utils.R \name{shift_dates} \alias{shift_dates} -\title{Shift dates} +\title{Shift Dates to Start on a Specified Origin Year} \usage{ -shift_dates(x, year) +shift_dates(x, origin = "1970-01-01") } \arguments{ -\item{year}{the base year to shift the time series to.} +\item{x}{A vector of date strings or Date objects representing the sequence to shift.} -\item{object}{\code{\link[base]{data.frame}} objects.} +\item{origin}{A date string or Date object specifying the desired origin year for the shifted dates. +Default is "1970-01-01".} } \value{ -An object of the same class as the input \code{object}. +A vector of Date objects with the shifted dates starting on the same day-of-year in the specified origin year. } \description{ -This function shifts the dates of the time series to a -given base year. +Shifts a vector of dates to start on the same day-of-year in a specified origin year +while preserving the relative difference in days among the observations. +This way the temporal pattern (e.g., seasonality) inherent to the original dates +will also be preserved in the shifted dates. } -\author{ -Victor Maus, \email{vwmaus1@gmail.com} +\details{ +The primary goal of this function is to align a sequence of dates based on the day-of-year +in a desired origin year. This can be particularly useful for comparing or visualizing +two or more time series with different absolute dates but aiming to align them based on +the day-of-year or another relative metric. +} +\examples{ + +x <- c("2011-09-14", "2011-09-30", "2011-10-16", "2011-11-01") + +shift_dates(x) + } diff --git a/tests/testthat/test-twdtw_classify.R b/tests/testthat/test-twdtw_classify.R index e9eadcf..024121c 100644 --- a/tests/testthat/test-twdtw_classify.R +++ b/tests/testthat/test-twdtw_classify.R @@ -1,11 +1,12 @@ library(stars) library(stringr) -samples <- st_read("inst/mato_grosso_brazil/samples.gpkg") +# Read training samples +samples <- st_read(system.file("mato_grosso_brazil/samples.gpkg", package = "dtwSat")) -#tif_files <- system.file("inst/mato_grosso_brazil", package = "dtwSat") |> -# dir(pattern = "\\.tif$", full.names = TRUE) -tif_files <- dir("inst/mato_grosso_brazil", pattern = "\\.tif$", full.names = TRUE) +# Satellite image time sereis files +tif_files <- system.file("mato_grosso_brazil", package = "dtwSat") |> + dir(pattern = "\\.tif$", full.names = TRUE) # The acquisition date is in the file name are not the true acquisition date of each pixel # MOD13Q1 is a 16-day composite product, so the acquisition date is the first day of the 16-day period @@ -19,16 +20,8 @@ dc <- read_stars(tif_files, proxy = FALSE, along = list(time = acquisition_date) # Remove the DOY band - this will be supported int the future dc <- dc[c("EVI", "NDVI", "RED", "BLUE", "NIR", "MIR")] -# Extract the samples -ts_samples <- st_extract(dc, samples) -ts_samples$id <- 1:dim(ts_samples)["geom"] -ts_samples$label <- samples$label +# Get temporal patters +ts_patterns <- create_patterns(x = dc, y = samples, formula = band ~ s(t), sampling_freq = 23) -a <- as.data.frame(ts_samples) -a$geom <- NULL - -head(a) - -a[a$id == "1", ] - -# training set ready! \ No newline at end of file +# Visualize patterns +plot_patterns(ts_patterns) From ccd6b22ae2191554448cefc90c36d76c6f39fd9c Mon Sep 17 00:00:00 2001 From: vwmaus Date: Sun, 27 Aug 2023 22:12:01 +0200 Subject: [PATCH 8/9] Fixes error in create pattern --- NAMESPACE | 2 ++ R/create_patterns.R | 52 +++++++++++++++------------- R/zzz.R | 4 +-- man/create_patterns.Rd | 13 ++++--- man/get_stars_time_freq.Rd | 4 +-- tests/testthat/test-twdtw_classify.R | 2 +- 6 files changed, 41 insertions(+), 36 deletions(-) diff --git a/NAMESPACE b/NAMESPACE index d21d6bd..fb17b02 100644 --- a/NAMESPACE +++ b/NAMESPACE @@ -9,6 +9,7 @@ import(stars) import(twdtw) importFrom(mgcv,gam) importFrom(mgcv,predict.gam) +importFrom(mgcv,s) importFrom(reshape2,melt) importFrom(rlang,.data) importFrom(scales,date_format) @@ -16,3 +17,4 @@ importFrom(scales,percent) importFrom(scales,pretty_breaks) importFrom(stats,as.formula) importFrom(stats,predict) +importFrom(stats,setNames) diff --git a/R/create_patterns.R b/R/create_patterns.R index 12d7198..5ac7552 100644 --- a/R/create_patterns.R +++ b/R/create_patterns.R @@ -2,15 +2,14 @@ #' #' This function creates a pattern based on Generalized Additive Models (GAM). #' It uses the specified formula to fit the model and predict values. -#' It operates on stars objects (for spatial-temporal data) and sf objects (for spatial data). #' -#' @param x A stars object representing spatial-temporal data. -#' @param y An sf object representing spatial data with associated attributes. -#' @param formula A formula for the GAM. +#' @param x A three dimensions stars object (x, y, time) with the satellite image time series. +#' @param y An sf object with the coordinates of the training points. +#' @param formula A formula for the GAM. Default is \code{band ~ \link[mgcv]{s}(time)}. #' @param start_column Name of the column in y that indicates the start date. Default is 'start_date'. #' @param end_column Name of the column in y that indicates the end date. Default is 'end_date'. -#' @param label_colum Name of the column in y that contains labels. Default is 'label'. -#' @param sampling_freq The time frequency for sampling. If NULL, the function will infer it. +#' @param label_colum Name of the column in y that contains land use labels. Default is 'label'. +#' @param sampling_freq The time frequency for sampling including unit, e.g '16 day'. If NULL, the function will infer it. #' @param ... Additional arguments passed to the GAM function. #' #' @return A list containing the predicted values for each label. @@ -18,7 +17,7 @@ #' #' #' @export -create_patterns = function(x, y, formula, start_column = 'start_date', +create_patterns = function(x, y, formula = band ~ s(time), start_column = 'start_date', end_column = 'end_date', label_colum = 'label', sampling_freq = NULL, ...){ @@ -39,6 +38,11 @@ create_patterns = function(x, y, formula, start_column = 'start_date', stop(paste("Missing required columns in y:", paste(missing_columns, collapse = ", "))) } + # Check if formula has two + if(length(all.vars(formula)) != 2) { + stop("The formula should have only one predictor!") + } + # Convert columns to date-time y[ , start_column] <- to_date_time(y[[start_column]]) y[ , end_column] <- to_date_time(y[[end_column]]) @@ -66,29 +70,27 @@ create_patterns = function(x, y, formula, start_column = 'start_date', sampling_freq <- get_stars_time_freq(x) } - # Extract variables from formula - vars <- all.vars(formula) - # Define GAM function - gam_fun = function(y, t, formula_vars, ...){ - df = data.frame(y, t = as.numeric(t)) - names(df) <- formula_vars - fit = mgcv::gam(data = df, formula = as.formula(paste(formula_vars[1], "~", formula_vars[2])), ...) - pred_t = data.frame(t = as.numeric(seq(min(t), max(t), by = sampling_freq))) + gam_fun <- function(y, t, formula, ...){ + df <- data.frame(y, t = as.numeric(t)) + df <- setNames(list(y, as.numeric(t)), all.vars(formula)) + fit <- mgcv::gam(data = df, formula = formula, ...) + pred_t <- setNames(list(as.numeric(seq(min(t), max(t), by = sampling_freq))), all.vars(formula)[2]) predict(fit, newdata = pred_t) } # Apply GAM function - res <- lapply(y_ts, function(ts){ + patterns <- lapply(y_ts, function(ts){ y_time <- ts$time ts$time <- NULL ts$id <- NULL sapply(as.list(ts), function(y) { - gam_fun(y, y_time, vars) + gam_fun(y, y_time, formula, ...) }) }) - return(res) + return(patterns) + } @@ -119,24 +121,26 @@ extract_time_series <- function(x, y) { #' This function calculates the most common difference between consecutive time points in a stars object. #' This can be useful for determining the sampling frequency of the time series data. #' -#' @param stars_object A stars object containing time series data. +#' @param x A stars object containing time series data. #' #' @return A difftime object representing the most common time difference between consecutive samples. #' #' -get_stars_time_freq <- function(stars_object) { +get_stars_time_freq <- function(x) { # Extract the time dimension - time_values <- st_get_dimension_values(stars_object, "time") + time_values <- st_get_dimension_values(x, "time") # Compute the differences between consecutive time points time_diffs <- diff(time_values) - # Convert differences to days + # Convert differences to days (while retaining the difftime class) time_diffs <- as.difftime(time_diffs, units = "days") - # Compute the most common difference (mode) - freq <- unique(time_diffs)[which.max(tabulate(match(time_diffs, unique(time_diffs))))] + # Identify the mode + mode_val_index <- which.max(tabulate(match(time_diffs, unique(time_diffs)))) + freq <- diff(time_values[mode_val_index:(mode_val_index+1)]) return(freq) } + diff --git a/R/zzz.R b/R/zzz.R index 06468d0..499fd6c 100644 --- a/R/zzz.R +++ b/R/zzz.R @@ -2,8 +2,8 @@ #' @import sf #' @import stars #' @import ggplot2 -#' @importFrom stats as.formula predict -#' @importFrom mgcv gam predict.gam +#' @importFrom stats as.formula predict setNames +#' @importFrom mgcv gam s predict.gam #' @importFrom scales pretty_breaks date_format percent #' @importFrom reshape2 melt #' @importFrom rlang .data diff --git a/man/create_patterns.Rd b/man/create_patterns.Rd index 389c860..0ff9bd5 100644 --- a/man/create_patterns.Rd +++ b/man/create_patterns.Rd @@ -7,7 +7,7 @@ create_patterns( x, y, - formula, + formula = band ~ s(time), start_column = "start_date", end_column = "end_date", label_colum = "label", @@ -16,19 +16,19 @@ create_patterns( ) } \arguments{ -\item{x}{A stars object representing spatial-temporal data.} +\item{x}{A three dimensions stars object (x, y, time) with the satellite image time series.} -\item{y}{An sf object representing spatial data with associated attributes.} +\item{y}{An sf object with the coordinates of the training points.} -\item{formula}{A formula for the GAM.} +\item{formula}{A formula for the GAM. Default is \code{band ~ \link[mgcv]{s}(time)}.} \item{start_column}{Name of the column in y that indicates the start date. Default is 'start_date'.} \item{end_column}{Name of the column in y that indicates the end date. Default is 'end_date'.} -\item{label_colum}{Name of the column in y that contains labels. Default is 'label'.} +\item{label_colum}{Name of the column in y that contains land use labels. Default is 'label'.} -\item{sampling_freq}{The time frequency for sampling. If NULL, the function will infer it.} +\item{sampling_freq}{The time frequency for sampling including unit, e.g '16 day'. If NULL, the function will infer it.} \item{...}{Additional arguments passed to the GAM function.} } @@ -38,5 +38,4 @@ A list containing the predicted values for each label. \description{ This function creates a pattern based on Generalized Additive Models (GAM). It uses the specified formula to fit the model and predict values. -It operates on stars objects (for spatial-temporal data) and sf objects (for spatial data). } diff --git a/man/get_stars_time_freq.Rd b/man/get_stars_time_freq.Rd index 97a3ad4..47d90c4 100644 --- a/man/get_stars_time_freq.Rd +++ b/man/get_stars_time_freq.Rd @@ -4,10 +4,10 @@ \alias{get_stars_time_freq} \title{Compute the Most Common Sampling Frequency in a Stars Object} \usage{ -get_stars_time_freq(stars_object) +get_stars_time_freq(x) } \arguments{ -\item{stars_object}{A stars object containing time series data.} +\item{x}{A stars object containing time series data.} } \value{ A difftime object representing the most common time difference between consecutive samples. diff --git a/tests/testthat/test-twdtw_classify.R b/tests/testthat/test-twdtw_classify.R index 024121c..f5c0c04 100644 --- a/tests/testthat/test-twdtw_classify.R +++ b/tests/testthat/test-twdtw_classify.R @@ -21,7 +21,7 @@ dc <- read_stars(tif_files, proxy = FALSE, along = list(time = acquisition_date) dc <- dc[c("EVI", "NDVI", "RED", "BLUE", "NIR", "MIR")] # Get temporal patters -ts_patterns <- create_patterns(x = dc, y = samples, formula = band ~ s(t), sampling_freq = 23) +ts_patterns <- create_patterns(x = dc, y = samples) # Visualize patterns plot_patterns(ts_patterns) From 61e5768fb7c14a5a2f6c1815a1b68ca606a289b0 Mon Sep 17 00:00:00 2001 From: vwmaus Date: Sun, 27 Aug 2023 22:32:01 +0200 Subject: [PATCH 9/9] Removes warning message --- DESCRIPTION | 2 +- R/create_patterns.R | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/DESCRIPTION b/DESCRIPTION index 29374cc..4e08634 100644 --- a/DESCRIPTION +++ b/DESCRIPTION @@ -2,7 +2,7 @@ Package: dtwSat Type: Package Title: Time-Weighted Dynamic Time Warping for Satellite Image Time Series Analysis Version: 1.0.0 -Date: 2023-07-31 +Date: 2023-09-03 Authors@R: c(person(given = "Victor", family = "Maus", diff --git a/R/create_patterns.R b/R/create_patterns.R index 5ac7552..856d1dd 100644 --- a/R/create_patterns.R +++ b/R/create_patterns.R @@ -66,8 +66,8 @@ create_patterns = function(x, y, formula = band ~ s(time), start_column = 'start # Determine sampling frequency if (is.null(sampling_freq)) { - warning("Sampling frequency not defined; inferring from the stars object.") sampling_freq <- get_stars_time_freq(x) + cat("Sampling frequency inferred from the stars object:", as.numeric(sampling_freq), attr(sampling_freq, "units"), "\n") } # Define GAM function

    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 literal 0 HcmV?d00001 diff --git a/inst/mato_grosso_brazil/MOD13Q1_20120218_subset_from_h12v10.tif b/inst/mato_grosso_brazil/MOD13Q1_20120218_subset_from_h12v10.tif new file mode 100644 index 0000000000000000000000000000000000000000..a54ed6166e12a5fc03e17961004f0d132097fb65 GIT binary patch literal 22698 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 TKuV=X$~aT&Tco3bfK2{hut=>5 literal 0 HcmV?d00001 diff --git a/inst/mato_grosso_brazil/MOD13Q1_20120305_subset_from_h12v10.tif b/inst/mato_grosso_brazil/MOD13Q1_20120305_subset_from_h12v10.tif new file mode 100644 index 0000000000000000000000000000000000000000..ea72004f4c76e2869eb2d31cf90e1944f75e28d4 GIT binary patch literal 23825 zcmbTe2V7Ij);_#b$PP83hn7MU5a}f#C83K7s5BKZR1uM`h7e$f4gw+~AfhJ$L_|bD zL{!v-E-C^dqM|3EC@LZ#3UWO9#dGideeXSAx$pn({5EUNWY(j_>Q{3R zz&2rhv`}x(`A0oU6aZRs;DEQV-a@EDwQzth?9@fr4@;;k3G4HP^}i0{zrC)>3tJ1% zUg3FE1^{Y=t$YapFm46_XWjo{@vpxK;r0CAFB?}U>bC7+i9w-3i9vQ^M54`>#IVD} z=%B-4w(7gQsoq<5d2eytwSPO+f6I2C?drsYpu@3I!uO2S?Tie_CdQUl!o$?u*xbn2 z#_*Tz|6eE0RF8k_Vbd?;|7^C!a`XoBl#>WNKkzWJUgu!~XXV{eSQN@6b*E0o~H- zmv>_`BMS@5|LFbSp$mKXFQNbC+sKG)^2@i8k(rT+sp)@y+WwCHfA9bA*v)=nH#af2 z`1QD%8XH-d{^ybZckIF*{!8qC`8G1QGXI6#*wj*Z&;93t|2y>mz5BmIH~$6w*YhTX zPPQ^48=0B@AAan@9{x+{fB7~t6+UOb4&eY;SpMfP%fCba-@E@ibPIJmveEw`SfR~- z307!n@t?m&|BmkO{%j2YeLe$JABs-{U!o{49{fZ8YZm=^eo z;KwF>#Q6oCOh(_rY9oUOtF{GVmiU$RI8{m-%} zx;Y0XoPWjsl1M=EFDYD=Nc_Vd{!fYcOX2|JUs6{?OyZXv3=scI!U61G@?Tf?|CA`! z=?7Q0`&0iV|JCA1^r7gOW6?}k$6Z7Z;UrJACH||*DJb#C;r~%~j*2=Mn-Fs_^ncWO z#UDH@TprjGUE{;TqK_R6iC{8;O{NB>zh>h9aae?HG$jL&@!7l`OFfMD1Z4X0rT0m% zH{hGaBVeBk-S-L?C!*>yxY%)mW9IY{3?-?KXSw9z8UsyLNLKK|kXVQY7SUudzi(_HmXq0;ml>p85wk=mK* z(YQRKt>-l#M?p0ZW9Wq~B#Ns@emD?b^t^jC_>7!wM!+iy^#VUrGvFRL)Rjj}y`w9V zQ~Ruf%s2wm&gp{a21O1`BPe6pYM{j4L!!rVwB<{H4J!?`8x@_{0d2B z1VYd-g^)KwXIP>jfDu~Mv&ghoU|&}CNY~V18mV4{nD&Lvvlk71%`t)Zm)6R6Sm=*Q>b@! z1T(fys??bcIt<0aUR<)IVylrKKCp$GWH=fH%NqYYE z&b@?JtJOc#_-m<~l5$&}2D~4bN<3rYn8JoG3GGQ3L@|oG;1y<4`8@`_AJdj-sSI zuABy+o-qrTV69h6Kr8BnnJYP*wM98T?#ZQ~aZGxbBsf(onuR_i%i`A{V;H*5j?e}k ze?CA^k4JoI9&t80i-VRFYowQTKx^?RtWhMqZHAbGbp>1ctWM($)u!)rPtexw`oAHF z)5SK$+;u17wJ!Q&-M6+n5~~EnObVuj>!smFKv9m0^Vaf|sSFQ9?`WbHTwJ94du#^( zg)ueOKEi8@LPkHZVWfmeMg)k0M5cvH0!D%z8mHc4fI-#2mEMJXaw1k@5?#za+TC`f z&MZrRv>}o#yC+KIX4}U%?{|XNSY{XEX$DRa*&tWPOp3_VLm53d%l+~-*Xl*(lSAYk zqE9zpEdBc1u634Qz5;85HM)Avx`^Y>PGT);VtCj;(cB-p$gqfdfNhT(e76gNFSCIT zdnp)GBV*-?E02Fdwd7=|Uj7dEOJN3E%(~9(az5Gs$6Zk(t|cHA-7q{IRO*Kvhfvbl zn&U5C89$yyqJ|s6NXilH)+>i#0uOb){N-AnSi{!HtG(v7Hy@1*yxOrbdwSzJB(3f%kh?24eFOI0P*_}n$NHoaa#gw3PQ3V=EkgM_3)qy zQ%|D5IXG-5<)GKUJ?JjR71$L1c1FsS%s81&$K$zcTj46IdO5kHM(Gt=h_`mA-4z@0 z1H@Qyz73|Ea!r!5a#n=RuusP^!259%07}L_yCzt^n}*3)Qcyu`E&+p5-@d{!Eue|- z3Ds4J_{h@C46p4{v=#U49axMD?n(aiHtlTnKy|qM{GBe;+Ww92Qm*!{)BL{v%p_Wf z-)HBcNdTe!=%^mNV-QT&Pi-PLDfH%d@@7WbIYbX5$oMxi;v!HuGyGJ!wLS`<5i*0K z&{J-?s^LV*+~MS$dHBr3Xnv$ra3?Qkx852lCaelxZWFGn@zY`06n7lb-qBvqr+C--|& zv^QtW4IZ3a`v!JZ*>va1DVTfNz#Id1yq~K(IC-XID+x*HfD$w{D!!rAE8Sf)6`P|v zTqn+|gd!fDzNXojFL`p=9`OxEtko>h+iT%;N<7#NiA_Lpzf;m_nHU!xq5`m(Brb_I zr?|~gV^)sU#-7YloG^K4)P$?^~@I{%YxR^W}aiIA4OjW?HzT2y@P#4_-A= zVO8t29f(tv=u%J953W!=@Z{n7yqa3&*i=cEMLRsHKmqaP7M?e6isvrwEtIBUIFX(2 z|2%Nz%j22nt==<@UGv3wFK20&J%XpJ~ZGSmtmQaD+WPD2T#Dn z;MUf-SH(ZIVQHj_F3oZ?}%rAV3U{3kKHitR+W3U$z#{-og|>T zKos%p{mILavN1P8CyULL>3XDr2&Ts%#?dLh#ak74=J^A4%a%BDagIIIB={tRcQ z!1*Z%BTE>Rj2NcE9aT*V?esU^0%41<1TSD5CYZ_HLTR?mqVH!hzz5AHk6z#?NvOs6 z2SCYjEYka z<))6aiuwzfNj+`@+j2Fw0Rs<7nPhY~#x3m#(i zhtU*Y>=Z?j=5bndTW8LThmP6S5<_N78)RAxz$H^@C`p!`B0CK=yWvdKT?ibh$4eF< zbRI3n24=Wsf_8#ID~jE@K`c~i$2JPj033s2e!H+CzOKIYr5|#CJ)JV~k?Okzm^Uu2>1tNQQhRQSTBRMt z6d)C(*wV^cN^bbn(HNK(M$qb~_+p zFiVFMqg1kyD!u2o@tl@vjQuf3KO;NSW-7A7beEOs6RO!R zH}J`}Mp_RX)ni)_ab5lO8igTGa^nLWuK=~e*{Pz$0L(NR#g_p& z;h2MkHm4pMng;9KU)&uT_$QyC0)yje$$+CrD=c`6U;yd#Mg+P9i&eG*UWqh2p?BRj zjnl3Pnn9D!gT-Xm}~UgfS{sS4i7VrFS#rCDMt1wP_-O_Wyn`#si;eJTK-4s%3I6ERsy z8-mh7-X2L}l}}cT`%0@SbyTcrSkbK0M~=76`~Egw%yuAYyZ7_07wFP3amkF}JWz?c z6fVubC_6$lTbkI~w_E*Dj9l*z`VMbxc^UAj0{BHm;Rr$AT#5|1n*nK>_v5En3LvLZ zj5`4~1#Y=Oyv5B7)pj{A@im+FQI5xzP2Y{1_7JBG5NOQpP(1h{R?L&(MWlnkkQ|hv z+U;=*kOSX{p^KWtxkvnin!xm}RP)mW<1ujQx!Q;TzvCUzZAJ3r6T*?3gzNW+((mUq z6|kJ~me7Z2N~$>Z{lu41qw2T&a)$~{wrak2Qh_2twz@u>er?(b%d%0bRa84o4=c)9_TZs$x7z9fL zpS632S@^D71YmOSgdPoZ0aC(iATc)0fQFZav_ZbNJZS@k#K-5cF)*1_s8Dr^7Pu%T z1Ea7`-<^wp0dii*KAzR@qN#D$RF>HtA9Q2^h9XNJ4lrbbcFIwhB1X~1eP*g`CJxHH zEb_|a(5}OyJq8EDVcn`QmiG33>?$`L6%>9hh=>%&BVgem&k0=zuZQi~K5C7CQVmGn z;FaC+G8XJzCTg-4Q>T2)3>_9tUCpj;^N|g)2s&uN-fQvcoaL@0YrXy$HdC5o0OO{L z98j`iC&P6AB(EM-R+v5Zj76tzq?Z@0n{BjSdJnSw>sKs8jf%lmCrLIF4QL~^!|_}% z#cYbiljmVnJjihuVP%7y3e0<6qV|CpHlvbMS^@>Da_JUCCooHUu*Ydv2Fn&;!Y=Ow z`OD&f7g*!2Q2R9=ViKv5e$XwI!U}Z?4dk<>*@mpgbKr3a(GG2u3Oyg3VFvL=27PnJ z8X=P!msz3XR~CMrf7K=N(4ny`S8TH%)UF&FVpH%{R^ThraReml6KLf*7k1>Vr6VhH zayyE^ic@)s=Nn_9>JKRG5gW^Ey9Tn~ZEySiILxE=n1uOMl#2Jf7_0AX;))OYLIH0> zAuOTLzZ0x@UN|=CcQW$eLH?^y8?@oNY$1G@mXb3&M#h!w4sug@7k_$-zteNHl3<}h z2}?~<0H3RzeCJn8ODZ{|pHi!^e!9|B%z{s3NW#=5*$hk&Xx+A^;<_2ho0BZ~n)mQW zd{76NojF{AGW$RVxTzSZJJ5Mp?@`x*9yfU^a+@P03QMKF9dy`{vgdG@1}_SHe&$RU zO$u@YmgK~aupLhRiFY~_f8@*AoA;`$`t+U;f@dBFII<4Ghl0^NY-O>TfGPXwp)AV@ceq+rov+092J6&+I1<6iMikHr zcIDgbK5}`ztA_Y-`>ls$AOdbZZH`v`osy2F^nmPJk{5b6958OGoF6~7jm5cfbe3h||p`M7`j3>jZOCd<^_$}mmjGgIQwg&t4Rg=b~c97>U z9p?K}WgFO@Ss8xldhllisT$DJEp^YjZo3+FF-FG;xyL-?V%TMm1Fhc9>+L&IAOmA>!iTMmE9^gxTLtB<^DEao=5HV$l`C;h$ zvZ(56sUxKB9Ir?jHy8XsY8sbN=tb6-9;ee(pkV+=MeV5q=P4e?Zh>{;yFrgI*AN6z z9h@F8>6N-Je>m8E#+4X1*xIlVF%hy|f4 zG4p!xTlmoTF*LqY&NF8md?pDl2i=>N;y%(lv=6CAFS%kpd z9~+2s=#lp-Wp!rr1$Y|MT;l}4W-RYTzUtK5x5_1GkDXo`_?z$Xcjoa8WO1UDb|9)XSBW*bs$vAT zXw&yvYfIG2u~QD8GulYrxbXQ_BmS#KR>-9Z?C2lgyub1R*KKOu&eqJyMp`L`(Se{s zx}S!zFtNP8XQhxND%6-tMSL`l|IfPv%<014BP7WT{4%hB#LM-LTMoXkww zFg^|Ze3U-!14!YOS{I{Yca7nDXmnIi-h#|FqcE>&Semrhp8NcyLLy!9#fawZM!&NQ z;LGKSv)}Gb!ngsdeo&`qBv+AoefPENJcjS#pQAp6XMf)NeK!xWnI1?KZN0=~_C;@U zWdm?1Gu?`lb6Wsx7CZD_?6spO8gtU`x|6N0{_ql;>pc*{n$u+3ME(uFr$qkkt zKS|g)3hnr2V^en77p&P}eCrOa1>0D5$hqNp^yTqrKleYgkHH|@p(fbkV$}{p)^AZQ zQxOYQcu^5hu)I=RhKGcdt(=%BD${{eJeTRNt5D!llX1F+&3q*zpEG;0;f)FguP8mI z^B0M$v2#JNWRBiWsP%l@!bkh&;H`b1FDCm!oL^#m_qz=?{;Yxb`k>HJF^#0Q%nuI6&$$ z@zmGk9sFVS_E(<{_xg$xnKRU!oCV|72*x+u&74fd`~s%t)_WiOXF@`m5xetqJ{-+Q z+!Ivg%GsrD????%WGxPai*Wvkz=Q08H-~bv2kveLdG($9Hg%5_CFXSRHdD!Yhm;k` zInJ|1cO8ngK&8XJ&CBVN=#$dji$M|kWi6UIPwqf&sRs(WbW(S!2o@Q~&S>N4ZgL`A zrmftC;7MXJ1)J)p0$WRUknM`fQP0WZ&t1P?lHlQuVn?J}o|j&lP|OK>*QBf_;5((> zLTK!HmkoNQm}dq3G3vJc2}C!RGi_XWl7H>tSH;KI{zQ<6OO5Z|AY^S(Cn(WaLj;23 z(ir~4h1e*38T*n20h56aC720}>UQSz3iJVRdM%$iFgt~nXH-dAO!z#fIumk#YkKW!U4J)HMi0u-R_toH!1 zd#v`f-)SYuJHjFe;ujaS2_;=h3i#7qR$X{SIGjFu@$2wdi~{M4w^$Ben(n}_FrsTJ zPJb|Z0^p94@=*SDn+j+hc2*~X%8fEt%3zCA`0HU6U#-9k5Go-j+vtV0o73~l*}1~? z&eoiMw1PmCzifQ&K#mp8EW#SUujZh#@0p7StR|8!MY0yMsb$(@NUUz=5O`CMrfi&A7n{rx0T1-;3?V|$2Sz8wn@ zvbA?_zB+bpb>9Rg2VxqZ>+(vKRfTYj5-?v{_51}rnE0D-KTceHzy7ZO`og9MkOU!P z1Gbn@q3z|kTn%sncKs~AP z^`;I3`y@!EX4%72Y6^l%Q()=<9!uW}$EspH*!7^0dXu0r;UcuEP2Fv%6MSYF?8CfN zP@s+ku2#pT^^fDy5l@cuX~|jsc1ZsBSaE?WhB9HO!d`O9XEQga55xU4V<$IA@-?gb7Gk={`bRT{k3>5+n|EBtSH`A zc4}+vfUGbwm5a^AbWOB?A1KFl)hFRjUiZLm2}Tn)z`j>(ST;jCazmK*!M9HD&z-tO z_tc$(O06h68}@Cxblv*mQ?VNFhI8Hx*F1dcn)4AKeu(RdIAOMOyg98BBshe(<}F&t z(>e&pN!BXkkc#X;VZ0&3)=gJlvv!PQc~RMCtKv0-ed3pn8q5l|Q>T^#ORtwpVOO*i z8*d|F1(t}BmCcU+wyN-0oesbZP#{*Iouj-F?<(Qvjd3!;bujTDGy%4J7rym%laFAx zzZ%!J@krUV@srYfo+p@|=rWVj4x+;X$b1nt1wS4+ywTAOA2{vgmd9nnGR51QEX2B$ z{8EDTcNw&lSr6>iz8MDlSO$&WWx2o#tl-D!z10h{eq zYX&?so_&{~&NC#SZz8ZGpAwO+4lu__f)q5S_sOW|4v^~#?wwHmlwhD%O^-(KGjVFy zEbx>SO%Y%XLn+R{0c%=WWkW8R6bCWZmhDh;fh6_2t0=Uhjfj=OgafC+ZYOEU_FN9Z z9|fm+5yk*H^In{dY>>BS#@vdocrZ4 zKut}atsq1fjveeB-U5TZ@64Poz;&adUcRaS&`bJB%B@{(C9aW?N8!!WF=wyh^ zu!C20gWSZ>Pw~)Izu*f43(E)NJoNiTKB-J!=x{+caEoD!_6WGQ9^&Oq+2OchBgmyF z{&iq+Qn}fi?#ERkKN5*I1sA8UH0ps{uxH;wAsFqE@1wln|MLQp2wls%5WbjLev2M%Mdy$Cr;PyKXsXt9#*ycKMDUe{SoP zq}2V8E|)OAsOp*Lv|?w(;txWLL@9!&$8zi%&o3x0d z4uJjMAe1V`vlEGO>ltbQ5486d1cdc^5=B-STqTpoYhm!mnu&Hm3z2 z#Px+M_e^l`w)mq&)F4+qxJ!gbL;?&kN{K9+E~MEu9f~-w;h_i%+%FhKc44L1$osJ$ zF+hpP{im4fNn0WX{A3^wq$*O|rntUuXmnDDfj>`LTJTfG_%GJB#YCpXLMhH#qQ%Zk zpbCtr!)RM%inhy*m_1@uf+IGY`bzh|b<+iKGPIo_JNP(2#}c>UJl|rvAdu83q-`Ym znlH2T!sGJgA-XbW=){Ps*~g>LuB3t=(}o#Yzg3yVvFAt?d#@PV&A;+2>o)MT85;`aBi)F*|MZ7r-Am=XIx zk|hOKBm2|^8Xo4H^Weby&6IgzBv_$N-&cw}-9?sz$tYuPfxie*>#1lxu<`utPJa!~ z0Gybr@r!GzRfO4q>~Rs=JXo!-+#4(fX$QV_xtnj}$*z#&$${)r3=IWx(PF)$t$^N# zf{MF^ot|u@><&9LFA7g%j21P?Q>VV>x8b3QPIWm?jt-tD3Bq(tjEx^uvD{eYuGGt3TyU`mT)Z#wFhSC2T%{2*n`Ss0c^M1@AYwmA@##of zY30Z*9n=f+uywJ+4r50gF|Z2E^cC+Zvc?W|kKj<>t)g;#dhMvAVu+_NH_Z=7^V@M) zUOq)}hyNz-u#Ens0X$SOC>D0T2rOxMEDz~OG7-cya<#N6{EIT5F2`TSEtSo(;swXI z`;=M+P;BJBgp0IPXdLH*yiEApaTtdyf5{9@BTEZcVl0krFeJhI1UkJQp}e!WZ;sGU z7V@;C#>0z1W*bkgf;M1r#`!Liu;Qhd? z{AuHwPzhjO{rFS7j0Qdwomw`VZi5o0A*3`F^m%u!n2 zN_O|KWSD1N+bn8ykyomFH_r@syi7L$5U}n${(KDUz3+< zABj;QKZ+_DE(thE3t8LVHk)#FUkbY_u>{PZlOSz86%IbgRn<>NXC^8HJ@rX1)y<8- zkVYrooQATnD1@&pTRns84N^2mDfH;mk4|YWow{iUese61I9S?O0!uQ}fq!%0--L0~ z0-z$05t#|X>8qoOKZ{J%-V>wl>I&H1ik~NLoA+uw7)&7CIh>PHYR%E zXNAcj3Y3o)Xoa?W)MP?NTMurSI2NHBE<+?(_%?u%WKp)>`#0-H?{_JFWtW8(uQQ@+ z%32Qjc2LIe9sb&1rZ5+CX!~K`2|+dCQrQ&V_l>vn0vtAa_ayN0^lM2VnF!e#(&Q%i zc1N}IE?0KSuXE+rdmAesT~Qtjd+^?tSEmSNgM1XsU{jNy?MdrVweURHF+iPC1@h~% zx%4NzP_RS~WT)gMivcQ9A}X>iQ3)+CiNGIPt>tT|mV`sW#agUlFoSF3$d%wS2dG1v zxN{1P-h7dAM_QvdF{%D)n_OKU<3Ug-g?B#D+zmBZu`xqg@4r<`mEJ^&~%9=^Z>s1jgw^kFrGi+R49R#m~{U-_W{yN_V`Jw z?`Wxx#PDK^3e|##EXW@n-utfXkDmp!Oi9j=_XliwybQ?B7e?N|_TsprT9j0W5z+-u zvx8I8dP>vZw1$hbnWv$hA5L6X#u%i0%8mB^Xgizc8J@Q_@pf)^p_JD}101Xz6w3Fu{+cL7x__NqoA*aKMc+t8fj7CgPMhz)iJ4 zgl4nW@jZu5BRn5>{y=U!F}!=r@EuHK2PO7VaOsEW^RwlAA$xbbGI;WHVT=57 z2K1*z2#wwHiduQINlS3(EVcYBOK_IEqYAd6%F*ND%tLWlDVmaIny~pSn^E{Erb^E$ z!JtnyXzM8dF7T(B#Kjk2p;?-owOabC=RnHyeP^C?lV8AkUr^#+Kv!OLdu&E`7BvM6 z!^q?NIzg6=+Mm6X>Cl2#IzbTX$!W%m@crroKz@@q-vog4YYGQ_p}Vr!yzFb6^E4JF zz9~LhQx2yvK*u60A_FH#R0J5RJ!u8NEUI(I#XWR6Yo>xVtB#UffAsi8gy)R2@k}0X z=0(OViCSOQs3Q{Un|@_<#&#nK1#9cYzn~JQMS{c={jVBZak!W-dv z?VArQTRmP*j=MqKcOyFh$H7YxQ|eeNiLP$oJsprW0I$mXj0%vUbg1VXR8~d^v!|rl z24F`eIMfNx`t_MDSYnK z1Eg$_jl!V7=~E7;`H_L&RV?;*g1_^=@4r7CdNua<(Xfa5>*1S}VJHzn1rhOdQR+kLf0e~!0gOZ1{b0Y0^Wt=q44p?}~jRxWjW zQcVu~Np3TPO0Vee^YKdekuKk+y=zOG0Gh{m9+-aH8nD@!M4><`ucdY@w#NwCzB%Q4?_~EYx3*S9lNN2sri42~b+EbJ zUmxIIN)giz&Mz4{?Po(~VsSKk=d%*iPxsn3*fd-OyN7oLuDsiOc}Cr<_Ow(Po(t8C zHd`s%#b|P;=c%GzePJhZj*no!BR4uO2C7>1{(kDgo0`cJq(w@z6`|q07U^B7$rRqw zw}JZEzj6K!z4LsG>*a}6JItxMKkTI{ z^3wq7+Pa_1Tcb3!a}-hp9@1XX@l%n}Gpmyd?<|Rw-5GTr-??0+C1&D^3=9R{zF%*z z2qAjov%^Wj__F>p)&x9{dQ*|LVE`Z$bGZE zH=-~K_07RFJ80gBki)t3I>0$}O;gVbrYK-&X~k z@^3|uOZ@3%@hLJhLB7{OBX6qXu4&=)g`@VxGfA7)>?E{`nKB}Bo89SPdb{nGyriP- z@%f8fW*LI@t-(f;G{<&H7ra}OkP2En@0VT_99CUsZFQ~o9V7a;`uB{ctBsTFlkRpo zUDD?hz+NTIeFtAa3^c~E{Yv8@H$g)}b;fhlf%^Au4A=>zKf_cSiDSA}P@C3C@{quc zVAAi;+?kb4!1Uy_#@`!=_tUR-2YVN3Q8~Q_zt}ISdfDtcshXy7zod>MLqLfgjYz;ZN`aT@-cp;A>_GlG5t3u(ddONWb(Rdq8pfNd*Ww zV9C-9-;k4JE##yy86#Z7%vf7dim@0b$iQ+3-Bvbai~#V@V|Z&HVRa90W^m!Mo}6q$ zuLcE&xgZG+Cp~*{rn72f2D{a5J2pR-qJIkR+v7$xjeV~n4&!5T79By#4~@*vdSN`i znz-xm(3#Jb+WkhaKwc~sflbv1lrEd}(P~Af$p?-P=g3V>{>sV~;jP_K4few4(Q*(l zw+Av(av1aK2e2%@9fm}cKrBir_Vi>G^H-E%(wj6iV;xFl+}*bvG}dN^o;x+G?ou@z zsFH)TBT?E2$0@C9)VX+R3K^e!@`73>B?Qr$373kSz?2_H5@6emADlUgp}6JC^4Dn( zO)Cj|yzG?uZtn|+-AJtYURdULcE(#AdR9V3g};`>`idqw^1Z<7%tKm6blLI_RZK>f zVg_q51jN2WvAZW)DQh5r=XX&-!P}N=j z$CX0$FH~I1${*gdb%&9GLumWu>Q_x4((g2xugSxUL2xQ!+i9Z(L-yPjSvD*H(^Vke zH&?qqvo$0`+Eiig*4b8HFAdQx_Tl=Yv)7>Y$9u$#Fo$urZSChDUgbI1DbMXwf&2;M z4HMlsiiRk4Ve_a7*#HjTA}RnxGgi|VyV2cZhsXyDd$oL&hjY=+;}l(fG^TIOQ<}Z9 z)8i(Yi0ZJzQ36c&6=#}41JdAUC&i2_5H|^=bCU zonvi<``8nBX|H{R(HXJ9r7G5CkfKxqp!dL(1 zvDTXo5%TicW*(A8De9DTd3)R{p$B}8J&zs&yX1~!VpCO7v1stJgcpKKw07*UtM`!s zxMbmtzfGJ~>j3g(XgA&KZNO=+LsrR;fM^OFY*aqy!bRxpO~C1}0tgr7-somd2ovMh zA~6s%TjU$#3GwIlcVjb{BdF@J%Cp{zHL3+q8>-5A$^Ma8x;8|)JvPwq+PlCrHjx?hXulSkq--s2DZ|6TRexaT>UNI+)=L!3R|U zx0_%$&f@IzK%G_cb-Au^FV$Cq&Kq@KC0|ZCQXYM|rxnUUA>9a4JP1x*^HWQ|dtfUs z9N$wqRC06Y zPmz$_5W8km>;D-43E$Kb>EU=h`Z<#LRWXk0v`M@}QQ-rsX;!Q%I2~&*4A;mDINF#X zlVq#+zD+C+%bx4@;p_eXIY%2kn1V?&)?}U@(lZEdwqR%Zey6p6edTRIqQ!7>uyOXR>2>i% zd)P=bh6PXyc}%(S<01WV_nrjY^ZW4UZ#PyCXPpA?L4;KG(7IDEPs1qR<$zWBSlEa6 zk}7fW1=6Jw8+znmC7>|VE0p;YxC`*Bex`^190r)NAkZu&87>VoQYg4ukKh>nqFsr& zEdm1!KN-$t47paCv-RSGq~MQcgj`4oM+f^pm&CULIqBdA)euTSsnKSHpaacy0r?&A z0OK{V405pe43`Zou{+#R$#)6}fta;$=QJOF*q!F%ScK#Ui-Ow452F=G-9RWBY+CUr zHNZARD$^>FE^WH$P7)AvgtfELp|KLML|s_!VBth5W2Gbsr43#}a(9|PrU*rVym)E0 z1UTrgz-Foui$xv|-9_DUC)I=9&F~%zj7FI_Y=;bp6qz4-q(AUJ395*6lI4|6yR+OJ1@a)0590! z_;dm>*auaI4_Au-1zGLUr1u8u9|CG^HuY>RkF{ovudwW|d`oP10V?_^p}(PxWPQuVr$n*0LF` z6+7y3%+PC)G!Eu|*WvYu0|uo+I>BuW!^4RXQ&qSkI@(AuCp@_1gsw)V6pwp}D|Hu0 z6@O?AHid$Xd?kSSW+6V{3ho{KCy`igXoamH1VOt;CJ1OCe`U;DV_F}717Mb4ty=Y?4zdr%aH9YuJzpk4;qDRI2_Lp{RZ@_~X$wS+)Rb^%y3F9{`!em-KE z8JIaRCftmAeZXg2YX&dSlXl(SJUb`?4ZfyMio2jUO-*G}nIN8$9og1y86ZwW;neRR_m5IJ6mnZKjUGoTm$eXL%CfzzUwv6mfr;1bFXz_d<-q z90IWMv1)*k2Ea{*VdY`zR<5xmpftq|Yw&z3R1FxDj31TaWLXByDS5fVyrO>cQ$#>* z1%3}^b|-oR`ULNU#L!ppD!66%x#Zw&@NzO5n}see6vdW;!xeWPWKK|Y%J~}?UN)wQ<72{ zSskI!I|jNRHX$-hxobxU!>uj^PYWuQSQX&InTwpA@TjhPCy8D}%EQIzGCeW0Fz1+8 z4L8n45wTh$^neTR0b;5s=Zz>gwcas%2%?jmR(A)7?Y{oo9`icH)64RwTX4N=Qv5wg z<0jdswFkHXV6En;<44~F?V79y$|KDp(pAr{IIEl-MemyP;;ZBMZQ#P}ehMANV|pD~ zpJk_R)H+2RnN!^{zZvW%#H~y2_(>$D5#z-~M=>N~3h97$#=P)h7qf1+(k?L&gXZi? z{7Ws|!13*2GNNIWq_DDm8#F32LvS?|Uy$$NR~97+3r}tjv|{4`S2IWP_ix@m*P+ng z3HE@a*K~JQfTQR1WG?8H60U1#@)hm8+-PdC>-eC> z(P0xu%fp%b5A#!^iD}WaNdN0u={xvX!IlN+?G0v^j-( z|FNu7dqk7$H+VY9cJ9yQ;wlL-agJOPvw0G1g7phU{2tsc#swVUYZB=MYNG(I&4>=doVy?k7moF`395Zmg5xQwtok> z)(Nih3jFUEjJ@vx=Fq$du=o3e!Mhh*RVDe1`AwNOoV|KvyAi=G8DLqBxa}txr(TSB@T2opP5QwQJvM&%??Ip~gGwOOi&*>>(!rcaK4?VJafepz4vK3zJh z^}yx=ipDJkg=v(~hSNd8U7*|&u9&=2J|)5^5g)M#&niTJPK7te4b z8~XfVF#i%_>nG=LCc)AH{JY??c6s_dfltSA2)oCJt?DAgyq%Sb#6FV@s~)&(KYyme z@54-wVA@d^iz7SRWU33dwZJ?K-9i!ER8w{(xH@#tTXw_MtL*d@A8#E+)}{pWVv)=N zkQ4#tmw=-Tj$489o{iP~v>I#6np^g@>R+fK$r28AN|buE_8t(*l|B-FaV^w}y&`w1 zXx7ogVAv^DFa+kL_rFJoXq;6G9{uDtNusQS?Q9WZhma7kYVVb$7)RCk#C%daZ1F7K zKP9$(HFlM7`Rm7cOQptgwK(gMSnH>;<&x2RUK!ka5+imy?$)Cwc5>5tk8Zhc{4?VO zDk(u2Nlk}_|!c9mrm+c&i&g} zhP$}J|41XQL3@ELQlE-!+{k4##Dd^VdXMU%zK`$vJudavmk$6b16wDTS!|G7;A!C? zLR0{IPFRmA;2@^tW0yNa(Jy10L9VqDaq9!vpVp7w6@Bkadq|NWhRFchc%Ld6TH>f+ z2*LIMuLa}S%*p1?9-vlK^OZ<&-R(1U@EpoBsUo1M;vzL%&EbVGvtQ(n%x^uqBh_Ie z{FG7K4WoAq2x_JkT7&f3a8E5VHV6{k-57GBuc>VmmzwYSP!^LiwG zKz?7IRpL2O-79(CYvZxkzrAkyP1Ov>G)FwBr4AE!O{=O(|Eb8Sp#-zBq~6pe>CTM*8hDBylTU`g%{ze}~K zcC0@v5R=3qzz=CugBU2^bx%?_H&yqZdh~tnz4wy^@C{A#xtFWyiGMt&9pQ;Fo zGk^dBePrcIHK}%wxnYQuy|lXZlRdi=xOo*-=tGz!EtvysNW@BcywXs=Y zchd4@-oK+tzSRy&9+D>mdPRnr*>gdqg-yP=A>Iswq!L3FVU?UD&{b z&D75=HJpmN{9Q)pa5n$TUndWHoDH{(ViVeyv6Lcog6exfn3#Nh=LkrCx@Ch4MqAgs zvdzc~k6P<%-kJR{o_q~Ipvh=#jyJINSGZI{b59zB{0Gx!>a*SUJNV1ZhE2|a`Nol{ zf<@0bA4+>yWBSZM(RH#@+3e!dhqSW)LR>>I_(a7y*lGRdc)>-WN{&c=Ts?$q_~ z=^g!F|R898}%zt5U5yBlB>DKF^Z>FQs`J%_~3ButE>e-MiH^W!Ia7MXK z&ZS#e6&8*iisi*yJKcgQK>4{>=m|`5E>IK^M%HXmmHvEa%iN0)D!#w6MX{DQ=Rj1m zPVOfK%06^0Yr%rfk6&`?(^R_EQ*?aAVU#*Kj)3tNDAU$epU?>;fY9R6R1$45NDmtS zoqn(?es+miuTWX$=={-Mfc(8wyy9m_TNLlhS1d=`;g+IKL(c9BIcM!NsdLTdNyhv` z`s0k`KOFm)r1?SGZ!LLFe9&^PC9b(Gn@#B1%Vp+wYxCU7K&A6K*lrF_y9QL53&X&4 z0d}Ea);VZ6GiBcQ?0HMxP9m+t>~Ily<_zlQ)ak2%Kvx!oZF|c+G%7mOcw5XkQ<2gjom(fc%w0#GqUKagGiaJ88Bkflgf7F&{l0iZBUlujw*%f1-xSHf|7j;azUsA{FK&GO8li6WJv%ga@VpF z=VX>8)W3H2$?{OG;h!@ZRJ>@S$$WbGG;Wd^P)xHh$1b0$nt)#qY(`it*qkD?k>ljO zhd|1emV8d`QLxOD!B&#B#0XpPr#3y`E5u$@AYlx@Nqf;#|)zDF?W~14P426My~&4USWq-f)mTv&ah~Y>$RWBC8U_p2y)e zw%sG&^rz5?rPmv*j`dz5O^$B2ZKQ7(%5q&a)K=1@S+ZS(38nC*iLrNR_*I>!6w}ZA z%1FF-K(Vf=K3IzE@*#>AJINxdm-7^rj8*m-E0n#UsZ7ecVYDb8VvlaT$U>yqIPbDK z4~Y1B9a-B&l|nqbXbalZXMN!?%GBpVb80zw94jjF1ehz)SnYETf~jDgnYmp}L-}NZ z>Gfr-V?GD0wuNU?B$)+Pg|Aso78H0@hEmp(#HnmxlW9nhZ9(FF!CYL#`JMl z(T&5QW&tP8)2sfC+l`rvY)g)hp+=`9;_*4R(n=nB7UUK5_toQ~UJ!L=bWx|t;XpaZ z1N&$5wFJ>J8K5nhDi*p(2l`SCUc^Q*U&I+CFv*V>E&CrSPXb-}uohvG3(G{)gP%rG zr|HYqbWc#c(s%UknF@r`1lJWsK`gXjz(0x*!Kw^F{I{5x$obH19kE z;QgY2uiPe-C4+Rx;x%YBS#%3i%%k8+-u$+g zM!=opOHe^Bh4p3TeqeK05p0=RM3s;_hsaNo(`upG8%jCG?u^MXKTxrdjltSOcj9-(vc;S+*z)j*ZJkJWGAq2y4SF%wo{X(NkXyAwBA5k?QWbl>TBO= zBU-uhtJ)mury)!bcctvho!pMfQZgEJn{MJ1V8P@kuTk!`6gKAJqo&=~_83e+rk^!&pD*P`>{i&rPPM~`)P;DDhW!27a{G6ybE zp-hE%qbX1-kAz{iYTC3N6Ysx@Dkt&P<7SkHPy zK`jKiVc6DS>I%G&BwY*JJ8?G#LGINE>No{ooBeJA4zd<U=jC+6{1Z1kc#t$iifM*9ugq_8-3flKn{ zrU8RSH!Oa&IV#f=5WX?VSjh|0MEKKm@1fjd-r>fuD@kJ{_&}N=53AuihF1OzMrh$3 zu{Uc_PaL~;xEGCYuO??LcP$EA-C>BNU6D?mR8=!eQn(LkxTg0)?dKSGfg7&3XAI^}B1hjK+) zqvXZ~lN3oGphFQbW*)3^hsMG#Xm~)Kq6a<{ZY z9~k;GjO;Hh^9)Q`uA2Q+`Xlr!hcQg97`z`Vo3>A^(E#NVC97Jhwdlz?pm5}QSo4q0 zuj(8aT);O)HxEMHlK`iz!^%!Wpde~29$IAY;*d(R{ksR;+2 zt2a<+lbBqB;?KI|Gq}VELuHoyOG1z`TdkQA!nx?W(dWB-C~eCeFjyjx&7_Z!yBlf}jAYW)tJPs3-~OEM;DBhbNFx+sGFiQvG= zbGWhUxXyyS4&_+PcKIZ^jbLh$V%FMRJarvx-8rD4jF!0v+}Iw?0s_}5~q5MzI>Z-9gB$<0+ui> z9LXZ8cS2{de^eC8$x^rB*v_wmaw?!w&u;VpDjpoXZln4zojw!>d2!Fz79{RtKiz~^ zg%dl^6AqIMqRBc8QwG@jTExc4TXy*Cv8E?>=r|;C{t8q^F;>JovL zL1F-ZZT$N-@VCX%4J7rkvmRrW_GpBpG>eqaKuhS*{T6_rLyM-fNgR7jI|S<;9yo34 zGX?*yc$P3u2SlyAj<_ePJ|t1ylHy+`-L_A3js(Uxhpu^WOtDXAs1y@60r0gnRdj&g zXvjJOC>&udIs-h2J3%GNUkq6}L#R1>oeQ#Q#mRcr3=pTZ(;E72ld-p%#&NCdEG@i< zY{Ur)8+m3cK5F~%z8&+qUH*u!K!2|)+lUhYDAg(SWk76%RK@{fs8UxxZu)RDFJkn)(p_r(aP&v0CL{63~pZj)j)@@U5-9Wfe z;d)95l*fw5I&={bR2j9JXKO^b$&aolG?PAESpPWL-KEj79Q|G^1x3y6qQwFwLs)7S zO?(4*svcO2$Yk<73sAd%odLVdqm$O;`L5qXW&0*HA~|`P%&b(&mE89}K(Bu=9AYGy zP7LM|i6(MpRvc(p*n5xxmXYxfUb(2W#aw;<3_exf`nfBAA{>~A0+zQNo8X|AcLgm3 zq0f~^=3B@4c^5Ld^H;kHA9r9gPX$)j1D_>9-hTzP?G9x$Z%`<8{(hDc+q{wg*YOMY zL*!6EId6m+cYUja=BopYea3Hw2H7wF<+$>^GPr&j_hp$%t3&v;aS{O)WW46Kmn*p? z0unHxv_EVt_~I5B?G<^-R`0p)rY#1WZmo$v>|4d&<)!)z3cd^vCnK5e2Iz!L6p{GNL{0$E`EKX|+3>--+Vr zpeP>90QFdh+U)}b50Fbb=UJN>AUi{<5umyVcId|YL-DGAq}4li417=bKi=LIZR7`s z>VBaPg!?-h#20rU6qbA5PyBNGd;^s$gY0N%3fH9t*2z#kCMB@(-7S(O-LEN#BOaj+ zX@~7)J?ny##?@yfEPnIBx)&C7!T!eQkDEYQOHO+ATrbWzL8IZV7&Q(d`_iwHV zrJ(_+srdk;Y&{1|)7iH9WXpy7`{-wW{-kcvO1kncaBGmDp$J__p9X^;n z4ubcg1+}L{MBcR5h5SjNz%u93EL;`_bTuGCYLDO8PO4<$<_VeJ;ZS}!$ExwnAuZUm z@8-$`0!STaHNQmEV2rfaX1GH_l=Ub9s(y?#N#xYXnFV{R`Zn@sMm-DGL)a88k zy+b)Jr|;Yu{h|-FmjWpI zNHB&lqQs7C7i!fCC_3;5ayJ5s``{MjWy1aB4&O#5f(B(vpB-!4=^=S=UOggN_ZfKk z{o%kNIgyjOf<$SAS5FA_hy{kVC34pjr5aYotU*8?244$HqwN&(WzBM;!ueB(AQK>v(0dY!fJ*NmC83E5NEZ+_p$UjIQ9}qJp(}_eMFjLsXriJ5 zA|kegt|9^oqM&aAh$yIlbWm@6&pE$)&bjyhKi_v|7}lE2-h0inXC<@enP=FwYa4(7 z06+==ATR*J_qOmi$lrZMz7OU5Am9GvZ?M0Y3-W#V-~Hch#32HJ0N*O{cclMb{=1FL zKl!qMuY=^*QTnI0*8k*t@_jhJoi@LY7vKNghdJLDOG5%MzOT+d)YNq3Uv;eb{;ez+ z;KDDD;`{Yke=8Rd0)U1rDB#U6H|G2FDk$)t->DP79|qr-=a*;m%YQGpe_1p5gK&z! zf&6U`8UR@QS{fLB6hi=LcKTb3fBc5=kLUkgt#&#PTwFsFNFk&Il8rD9XSFLK^e8Tx zbTrgj)ytdUz01pcm%Y~^SAyRzS07hZ+%eM8*eL$r^i^&2buG+I4fOT(4b1fojg5`1 z^nSPfzjfkBaQl}YbS(JGe{QzR?f)mXfvGV+w7$NviJ^ss$$#v`%iF=h(f7ZJ{_n^Q z{)XJZoPX?Qre;R^M*lgw>%So9_wZjL|0}kkxw*mbfz!7zH#0N;UnBpYNB?)^hQE;; z8d#YA9(PjRZzqy77d{r7lQdjEPg1C)A2CV-_V{M%=Lv;VjT{-5me@(0&nTJGblyg%47>}$;V zM?J`2^9u>!_f+Ax&z}(dWuXEMS-PU50XL|Ke9}zPq3>w7+$JMZxUboM$dx&LV z8p_f8)rCD*L16bJZSO1#XELXKr&h z9DjDtQ3LMM?1kvFe~in14Y0^jKFbkqBmM|_Y>Faq?=v5^3Sc|SDdUn3jtvsJCvF5a zPli`0_`IdO^Cz3XI3FQ(&#a(8|Jc{tj;02Wwf zQ#*iKbwc;XUN-m*}gs#B*Kc1aXIR#_q>EJwgu1IeAnag*g}~?UC#>2;48*Wl$bD zuG%g~!%3yC(%#+7q-RHgX%^Qcv$%*-sCM{d<<_T-_sN)No|6ytUA)vqjh>!wYB1ds zKl@m}_n1~X7Ny3f9nTBaqPf9IQuDgV;MHR`ZhN*s2=0X@;*PGY4~jecjFvPB{Y}=A zjxW8BtJum5u$QrWKj5iSs5T2+z3~tC&WhW2GwM=mW-# zPnVNUljbob_?@|QkM!Uk>S1XoGIjJ)aqw;tY{-G?$bgPFy|2=FIfK+f(42DY57Hi& zJr`JWmLd7q6^f1@xDcB{KDe)X_T`^u@7Alb2_w+3QR0(vEa;Fgg9TG#Rk7+C=wzqY zwF3?+SkeF&D?2f*fK8j+I*j3Ug;U76VZ`JM!rL)UG#DU9Gq}Vayc~6r^U21ih&6p$ zt&}iNi93CH1y zX4+pZ#*|5?W~%Db?9QgrDVhqn>?E0~w}9~q>f`$iiErH{Hd{gF*3)2CjY`mAu#;%f zS-EGv$v52I`TbQy4V#N8YtNR#l&cL~&4Zkcu~U(QzOUOZIUXPpm(H3tmCa%C){|sd zb3aXFbMMgFoCxqi(r2yN5zCre57zLB*c3!&Czt9b#}L>w z7Qho}l(J*c5I?YbD+NuM{(=75>ytZoE$P%bV~q~(CCN6byRf)}R+nEj{(PkClP5bg zt2UX1hNorG1(EVZHa0E)v@~b6OqfX%Eri6Y?KH-ws|Zb`xzo1WJG+730x{|JjS$AP z5EchuGq}ZuxGG~z|63*d+C)@^fL-=E1$BM4IToqatIScy-o#%(kyfn{Tx1k%`l>|G z1OJ@3gyhaumRzNJSoXZS5h~Uh)eV$W(vXHwCPjBA7X&M_6VCWPHN-0n+huPNVRjg2 zp;NK=K^+lXlVMu^XL0lM9)c?A3Yq;BjGaTQHPg{_IbEc~l$5%0^`4Bi~RRWs2 zIqq_*$Vel$x>Ry^q-#WjY0YG})NPH>-Zy_3hm{YNeh)iZ?r2ke@LH8uL+t&Qq5pFRc89n5oY)8A*USIH7$+u`f5F4Gh6w(x95 zY&42Mjz0XN-&B(qXsVU(fWxme|M=>IBlbPq+P%A1ELVSY^=rUu7_RWZ3I}01B}fCv$7) zloF9R^Y9k~mw$A$>p$nt-(-?!J?X%c1p#-oV&*9{F-Q zK(+YI5u~_>cE+lhX$3W`oBLjXuGl6xGr5bAq3X#%)T=<6whQ#rwAez`!UT1(wEl1b zr+S;+bn1$DMYvgd$xd*hpLS;gFG!fShS(oCdYXwzDybC#xd}ST+&5?j&(G<(w^tf( z+#2v4zDL)>rgJ;wAglU9sbvBgRZ%)wmzp@MP9-Q@nnS9?*!4Tfchd%5ZNbY(;~aCn z1vG=T>G{=y%uQ<;$+s6qce~E)1SW*bX4)*8nwev7M}v|& z7Qd7m<&pa$K3VS3m@k)n6u)=t3+uz)vwt2tO?LDDXep+4`8i(7BNIo{fKN+unR5uS ze7%RO&PqJ0S=Ky8vy=Q7fgjVt&h;sGm>2(;R3gCu+`gi&S|J;DKi+%Jc}x4MRb0h1 z7A~Hd|5;w<@F1YbH8?L%_{xF-i+fH%4x-Xyk7M-ARfKqdrtL(C)SHiC6PT1wnOW|i z54eY)Li?fE{T^>)xq7exZ8Y1@8cT{jaXW6fYvgd~?2jvVGB1ygZk#>#weJ3dFuVQE zVg3uzCPr*nzk_Ye-t*3#qdo@qQBa_8e(L}15*NT)iLOy^f1lb_O)a6QJn4l-hW&P$&t%y709z)>w> zqtmYoaYf&OLdr%36~b6eQ8Xj(fufaA(a8h1RCBTWO5L3rYUP2#cdH>>G1>J)pTO4g z18FnYTDj>~fMpx2f0{_LMXx^H$AJMDqRL`4Wdkp#xJb0Xoqxl{VJ>?mPyt{$wv zBa;6Ri8${+(KMCqz8^Ry3j7qoQ5y9)B6Ds1$k~1(?S&3fGHQJ=s;4i1y+4(KHh{lO zEkts&b27LY$oR)v??vfzZRdo<8!$u?LBdXMP+Uh+Tn=GBy|sJVl;w@l)Oz*B^B`kz z=vu-l9qNc^$%t$D$P*`oN7$RAr6Xr9j}9cf(Mgd#cT{#D*8B|n?Twp=GmYoIG>_hR zkMKA@=5ay3azp;h3kAaT+qlB9bLC?LbSYe)COlk(PFr9mjFaGkT=Ng9Pn0}*ka5qI z#fOy7jj5gEg7eRmcxRP$Hk9MuPTKXz5G);{;zh1G9K5Ls+h&imv%sB4N;RU1gEI1l z3S4N&$(3jsb;6?loK?5%smOj74LfSg9Ka=S2|`J7IJurE7=rwf2YNVK{# zdo_yD17%pQ>=grfwUQ2Q38Y0Ze-WfB39>>!_ORsMcv3;7<*{qh1-Et>-Q98fv6Xhu z^?q*~dOgVPmr!{Nrk#*slGo$Itw|Xm+OL?PAi;eAa^nQ)WE3k$XDYEqGaTk~UY&R(p;S<~@Ol?a_ckLeb3vlWIhSvkt&q6SD71b=) zrdt%5&gfTuATvt7PEZ(~gN(g_Y-fq(e-Xtequk$O=H8>x;{vfCMcn7W#X=Gt*UhBe zrPBajxg?Gf$;<)WZz~ zB40gonUZ&7r|cEpUA6cKD%HOC=73wKoOQIaNr)Si07pPmh48PyD^_ic8rif=Qg+k& z7N9DND^O#Pz{F!G8;>Q$@-&W`_QxtDkid({X ztYM!_;KaWoJicS&K4Is-s7sFq4*hw+WI{~>i@SPT)l=f&^9_}v*Q(Mhs`1i?7IcUv zOSq*C)kfVvq2|bnk_dLStJ|Omo+63=DoH0p@B?NlT@~692LI=}6Q-8hMT$3&6L>D6<5_!ZuekAMVfy zR4{sIg*cC8KYhv_m(EHyn;ng)r%18@DK-^K`ry|cV=o+Synwc1l!A0Q36dws2tyrf z?dBwdkhhWpqlu@=0#stbj4^3Cd26cHCLswFysRVJW_pLQ?`AZXOP0W47I;vJs}d(x z#=(^-aOE?2_gjkDGWdEUg$wBQBIM{)A+FUX>MIOLrhkdAHzWSO53 z@uSGKq`1jtcpL|MGnO+4Pdp-oix_QjgVbXn)8I%psiXp2tpQiBpI$0T|Pr6W2KYIiHYURl@6J8w)+MrITT$PbJo8 z!MAgyw4X4o-4VwFl+m+DnOu-TmHejr>zhX7w&>-Ey%c;>1BVq4=sqsfBAvC_-u`oa z`+3PMKZyvzZJlTLR=#T@CO0utnl`-dkRIM)t_hnfAiOp7n*u2eV@Xx=BO!s{nwYz4 z@95?ry#4%BoQ*eYUh(8`7H{DyF(Np%zN8;8K z>BCO~FXj*VDvzT5$7AnsaUe56fK){1=tiZ(!Oj~67G?$4c0(=_ir(xhwm4y)5tGr3 z<2}Kue~=QxnSQ-*S4+x9?0Mj~wLphS1RFf#QAw=hGL|fpBYtZ)O^`(7%N!kD4Xm75dhzHk6j~vpDH6rhK_w5-F94S%e7@86-xl6 zS!H<*vF^OSZd9${6Hc+|Ej^IN9jd{l)KHGptRIU)6!6wbH3W~E(u?D7FP}0PrahB7 zav-hd-iPbBj7c&=0OO+IHhT54*92THv`eG(z`n^1z@PI~A_*b>_7y38kEz?XM?PCT zFQ0t;?n-^#6E=?e4WClKC+OGi!jE}Dg0Oe>8xoHk{2T6L8+T~5zR;X;cAY7czfF7G zxcA4blYHZoREaV}3GV$biaX+W5WeL0pa7X-JQ9k}&LS#qM@oU0)h=4zy>R*aH)6`S zM?YaH&~3BUbM&$~w#PiQ5Qn47fU1NIxwqcfdSwRh^SMWlFv>DFJifbw`&I-{E6#e!#OFD+ePI-clo@d4lQP-*!&-)1a=ZT7{&~9r4W+PzFp6=Y3m(jQyvGGXvJ@%U_Z~=bN$X!? zb+Gr}Xxr#1k@x#O?jHM^dAs`6%!wTb`pncg;|pQXo1D3lnl0E%d0QV%ms5}u)lBLU zxhqE|*KJ<3Fa9)tu?T_S^NsvsBuFi^t+LQqntf_p4<$}ny_S-J<;)?DF&GQR{s=qg zz&~;(*(2DzR0A!HgSfc1%B47C4{1Q0SRX1tSZ&)TOjx}}%z(_W4`t=Dlt@_QRh4xQ4@=;pW3J<)nrLtOC>71E+RT z%Z5*RYF*Hku=7j0S_=7qi}458LaDKVnxY+XfrphM;syTLlB#&P$NE_;x7Jd9KGBby zBnbbg_T)}h+%N*1WWP&%fA=0zM}fqjA+(SrT`9j3#N!j|OcPkHnrSWct0qL`&|+x@V(WSeoG3%7-aK-uZj!qe?WC)|A8n54!z+Dou4>^7A^T}2;D17^!=GK#L zcn9&2+0`zFv_fS_^r6E|n4MbF$DWmpisKit>7*zr&T5DVE8ZN&@y5|lJ+qQVu6+J2T z6Z`%{`@=PHU1Fd*9H7B7VZ+jpz%8);F;M`pmct*gMDc2EL@u5>g74Xp-cK_l;4(qh zD~Myzc{q^?#zKUT!q)DYT@e^BFDQ|7qYDUs^wx0O>3#w_=Zk8ey;gp#5R(^n9(Cox zni@$sIc;sjb{cVq85fWywp-jr(=RLqST)TcDxlu3Z}k**HW3(@LKU`^n$XYmr}6a7 zJV$&XZFi`8)hEQ@+X14BL@}!LfD7b@VNK45}_=-2fvWwO*!vaDT8 zE*H<(?c-jSXU=)1bAgB0bd(ft%JeLA^FmvFvLJi;OQ=DgO<(B1b%D4~FfL88LkNL_ z#)`v6Y1r)NK%) zb>9uSsI-?C|1g@b>sJu53qLAeal77Xpw-rLD2Wryykiw!Vl9(~`|N)4bz93}v9j-3+4DBr zoizJD{ZX(^ci;Mv5N<0oX_c29A1UM*{!mzr9vF2s()B`d4;5rO1m`fxSvaEWq1(4g zk43tn)?V!R_+V2c0h1-vs%1O%0~h%HX5x!hz-Ah6db}oqi{m7g6_F;Yk4>ITULTtg z$0zGB`eTRFiMvJdE54{$vdK>K&tTi6)3pi6+l`nQ{Y%eUBj0~}pY&%kv8b=L=ep3r zk~3NLa9Ee0C4qG0&+`rHe_m$LQ_o?UEC@f6dj8WIgXbn_NNy|etv;h{Q}rc8*l zs+Stdsg}&$-4T$+QH71Z5r)02>#Op?W!})Yz0aM)L3VT>cRkz*{!+qj{&C?uE%}4K zh{wQ<;`|lA>vLJJ%12L#8E()ae?;3fCLt&Y|p_ zG2G8cWbeHRDuYgWp88P$?I=J`5$JcnJLmg6>a7W*9JZxcBPl?%vqri zI(+TjCE`N%jMCF*4|?AI?^Xrs4;oQxcpI zBN9=}Ud)?#6v-r`*gK&5uT1jai1u^Axet792PJCx`e@MbQRi3B-G|&hzqSYRUGXBW zj_5B(#a-jCO(6t1xD(lV{vOqZl9fv7^_aYgkN%FIOR?q{+C;U?$O8-N z2KkXrUM6(%Iv% z$j|SNI>JwdNOQHWrD_QgZ)4f%{#xfP@lo15GWzDzuUrWYvBC7gK#(U4PNBAyT_x7rl{J zyTPm5++ML6^K=~s+*QRRiNAC!*=u{}gy_-odgJWxHMhE|K||pn@t%0qpVPzXGbJ1PfCGK zabb>t73`|XAV)116pN`%Fcidlz=@xg0E#?g>^Mxq4S0`{uw;=o5pjdnlg$G7kus_M z8hOnpSgl93Tz*{x6a<<@IZgnMiY1IHb#-aur$hnOOGGUNXfJ}jTb(X0$fOA2m!qfT z_>{gP?h&T{wJ0-1bZ#6`KQ$0LBQ~jr4u+r-o}uc0xq84{Z>Z`6*WfUX&UEda2Kdp> zza-lI_ZlzD6s|iM|HKZ#q|yLs#(t=ZjeIS|W-vk=N0tOit_{g)%#Rrz4k>w>B(J8U z2pIUED>f=f2wlD+i6VedO`Ch41dK8%eq`4k~R`i_$_E9sz!h(T zCwT6{zVR5vxciFS6eWXhrG^*E2E)YsNsv1zIzg6T+r1fhqSRyRE`80U=+=IdyZf0* z`=^a%O*#bUM@$%Y3T+4^E<~Mf2jfnIEPj0)SY5M|St7-jx)iJcJA55O92O*gv4^(h zX9R(q1R-N{7SR{e-5V-CrNF*nH(>}V)JG9&L3XjcSO~&N*M`;89=%%b)FKCvTel2o zEgn=WcDvQ=E#B;hK5-yS7;SX*by%|}xaAXw3KvUFu+k@Cl;|JyaOCvJUwZBSQ3+{L!vjZsN9GNm zBHZ79@2`F3tz+z^4$=bzwCqiwA7k_#ASYI37xj!!LSpgBv1eE1xgtLJRn2kXa|J;f zgcQ?MSyRp}Gs)v-j2N?*^f+#^dC*5wZi<=FNweED7q7Gg-cj>3KXLZwgOYc2Z}}ge z>{d8@;5f|BjjeuA<);2|B@uvfmDC5);V6->NS|@tlNsa-xzcyfCGNYJ$WEp}Zdh|I zY*cR9M2OhDoVUfN*k)to@wMkwY6XMm_+*+aj$))D2j1B9iC2Q2dY!!QO>*}On%NZe z?hK8aoU(OTfS{yG2SlgOC(})5`~<+7T$>VP`iMBgPcE70$XNN5YF|KSb*DJHz(`h( zyf6s80_6S_#U~=7yv>;pf+_-a?2KjU8M}?I>}ICyo><%C-6Gobn?E->b-9Ftk;6X) zm%d`?iCJv^BW-f!YPv4@G`M>9l=+2IO?OYNR_EJVn&Pww76 z2piauD^QS2eugoBamIXDL2mTSgdaeZK)Ln`(Pu#(6G3k{0}TWtT^v`(ltt>KJz6`t zec~ z7C(yNRbtf_!{`YT{ypjKm&Cs~z*y&zbxHy_CGeUbgYf{sOI)Ie@9C%7yWAASQAC_g z!CbZ+J=sZRk-;?ZM-Z_U;4IDTJDjZBgrr6Dlaom1bu8^rZlXYH0~ocUI;yr1|eRF6iRhIX+~yf zS==639f zDDEAtn#`y1{WgZvN8f@Q@4=0U`}o91WwY4(Y!-P}`iMt{pMOSw4pJ_J3O$m^X@VUU zq5J*V%FzJH<$@$JA99V!nHL(kFnBPSOY+%c-VDK+CQvQ)m2ALG`wrrhj+RTENhHq>0Ls*x3A=Nh2bvB=u%@p6NI`+tnPcL?v;IK?ICANHpkXr`H3QVZzP{2%6IWH zjb^{(R;Md)$>xMGF!zhHIT}-o6}pE(zfn7%xJ^1yuK<@)5bVFhv&ue=?yHr3l2`*~ zE*KKuKApz)rJLH--$Cs2WjIsVW)Goo7w0)G|HjW3rx7oh5@6+*c+w-Gg%VbX0>~Sb8K<3w*fhhx zm3E6WBW2Y-f5zg1HFPPm65B-1>n609bR;OGcgFF*wl%c9-n1Rq%_~98sj2;lSIg|$ z6I`Ur3R2P)xJ?QI^E8U9OT*eMYJik#{*P~Ub#YtzyHD@m&4<2Qx*B9bx7Uy()x=H} z)$+1sR1W+ZDa$SCfI-?duNinOxu4IbH&Cx}=(sUMl-01M1W`ho*K72UJ~|`WX)#JXv=zc^csYCG5V* zDwGSI;y?Kn9DcFcR_X#|;*EEGanG@{HD1oI-VJIX&c1dy z$K7_H4hiejqzzZ|$qkcPP(g?j5Z6(&*T7FZ;c% zfq*D%9+5n4C20W!4-7h++G-lxsZ9?~r|UWkfV1gcR&P5~P=RiRwaZpe?Bm=@YV{ZA zKlM=TJ#AW>fxq0Ro6-g%dv;tMnh9I~k@w=r-LdJ#`|o~U_jgrMbA%79&QpT0m-j#! zGx%&jOnPC(z$x+HX6J5(;3L)}|N z=Tmf98HhgrtbB96!ptG=^Id$tF&fKp4^c+gxmRi5Mb*$VvALiYo2f0)e|Mm$05&Gj1em1cITCJY|-@7NDkC8kpta6C0V_5nC?uIpbvX7 z32%yzGqG=dt8Ya4Hot3KY~8COJ%E|X;m#$OZuRLE~ zd~Uqjn&QA~G3HOOoHfG1Ob#~y?Be$0thYogMuQz&htXLdrmOaVmFz`{tSZ*57uen( zCH-)VAN5F9xBTvI23>q#;Rn)mwsFx~-r>@zwZ0SBkN1B16o*rELrX1zk~WVlwnaHL ztIZrv<W!$$)2&AcLn^xr}TpY^sJu0%nq3Pw@l7%#$B{36dGT`*p|V znfu>%yx(|ydawO96>QK1O-wlmO=E~Abt_GNGRFewykyXIv>;utJ`Ey5iF{^Rwzg z63zu%L>dE2bZ%xfxFRCQ{jHh7;FreI+A`uJWuM6Jx|{)|Co9)j{37~ zN%zIO%|{Z;zp!Zww6kwEZ7Z4Ip>$iZ@m0;VdA_)fZf&5U?G5wl32`Yqn~L5oOb9oC z=ek>`)l;9COJ+x%VKtkL`wOwuu;Va3j z!=9ZFRTi5Y0kg<+s_r`_l_BklJacR|8X-?uZ9xDC%yqlk9jSvSFhS-K#S@2A)Qz*x zc^dA7JyB7ws_@?>v{gfWl394}w9oEOQV*-II$sF2Bo^(;^Oa2KEtPb)bv<>@TvL7e zQb8O4o@dFZrf|5-TlYIy%>Y)S3MW5_J#IJ4sH>!xO0R<#OARNicL9NNz>yL zo(Ho`HTq#?1(aA z3Z#O1NoNe&nOidQXF;}<0t`)4=kznGa@}dd=Yn@{ZAiKz_4%^bXNLRLY^&Nkn9|Gn z@#4Fk0nrZ*VQCHJC~y0VniaEH7y(co6G@8}ebQ=n*!X?f1T9v~=8k#5+i|6LamT(2 zh~?%Bqd56KaIjEX==6J3P)pyfXq!i`H(_>f=QHr8G;k#<&eqRjyy^vOb2Jq0F>H1BZ5aVVDy`HdKdo_h)^ zeCiNfaNB)JR8S*9yL><*$uYcbOe=%A6XX#?l^NUQcgRdeg z7We(+H|4hdS4wOz-+rH}OA)n|^-)Fyf{cC(4yV>u$a)(tRgiwH)h;|;yh&=CnB_0q zoIj;rQUkH`m(4gW->?-S?{*I}ZfbSWZJ?Z5c-rR*zLfdORq#sjZ5pZf-WAiT2NRck zyqFS#tI1$nz2lkYR;8@x_F!r*aH{X*!1~@jpB~!Q4q>hiwHhQ{TME08wtj!#48pqZ zc=7EPbh+HU?0$uNs*9p@icD6m1<33TlqkJd=dN^)3^4^ewwpVZLOP|2%Bz5 z?Z%}^zQ5a_@bt-SUTT#0izef=r9frEhbFLq=s8+;GR96aZeK;VYG&w9wJe;~UlQJi zVgaciPa%KWe}etGx^(u+n~ju{-+qdJTr2yIi9qX(V>ne!$hP(TTxCdGa2Z7JCH9sw*@MI$h9!#4OVpI8q zrbrA6tWSZ~XCU%(#of;dxtILJr6Y+y1=RqkP)i=(m(4jL!9HO{SO?ioiqRF8kZlU- zr9155@i~KiZH)*O0XKGwfZ(cOZ|^f?)3e+My~vI;v!@$-r~2x?zR+Gi1!KQ>4)F6! z5Gdj6I6)z_1a1>cBp1})ggkc{s92FO(3EJ4&0~iR3?tehTRte|`yj z`=xZ$l{tE&=Dll&-qD`1=l$@z z`u7by8N4o_jHjA%?W_$xVpwIE`310H1>5ior}7II%oHUVW4`H1c1`gmR`T)ESULsH z`V){4ur}PHN;gw&vsW`T!!}y0OJGVrHG=GeqFwdh0ZWjrjt;{q(<>wa>L-ZhM|$yx zKH5}tBwsiAd3^bkSmCFQ5WXSc^&p)p(C?rd$mJkxi58$MkWaFC```C3T>zRD2a z8`anaGW%tSufV<}5s7=-2RYiFPqaBEIub)V=Tl9tQ|E}(IVNrHo5XyK0tAHtU#Kn+ z(Z=q14zKVw|rY9i@ll3%aXQ4Vs0AjmmE(kzrq`3|&}6J)SNYV5~4g#Da8(OKe4 zf)KG0=%&Nz?`bN?+m4oUvp6}G!e@j+;f#r`>;;e|BTDZB8}tphn=n?KMRcqHmln`I zv6X%znjH&PPNV5m;p$TWi3QZ7Ao{Y9dMp%|yN+lUW71&w3ibR!ERNj8a|0QG%nY1U zhl%5ch;duHILoUwt4iENfjLh>m0|(panSyyeUr^jDF+~7mjgS|QOZZKa`1cCrVMd; zhj1@^F0%_D8)ZKce!<#_Pu^KbMN2V+y-x}07q6r5h@`eun~;KLy0MNs$)l+-nhQvxp{v=Cd^_M z=l9w(F?ys)vq;;Pt>dM}j7dd* zyNYgGQu7SI>^)>49k*XD?xY+$QC`$dFRpmhqdfjx#c0D7g&QCD;a|!ZB`JtkE1a9~ zE6N4u|Je5>!_TBxh1N_UDt z)a8j-0<&V5ikuLBXbX-4a{6Trl~tiD2bLxXL!S-~%^&hvQ&(f^^EG@g>0Vr2SCct$ zMzgf^hPtPwYNOs330bv9+n}p2wk!l|5D#fI#%LOz)MTY-F54g)Ng8{-Le9s6jmI_5 zQ>}4$1TN?a=bA((MUHKuF&qSv9*Hk|gxalyEysWLC4<8QqutN&^U0;!-f#y;*D=|lb^djkKapsv={Kwe*hS=BQarl(D3rezPD)IZa zMzhl;IqwDLpirhc$SW6zR6DESL6R7>dsB+&B&)}S6A$l&gel|0z?n9mw4cfVSwMwo z0+E98x^!M%R^%q@s7LaJ<4`;mNpBUQQ+_koZ0a_yoV8g&BI$7A-9IR1S15OHCE`|vz`@m>BX_hC*wn5iUi!8c>hfBl&GQfQV1E`PKi6W3lsgBYe?Qj#q zH;4Kt_dS2?gt0QreGw%A$d*G+C84Pa0ZQ#b3hcU{pDW$2XgwT4>P4?*n`eTnIqrUE z_ZqiaLQ0fhoW|1iZEym=Okha5x3t!;Q>rniTW;m(&HeJ8$yseb9kd+97YNRntEUPo zzz)g|>=h}g$3&@k5mP*lD|#&L_x92Au6XAIr1;=de2VOSmUel!t>nKEKj#w&HzDO0 zxdF#LrH6boEMVt~f-E6Wf%f`us2opL7kClMXWOGmNDxw|^TxiAG*ie*EL`&{BBm7G zJ7_7U{dCn2O?j`8F$syuX4&M0|d_pvM=+{B% z55&YL8I&XY9uF>k^sfCx`tycDNL*-}xeQ>ma> z8DJ4b3S^HPvy&wSjyVu1a-^9cMk6L(&xus>Z9ojLSLIa96rU>XM?1J67=2R>(CSV4V5nQrED6!y$-xU1L^hB z!oSFO^DG5q)aBQOLuC*vOVk9ii5#GpqycVhZ`?4Vl$mO;^y{4*N?LhCkzJw5K5rV2 zq3@doSLT~e@|BLRG!lWR$QI+Et!MKEynSd#k(i?lkq%ZD|7plt}>2aeMGegcp;xxQbJBU|0>1MY!p{#~!hn|!4L;muhJR8AxGjv){2d;Et)If_ zs&MwIwRQ4{aysTfcHxh+7S@HPVh7Q18!1tUswgv=_g*Cdvt|6U&IGVBaZm!hY(0r_G~(wP zKvl)(gS;SF9$yp8f0*G7UWgYXQorce^Yw_bF9kX4`h}6$Gg&zU+(fr&jEpqkv94wF zcRk|so1WN$9zlb3p^lxHiz3yW&%Mh~>}eF6vlwZC$#vyn2nu=ZeGWn_F0_LN(V%G#aNKQYI<&%_qC-@X5hY;|z2S>@2|%CWmK&3 zoNSOejVc_h7)j04)TcT#KE7Q3`FIWqLfQXM2WR3B)&4)=GmJU5W-()5W>8EMn!+I4 zED=|Bp@oJvk)dp3FlLaYRAadRZPyn~&F;<33XrKiEEoDKX2F7sDt+q#uEmRw*~kk^o}QZPYI zjPsr^{*%->|KfqUPanK}JFx_P8P8`hI(*=SwV-|Pbz|!k1v^4*(~*0;d4h#l39RNJY(>!mO?(bj#2uY?xxS_TV(U};ZYP%?j8`{vgFfK2l;IWc~CJjbEp~XTyG+9wYL24MqiHfF&Mti1~6d?S|m} zru5nO)t@-;o;J^c*H$F*2PcB&TI&;nl_U+f8Cs9N&%_>mvmW1Dc;v;itF|{Xd#+V_ z9lu`l7Y`BBtv^nUXF9KwJV!UH5n8bP)z=7q>zf>M`DIl4&K%yl2CdK@M1`2-fzuUm zd4&;eby#2WJN{=0eO(r5OU|pIPe*Brswf4hPGh5v@Q|Daq?&LISzKCY*FJ`DWo&fD zPsHZFoCm00TATF|m(N5?F=t}}mONJPoauRE%$PonsR;4cGpAdhi;+5*?<5B*F>k0) z*T|>oRDz+x6-yiOQ*Jxp3R4`#z@uGu-Ta2P`wAuTZYOnLyxJhg71_CXkFHnNMrZqUIE63e3YZ#kV@uahj>cLc3+HgNZ# zgt1RsRF$ASXyGgoS4TguP3=~AyU-RFAdHgvvZ)Z#7(KzZ4npIEi~F&=Dn_C_YEN`E zow!F+BqbGY+hOSu*7WH(jE6VplTfF5r&NGd^(Q@?*t`xm6l|K_%zWe2HUu@@H_{pn z_WD3&I;Ow#H~Xk2-S!5z3TD2Arl1o=56A$Ri$NeFh#_Xg##zVTd6X~9*}o+z-g>xs z;GdD9{l-j|ujmmE5h(!CZU$q;^0QG>_ydNgLHU3cVs%G4|h(Ze<2H^hNs5Wi_)&y7waRfI(!+@wXvPJ9>L zOTF0F`q!Q~yv8d|!k*8$D^1I@jE@=1&C}YJPZRL=;`D^tF~i0iSbxG}1fo#@{i-b6 z!>!9jnIrs$NC#F*54iHnr|pLIsjSh_zozE=YJ98=V5_Fe?BI2yD`dMCYzKmZd6e=Bj$dA%UTU{73Z;1(OnIB zSsF@IY@6Tk&Zw>B{H|>~sqH5mcy;J(D~E>WhINFStONSdF}k+imip@`+B+7S=w`_VA14>>lY2|j{TB_ zx2}Hj=o0V8)))E(+m5H*~Nz?8# z4=wjSSeJ6yeelt{sNKFP_4fKfy7I-yTp7;3iyUU0(`wQvK%+u$R)KA;hk5n`O+VE{ zXaCszi2D1f??xl&nI@{@Olkqs&A@CYixqLlvB1~z?Nv^0&u_X6+7hZ_Oa6sd(T++| zd;2D-5D!nBKptOx23GdR*O89-?r-4ejc>$*rt{8{h45>T*q|n|-Oc{nvqqap?(eu7 z{OMe9ZS#TTJr`$eRM^U(e76q*&2`Turh&gdF*(PV8N-&sV@JmSNb1h&*`d30depqy zA-=^?q7Y&%H4ngHaFj~N8X!|-Z=fnrReDAz<*I=i)VW#)+dVC3$OMpBsC#vksEF4b zHct*5t`oX9EN|)>`pfXpC_m`FPR^@+KE8?Ze|I&HkzTT&9~+--zBTXRl~S<%_G^EF z9LDrr1Qa?dnZrg4k247z{H~8#?lr0mJ(f1}Upr+zcR&hP&wbmNn(LJyeqC3Q;U7Qe z`nq-Hb){_0c{PMjp4iCWt@K~n;ds|o7XiTip6M@IeE5EVV)1fvwEn>gH{Gc1G7&9% zYFS9Wh?9zcXhv03|EpN}BE>(&j2)aYKa;EiaD$Jrj9{6V7j!9qNZo2=y)q3TBXk8C zfICu=Oqgxt<7wC<96{sEPG7KHPyM*9u)ths5ZvpOG-{rSoStEhTBPE(cAB^8^+$nf7WfR8ns>}`Jv^s82NdlF{IZRi*)lm z`L;N3+|O~mn>sPN)V=sDzscK7sLw*o-^R1Asy8LiJQ`T+8-*v4PTe$M((wbtu1(xJcNEMBMn;vU16@0NTEk1t_y7Kd1dzENeb4O zlJJdkHvuLsG^UYUcz%d2vZO%2AN+DeaDjuFlVe|r6E)k3m+sUjazL%C2Hyl1%AA;> zQ=Ny?LZ$Pqjt{cVd`Pj9DXYoY2x{&B$hSap8bqNHiMfcLLZaZD8nR6-@v0lTQa$Mt zDfow)or+oypW0C4UQwman>K>D7I4{tlxk<)qQ_)IgcFKIF{V|@?F00X&GdfqpS%o4 zvNL0mvGYj3HVqDKmyJzXA-xT1$)Wmoj&LAH$L`?HoFdPV;zT>%%dcxSYJ#sYm_U8ZD^qOaUhG!}j+t%!^_X@%XZ>r0 z4(_c^psBWS5DeaKQhO+B~Ky@rH(?F0Olrh|hT%vP@;B z0rVAw4e$n=Z|z%Z3fFGQ82Cv7jUjK(^zk7XNrTA+##Hw2X+a6OCzeKLQxte0E37Ra za%8ob>>JEq6cQZR(K5>{hvjyd2!Ew$XF`CHNX>}c`q0v2Aev$sEzFKywzXJxBK8r? z`In9RnA*(D{4+E7rgjojpbj`$^#R0-VMp#qg3E`FGSiRVPq69jvxZ*dz0WpUPqz-9 zv{tI#s&ip$XjzQTm6)7raEn+fyGQ7jP)7{VL&4BLaJsJ*Neaf_}#Ee6bgStgSzRIgM~xV|6FYAU6Ss)+Yi0iOe8_`{#~Yy>`9!Y8_)Wx zs`B#aBGUX4!~pMrD|a)JmNFg)9S-XwVHV0jjNh3LyOJG^fqvuUoQSYNaOG{*>@_KF zFZa@{_q{`&$#I^`C%x_1VEHBPVgawbW|zYxKO~!9ejSnvdHuJ2a8Q}w>X0n@C8Q>I zOQVn71D{%bpRpoxNX*5lJ0MJ<8gB2;kIHQc!mNe@E&ETeM&nnH<&CHMkIR8 zrLHLl-wd;OlmUQz4L57+zF3R8kavrD#Z~3PpzAXw=VJB)Cv9&RD&}p(Pcy zT#MMl2uZOGPH_$%bNnFigP3hm%mF3)vQQxhLa(@`>tXpbSkqLesAwZwrU^`4pOC(n z%7MZ5hH0k=0*Btnm%*n*m-ABe(vpP)yMIYKn{HhO`j@5em>YIKI5lINa!~bUQv9$} l1eLAF%fmdRMNCC1(ZD@pUs-W0QG}(aQ&)WMo3Nxx{|5)?6#@VN literal 0 HcmV?d00001 diff --git a/inst/mato_grosso_brazil/MOD13Q1_20120406_subset_from_h12v10.tif b/inst/mato_grosso_brazil/MOD13Q1_20120406_subset_from_h12v10.tif new file mode 100644 index 0000000000000000000000000000000000000000..0e9af7c256651bc77ea1efd15978fc1a51d93c4b GIT binary patch literal 22865 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 eZCxc$p4@%8){NL`zJz<Hh(<)i~e) literal 0 HcmV?d00001 diff --git a/inst/mato_grosso_brazil/MOD13Q1_20120524_subset_from_h12v10.tif b/inst/mato_grosso_brazil/MOD13Q1_20120524_subset_from_h12v10.tif new file mode 100644 index 0000000000000000000000000000000000000000..9a5b03dd06fd1f1d36feec00b02dbcadf77a0680 GIT binary patch literal 24824 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 Oq8ZncCIor#;Qs?tE~38x diff --git a/man/MOD13Q1.MT.yearly.patterns.Rd b/man/MOD13Q1.MT.yearly.patterns.Rd deleted file mode 100644 index 8e73786..0000000 --- a/man/MOD13Q1.MT.yearly.patterns.Rd +++ /dev/null @@ -1,34 +0,0 @@ -% Generated by roxygen2: do not edit by hand -% Please edit documentation in R/data.R -\docType{data} -\name{MOD13Q1.MT.yearly.patterns} -\alias{MOD13Q1.MT.yearly.patterns} -\title{Data: Pattern time series} -\format{ -A \link[dtwSat]{twdtwTimeSeries} object. -} -\usage{ -MOD13Q1.MT.yearly.patterns -} -\description{ -This dataset has a list of patterns with the phenological cycle of: Water, -Cotton-Fallow, Forest, Low vegetation, Pasture, Soybean-Cotton, Soybean-Maize, Soybean-Millet, -Soybean-Sunflower, and Wetland. These time series are based on the MODIS product -MOD13Q1 250 m 16 days \insertCite{Didan:2015}{dtwSat}. -The patterns were built from ground truth samples of each -crop using Generalized Additive Models (GAM), see \link[dtwSat]{createPatterns}. -} -\references{ -\insertAllCited{} - -\insertRef{Maus:2019}{dtwSat} - -\insertRef{Maus:2016}{dtwSat} -} -\seealso{ -For details about MOD13Q1 see \insertCite{Didan:2015}{dtwSat}. -} -\author{ -Victor Maus, \email{vwmaus1@gmail.com} -} -\keyword{datasets} diff --git a/man/MOD13Q1.patterns.list.Rd b/man/MOD13Q1.patterns.list.Rd deleted file mode 100644 index 697a86d..0000000 --- a/man/MOD13Q1.patterns.list.Rd +++ /dev/null @@ -1,40 +0,0 @@ -% Generated by roxygen2: do not edit by hand -% Please edit documentation in R/data.R -\docType{data} -\name{MOD13Q1.patterns.list} -\alias{MOD13Q1.patterns.list} -\title{Data: patterns time series} -\format{ -A named \code{list} of three \link[zoo]{zoo} objects, ''Soybean'', ''Cotton'', -and ''Maize'', whose indices are \code{\link[base]{Dates}} in the format ''yyyy-mm-dd''. -Each node has 6 attributes: ''ndvi'', ''evi'', ''red'', ''nir'', ''blue'', -and ''mir''. -} -\usage{ -MOD13Q1.patterns.list -} -\description{ -This dataset has a list of patterns with the phenological cycle of: Soybean, -Cotton, and Maize. These time series are based on the MODIS product -MOD13Q1 250 m 16 days \insertCite{Didan:2015}{dtwSat}. The patterns were built -from ground truth samples of each -crop using Generalized Additive Models (GAM), see \link[dtwSat]{createPatterns}. -} -\references{ -\insertAllCited{} - -\insertRef{Maus:2019}{dtwSat} - -\insertRef{Maus:2016}{dtwSat} -} -\seealso{ -\link[dtwSat]{MOD13Q1.ts}, -\link[dtwSat]{MOD13Q1.ts.list}, and -\link[dtwSat]{createPatterns}. - -For details about MOD13Q1 see \insertCite{Didan:2015}{dtwSat}. -} -\author{ -Victor Maus, \email{vwmaus1@gmail.com} -} -\keyword{datasets} diff --git a/man/MOD13Q1.ts.Rd b/man/MOD13Q1.ts.Rd deleted file mode 100644 index ceec72b..0000000 --- a/man/MOD13Q1.ts.Rd +++ /dev/null @@ -1,37 +0,0 @@ -% Generated by roxygen2: do not edit by hand -% Please edit documentation in R/data.R -\docType{data} -\name{MOD13Q1.ts} -\alias{MOD13Q1.ts} -\title{Data: An example of satellite time series} -\format{ -A \link[zoo]{zoo} object, whose indices are \code{\link[base]{Dates}} -in the format ''yyyy-mm-dd''. Each node has 6 attributes: ''ndvi'', -''evi'', ''red'', ''nir'', ''blue'', and ''mir''. -} -\usage{ -MOD13Q1.ts -} -\description{ -This dataset has a time series based on the -MODIS product MOD13Q1 250 m 16 days \insertCite{Didan:2015}{dtwSat}. -It is an irregularly sampled time series -using the real date of each pixel from ''2009-08-05'' to ''2013-07-31''. -} -\references{ -\insertAllCited{} - -\insertRef{Maus:2019}{dtwSat} - -\insertRef{Maus:2016}{dtwSat} -} -\seealso{ -\link[dtwSat]{MOD13Q1.ts.list}, -\link[dtwSat]{MOD13Q1.patterns.list}. - -For details about MOD13Q1 see \insertCite{Didan:2015}{dtwSat}. -} -\author{ -Victor Maus, \email{vwmaus1@gmail.com} -} -\keyword{datasets} diff --git a/man/MOD13Q1.ts.labels.Rd b/man/MOD13Q1.ts.labels.Rd deleted file mode 100644 index 57d6c23..0000000 --- a/man/MOD13Q1.ts.labels.Rd +++ /dev/null @@ -1,24 +0,0 @@ -% Generated by roxygen2: do not edit by hand -% Please edit documentation in R/data.R -\docType{data} -\name{MOD13Q1.ts.labels} -\alias{MOD13Q1.ts.labels} -\title{Data: Labels of the satellite time series in MOD13Q1.ts} -\format{ -An object of class \link[base]{data.frame}, whose attributes are: -the label of the crop class ''label'', the start of the crop period ''from'', -and the end of the crop period ''to''. The dates are in the format ''yyyy-mm-dd''. -} -\usage{ -MOD13Q1.ts.labels -} -\description{ -These labels are based on field work. -} -\seealso{ -\link[dtwSat]{MOD13Q1.ts}. -} -\author{ -Victor Maus, \email{vwmaus1@gmail.com} -} -\keyword{datasets} diff --git a/man/MOD13Q1.ts.list.Rd b/man/MOD13Q1.ts.list.Rd deleted file mode 100644 index d5fffb2..0000000 --- a/man/MOD13Q1.ts.list.Rd +++ /dev/null @@ -1,37 +0,0 @@ -% Generated by roxygen2: do not edit by hand -% Please edit documentation in R/data.R -\docType{data} -\name{MOD13Q1.ts.list} -\alias{MOD13Q1.ts.list} -\title{Data: A list of satellite time series} -\format{ -A \link[zoo]{zoo} object, whose indices are \code{\link[base]{Dates}} -in the format ''yyyy-mm-dd''. Each node has 6 attributes: ''ndvi'', -''evi'', ''red'', ''nir'', ''blue'', and ''mir''. -} -\usage{ -MOD13Q1.ts.list -} -\description{ -This dataset has a list of time series based on the -MODIS product MOD13Q1 250 m 16 days \insertCite{Didan:2015}{dtwSat}. -It is an irregularly sampled time series -using the real date of each pixel from ''2009-08-05'' to ''2013-07-31''. -} -\references{ -\insertAllCited{} - -\insertRef{Maus:2019}{dtwSat} - -\insertRef{Maus:2016}{dtwSat} -} -\seealso{ -\link[dtwSat]{MOD13Q1.ts}, and -\link[dtwSat]{MOD13Q1.patterns.list}. - -For details about MOD13Q1 see \insertCite{Didan:2015}{dtwSat}. -} -\author{ -Victor Maus, \email{vwmaus1@gmail.com} -} -\keyword{datasets} diff --git a/man/create_pattern.Rd b/man/create_pattern.Rd index b13837a..c275cb6 100644 --- a/man/create_pattern.Rd +++ b/man/create_pattern.Rd @@ -7,7 +7,7 @@ create_pattern(x, from, to, freq, attr, formula, ...) } \arguments{ -\item{x}{an object of class \code{\link[dtwSat]{twdtwTimeSeries}}.} +\item{x}{an object of class \code{\link[base]{data.frame}}.} \item{from}{A character or \code{\link[base]{Dates}} object in the format "yyyy-mm-dd". If not provided it is equal to the smallest date of the @@ -31,7 +31,7 @@ package \pkg{mgcv}.} all samples are set to the same label.} } \value{ -an object of class \code{\link[dtwSat]{twdtwTimeSeries}} +an object of class \code{\link[base]{data.frame}} } \description{ Create temporal patterns from objects of class twdtwTimeSeries. @@ -42,17 +42,6 @@ within a given time interval. Therefore, all time series samples in \code{x} are with each other, keeping their respective sequence of days of the year. The function fits a Generalized Additive Model (GAM) to the aligned set of samples. } -\references{ -\insertRef{Maus:2019}{dtwSat} - -\insertRef{Maus:2016}{dtwSat} -} -\seealso{ -\code{\link[dtwSat]{twdtwMatches-class}}, -\code{\link[dtwSat]{twdtwTimeSeries-class}}, -\code{\link[dtwSat]{getTimeSeries}}, and -\code{\link[dtwSat]{twdtwApply}} -} \author{ Victor Maus, \email{vwmaus1@gmail.com} } diff --git a/man/get_dates_from_doy.Rd b/man/get_dates_from_doy.Rd index d925fdf..6ace42a 100644 --- a/man/get_dates_from_doy.Rd +++ b/man/get_dates_from_doy.Rd @@ -1,6 +1,5 @@ % Generated by roxygen2: do not edit by hand % Please edit documentation in R/miscellaneous.R -\docType{methods} \name{get_dates_from_doy} \alias{get_dates_from_doy} \title{Get dates from year and day of the year} @@ -20,14 +19,6 @@ A \code{\link[base]{Dates}} object. This function retrieves the date corresponding to the given year and day of the year. } -\references{ -\insertRef{Maus:2019}{dtwSat} - -\insertRef{Maus:2016}{dtwSat} -} -\seealso{ -\link[dtwSat]{shiftDates} -} \author{ Victor Maus, \email{vwmaus1@gmail.com} } diff --git a/man/plot_patterns.Rd b/man/plot_patterns.Rd index cf7e32b..5133d63 100644 --- a/man/plot_patterns.Rd +++ b/man/plot_patterns.Rd @@ -7,8 +7,7 @@ plot_patterns(x, labels = NULL, attr, year = 2005) } \arguments{ -\item{x}{An object of class \code{\link[dtwSat]{twdtwTimeSeries}}, -\code{\link[zoo]{zoo}}, or list of \code{\link[zoo]{zoo}}.} +\item{x}{An object of class \code{\link[base]{data.frame}}.} \item{labels}{A vector with labels of the time series. If not declared the function will plot all time series.} @@ -26,15 +25,6 @@ A \link[ggplot2]{ggplot} object. \description{ Method for plotting the temporal patterns. } -\references{ -\insertRef{Maus:2019}{dtwSat} - -\insertRef{Maus:2016}{dtwSat} -} -\seealso{ -\code{\link[dtwSat]{twdtwTimeSeries-class}} and -\code{\link[dtwSat]{plotTimeSeries}} -} \author{ Victor Maus, \email{vwmaus1@gmail.com} } diff --git a/man/shift_dates.Rd b/man/shift_dates.Rd index 6ed829b..0c82c90 100644 --- a/man/shift_dates.Rd +++ b/man/shift_dates.Rd @@ -9,8 +9,7 @@ shift_dates(x, year) \arguments{ \item{year}{the base year to shift the time series to.} -\item{object}{\code{\link[dtwSat]{twdtwTimeSeries}} objects, -\code{\link[zoo]{zoo}} objects or a list of \code{\link[zoo]{zoo}} objects.} +\item{object}{\code{\link[base]{data.frame}} objects.} } \value{ An object of the same class as the input \code{object}. @@ -19,11 +18,6 @@ An object of the same class as the input \code{object}. This function shifts the dates of the time series to a given base year. } -\references{ -\insertRef{Maus:2019}{dtwSat} - -\insertRef{Maus:2016}{dtwSat} -} \author{ Victor Maus, \email{vwmaus1@gmail.com} } From e06218671f18ea13ab3bad6702b873dfeff275be Mon Sep 17 00:00:00 2001 From: vwmaus Date: Sat, 15 Jul 2023 14:33:36 +0200 Subject: [PATCH 3/9] Clean repo and adds github workflows --- .Rbuildignore | 16 +-------- .github/.gitignore | 1 + .github/workflows/R-CMD-check.yaml | 49 +++++++++++++++++++++++++++ .github/workflows/test-coverage.yaml | 50 ++++++++++++++++++++++++++++ DESCRIPTION | 3 +- tests/testthat.R | 12 +++++++ 6 files changed, 115 insertions(+), 16 deletions(-) create mode 100644 .github/.gitignore create mode 100644 .github/workflows/R-CMD-check.yaml create mode 100644 .github/workflows/test-coverage.yaml create mode 100644 tests/testthat.R diff --git a/.Rbuildignore b/.Rbuildignore index 4b9cd57..a7d7e9a 100644 --- a/.Rbuildignore +++ b/.Rbuildignore @@ -1,18 +1,10 @@ -^Meta$ -^doc$ ^.*\.Rproj$ ^\.Rproj\.user$ ^\vignettes$ -^twdtw_results/ ^examples/ -^.travis.yml$ -_config.yml # Other files README.md -corinho.R -tardis.f -tardis.o ^\.git/ .gitignore ^README\.Rmd$ @@ -21,20 +13,14 @@ tardis.o ^.*\.xml$ ^README-.*\.png$ ^cran-comments\.md$ -src/symbols.rds$ -jss\.bst$ -jss\.cls$ TODO$ -tic.R dtwSat-Ex_i386.Rout dtwSat-Ex_x64.Rout examples_i386 examples_x64 -vignettes/twdtw03-speed.Rmd -^data/mod13q1/ -^data/mod13q1.db ^CRAN-RELEASE$ ^CRAN-SUBMISSION$ ^LICENSE\.md$ ^dtwSat\.Rproj$ +^\.github$ diff --git a/.github/.gitignore b/.github/.gitignore new file mode 100644 index 0000000..2d19fc7 --- /dev/null +++ b/.github/.gitignore @@ -0,0 +1 @@ +*.html diff --git a/.github/workflows/R-CMD-check.yaml b/.github/workflows/R-CMD-check.yaml new file mode 100644 index 0000000..a3ac618 --- /dev/null +++ b/.github/workflows/R-CMD-check.yaml @@ -0,0 +1,49 @@ +# Workflow derived from https://github.com/r-lib/actions/tree/v2/examples +# Need help debugging build failures? Start at https://github.com/r-lib/actions#where-to-find-help +on: + push: + branches: [main, master] + pull_request: + branches: [main, master] + +name: R-CMD-check + +jobs: + R-CMD-check: + runs-on: ${{ matrix.config.os }} + + name: ${{ matrix.config.os }} (${{ matrix.config.r }}) + + strategy: + fail-fast: false + matrix: + config: + - {os: macos-latest, r: 'release'} + - {os: windows-latest, r: 'release'} + - {os: ubuntu-latest, r: 'devel', http-user-agent: 'release'} + - {os: ubuntu-latest, r: 'release'} + - {os: ubuntu-latest, r: 'oldrel-1'} + + env: + GITHUB_PAT: ${{ secrets.GITHUB_TOKEN }} + R_KEEP_PKG_SOURCE: yes + + steps: + - uses: actions/checkout@v3 + + - uses: r-lib/actions/setup-pandoc@v2 + + - uses: r-lib/actions/setup-r@v2 + with: + r-version: ${{ matrix.config.r }} + http-user-agent: ${{ matrix.config.http-user-agent }} + use-public-rspm: true + + - uses: r-lib/actions/setup-r-dependencies@v2 + with: + extra-packages: any::rcmdcheck + needs: check + + - uses: r-lib/actions/check-r-package@v2 + with: + upload-snapshots: true diff --git a/.github/workflows/test-coverage.yaml b/.github/workflows/test-coverage.yaml new file mode 100644 index 0000000..2c5bb50 --- /dev/null +++ b/.github/workflows/test-coverage.yaml @@ -0,0 +1,50 @@ +# Workflow derived from https://github.com/r-lib/actions/tree/v2/examples +# Need help debugging build failures? Start at https://github.com/r-lib/actions#where-to-find-help +on: + push: + branches: [main, master] + pull_request: + branches: [main, master] + +name: test-coverage + +jobs: + test-coverage: + runs-on: ubuntu-latest + env: + GITHUB_PAT: ${{ secrets.GITHUB_TOKEN }} + + steps: + - uses: actions/checkout@v3 + + - uses: r-lib/actions/setup-r@v2 + with: + use-public-rspm: true + + - uses: r-lib/actions/setup-r-dependencies@v2 + with: + extra-packages: any::covr + needs: coverage + + - name: Test coverage + run: | + covr::codecov( + quiet = FALSE, + clean = FALSE, + install_path = file.path(Sys.getenv("RUNNER_TEMP"), "package") + ) + shell: Rscript {0} + + - name: Show testthat output + if: always() + run: | + ## -------------------------------------------------------------------- + find ${{ runner.temp }}/package -name 'testthat.Rout*' -exec cat '{}' \; || true + shell: bash + + - name: Upload test results + if: failure() + uses: actions/upload-artifact@v3 + with: + name: coverage-test-failures + path: ${{ runner.temp }}/package diff --git a/DESCRIPTION b/DESCRIPTION index 3fed013..c687018 100644 --- a/DESCRIPTION +++ b/DESCRIPTION @@ -44,4 +44,5 @@ Imports: mgcv Suggests: rbenchmark, - testthat + testthat (>= 3.0.0) +Config/testthat/edition: 3 diff --git a/tests/testthat.R b/tests/testthat.R new file mode 100644 index 0000000..38db019 --- /dev/null +++ b/tests/testthat.R @@ -0,0 +1,12 @@ +# This file is part of the standard setup for testthat. +# It is recommended that you do not modify it. +# +# Where should you do additional test configuration? +# Learn more about the roles of various files in: +# * https://r-pkgs.org/testing-design.html#sec-tests-files-overview +# * https://testthat.r-lib.org/articles/special-files.html + +library(testthat) +library(dtwSat) + +test_check("dtwSat") From 46a6dabf631c03f2840ca65f8e97f13fbb06a1ff Mon Sep 17 00:00:00 2001 From: vwmaus Date: Tue, 25 Jul 2023 22:27:03 +0200 Subject: [PATCH 4/9] Adds test data --- examples/reshape_modis_files.R | 31 ++++++++++++++++ .../MOD13Q1_20110914_subset_from_h12v10.tif | Bin 0 -> 23178 bytes .../MOD13Q1_20110930_subset_from_h12v10.tif | Bin 0 -> 24902 bytes .../MOD13Q1_20111016_subset_from_h12v10.tif | Bin 0 -> 24185 bytes .../MOD13Q1_20111101_subset_from_h12v10.tif | Bin 0 -> 23007 bytes .../MOD13Q1_20111117_subset_from_h12v10.tif | Bin 0 -> 22120 bytes .../MOD13Q1_20111203_subset_from_h12v10.tif | Bin 0 -> 24366 bytes .../MOD13Q1_20111219_subset_from_h12v10.tif | Bin 0 -> 23745 bytes .../MOD13Q1_20120101_subset_from_h12v10.tif | Bin 0 -> 24714 bytes .../MOD13Q1_20120117_subset_from_h12v10.tif | Bin 0 -> 23848 bytes .../MOD13Q1_20120202_subset_from_h12v10.tif | Bin 0 -> 23803 bytes .../MOD13Q1_20120218_subset_from_h12v10.tif | Bin 0 -> 22698 bytes .../MOD13Q1_20120305_subset_from_h12v10.tif | Bin 0 -> 23825 bytes .../MOD13Q1_20120321_subset_from_h12v10.tif | Bin 0 -> 22273 bytes .../MOD13Q1_20120406_subset_from_h12v10.tif | Bin 0 -> 22865 bytes .../MOD13Q1_20120422_subset_from_h12v10.tif | Bin 0 -> 23340 bytes .../MOD13Q1_20120508_subset_from_h12v10.tif | Bin 0 -> 23439 bytes .../MOD13Q1_20120524_subset_from_h12v10.tif | Bin 0 -> 24824 bytes .../MOD13Q1_20120609_subset_from_h12v10.tif | Bin 0 -> 24434 bytes .../MOD13Q1_20120625_subset_from_h12v10.tif | Bin 0 -> 25403 bytes .../MOD13Q1_20120711_subset_from_h12v10.tif | Bin 0 -> 25135 bytes .../MOD13Q1_20120727_subset_from_h12v10.tif | Bin 0 -> 24908 bytes .../MOD13Q1_20120812_subset_from_h12v10.tif | Bin 0 -> 24568 bytes .../MOD13Q1_20120828_subset_from_h12v10.tif | Bin 0 -> 24033 bytes inst/mato_grosso_brazil/samples.gpkg | Bin 0 -> 135168 bytes tests/testthat/test-twdtw_classify.R | 34 ++++++++++++++++++ 26 files changed, 65 insertions(+) create mode 100644 examples/reshape_modis_files.R create mode 100644 inst/mato_grosso_brazil/MOD13Q1_20110914_subset_from_h12v10.tif create mode 100644 inst/mato_grosso_brazil/MOD13Q1_20110930_subset_from_h12v10.tif create mode 100644 inst/mato_grosso_brazil/MOD13Q1_20111016_subset_from_h12v10.tif create mode 100644 inst/mato_grosso_brazil/MOD13Q1_20111101_subset_from_h12v10.tif create mode 100644 inst/mato_grosso_brazil/MOD13Q1_20111117_subset_from_h12v10.tif create mode 100644 inst/mato_grosso_brazil/MOD13Q1_20111203_subset_from_h12v10.tif create mode 100644 inst/mato_grosso_brazil/MOD13Q1_20111219_subset_from_h12v10.tif create mode 100644 inst/mato_grosso_brazil/MOD13Q1_20120101_subset_from_h12v10.tif create mode 100644 inst/mato_grosso_brazil/MOD13Q1_20120117_subset_from_h12v10.tif create mode 100644 inst/mato_grosso_brazil/MOD13Q1_20120202_subset_from_h12v10.tif create mode 100644 inst/mato_grosso_brazil/MOD13Q1_20120218_subset_from_h12v10.tif create mode 100644 inst/mato_grosso_brazil/MOD13Q1_20120305_subset_from_h12v10.tif create mode 100644 inst/mato_grosso_brazil/MOD13Q1_20120321_subset_from_h12v10.tif create mode 100644 inst/mato_grosso_brazil/MOD13Q1_20120406_subset_from_h12v10.tif create mode 100644 inst/mato_grosso_brazil/MOD13Q1_20120422_subset_from_h12v10.tif create mode 100644 inst/mato_grosso_brazil/MOD13Q1_20120508_subset_from_h12v10.tif create mode 100644 inst/mato_grosso_brazil/MOD13Q1_20120524_subset_from_h12v10.tif create mode 100644 inst/mato_grosso_brazil/MOD13Q1_20120609_subset_from_h12v10.tif create mode 100644 inst/mato_grosso_brazil/MOD13Q1_20120625_subset_from_h12v10.tif create mode 100644 inst/mato_grosso_brazil/MOD13Q1_20120711_subset_from_h12v10.tif create mode 100644 inst/mato_grosso_brazil/MOD13Q1_20120727_subset_from_h12v10.tif create mode 100644 inst/mato_grosso_brazil/MOD13Q1_20120812_subset_from_h12v10.tif create mode 100644 inst/mato_grosso_brazil/MOD13Q1_20120828_subset_from_h12v10.tif create mode 100644 inst/mato_grosso_brazil/samples.gpkg create mode 100644 tests/testthat/test-twdtw_classify.R diff --git a/examples/reshape_modis_files.R b/examples/reshape_modis_files.R new file mode 100644 index 0000000..b503fc9 --- /dev/null +++ b/examples/reshape_modis_files.R @@ -0,0 +1,31 @@ +library(stars) +library(stringr) +library(dplyr) + +sf_use_s2(FALSE) + +# Data extracted from MOD13Q1 tile h12v10 + +sd <- sf::gdal_subdatasets(hdf_file) + + +samples <- st_read("inst/mato_grosso_brazil/samples.gpkg") +table(samples$label) + +modis_dates <- scan("inst/lucc_MT/data/timeline", what = "character") + +evi <- raster::brick(system.file("lucc_MT/data/evi.tif", package = "dtwSat")) +ndvi <- raster::brick(system.file("lucc_MT/data/ndvi.tif", package = "dtwSat")) +red <- raster::brick(system.file("lucc_MT/data/red.tif", package = "dtwSat")) +blue <- raster::brick(system.file("lucc_MT/data/blue.tif", package = "dtwSat")) +nir <- raster::brick(system.file("lucc_MT/data/nir.tif", package = "dtwSat")) +mir <- raster::brick(system.file("lucc_MT/data/mir.tif", package = "dtwSat")) +doy <- raster::brick(system.file("lucc_MT/data/doy.tif", package = "dtwSat")) + +# filter modis dates between 2011-09-01 and 2012-08-31 +for (i in which(modis_dates >= "2011-09-01" & modis_dates <= "2012-08-31")){ + r <- stack(subset(evi, i), subset(ndvi, i), subset(red, i), subset(blue, i), subset(nir, i), subset(mir, i), subset(doy, i)) + names(r) <- c("EVI", "NDVI", "RED", "BLUE", "NIR", "MIR", "DOY") + writeRaster(r, filename = paste0("inst/mato_grosso_brazil/MOD13Q1_", str_remove_all(modis_dates[i], "-"), "_subset_from_h12v10.tif"), + overwrite = TRUE, wopt= list(gdal=c("COMPRESS=DEFLATE", "TFW=YES"))) +} diff --git a/inst/mato_grosso_brazil/MOD13Q1_20110914_subset_from_h12v10.tif b/inst/mato_grosso_brazil/MOD13Q1_20110914_subset_from_h12v10.tif new file mode 100644 index 0000000000000000000000000000000000000000..ae7dac4fd35326bc8c203e134b2daaa17c588820 GIT binary patch literal 23178 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 literal 0 HcmV?d00001 diff --git a/inst/mato_grosso_brazil/MOD13Q1_20110930_subset_from_h12v10.tif b/inst/mato_grosso_brazil/MOD13Q1_20110930_subset_from_h12v10.tif new file mode 100644 index 0000000000000000000000000000000000000000..2a2e244ca60c9e268dfb6449f0297a06efb3d18d GIT binary patch literal 24902 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 literal 0 HcmV?d00001 diff --git a/inst/mato_grosso_brazil/MOD13Q1_20111203_subset_from_h12v10.tif b/inst/mato_grosso_brazil/MOD13Q1_20111203_subset_from_h12v10.tif new file mode 100644 index 0000000000000000000000000000000000000000..66c3b6b8c805381b6b6dc4f3d36a2f36b4458ae7 GIT binary patch literal 24366 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ⅇyYN2yd-O;va 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�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 diff --git a/figure/plot-users-prodcucers-1.png b/figure/plot-users-prodcucers-1.png deleted file mode 100644 index 18f207c2736de83465ff50602ee55ad0eb740720..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 12273 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 NcWx=%%$Cr9@*fzS`i1}i diff --git a/man/MOD13Q1.MT.yearly.patterns.Rd b/man/MOD13Q1.MT.yearly.patterns.Rd index ca1ab92..8e73786 100644 --- a/man/MOD13Q1.MT.yearly.patterns.Rd +++ b/man/MOD13Q1.MT.yearly.patterns.Rd @@ -12,18 +12,18 @@ MOD13Q1.MT.yearly.patterns } \description{ This dataset has a list of patterns with the phenological cycle of: Water, -Cotton-Fallow, Forest, Low vegetation, Pasture, Soybean-Cotton, Soybean-Maize, Soybean-Millet, -Soybean-Sunflower, and Wetland. These time series are based on the MODIS product -MOD13Q1 250 m 16 days \insertCite{Didan:2015}{dtwSat}. -The patterns were built from ground truth samples of each +Cotton-Fallow, Forest, Low vegetation, Pasture, Soybean-Cotton, Soybean-Maize, Soybean-Millet, +Soybean-Sunflower, and Wetland. These time series are based on the MODIS product +MOD13Q1 250 m 16 days \insertCite{Didan:2015}{dtwSat}. +The patterns were built from ground truth samples of each crop using Generalized Additive Models (GAM), see \link[dtwSat]{createPatterns}. } \references{ \insertAllCited{} - - \insertRef{Maus:2019}{dtwSat} - - \insertRef{Maus:2016}{dtwSat} + +\insertRef{Maus:2019}{dtwSat} + +\insertRef{Maus:2016}{dtwSat} } \seealso{ For details about MOD13Q1 see \insertCite{Didan:2015}{dtwSat}. diff --git a/man/MOD13Q1.patterns.list.Rd b/man/MOD13Q1.patterns.list.Rd index 1a84770..697a86d 100644 --- a/man/MOD13Q1.patterns.list.Rd +++ b/man/MOD13Q1.patterns.list.Rd @@ -5,9 +5,9 @@ \alias{MOD13Q1.patterns.list} \title{Data: patterns time series} \format{ -A named \code{list} of three \link[zoo]{zoo} objects, ''Soybean'', ''Cotton'', +A named \code{list} of three \link[zoo]{zoo} objects, ''Soybean'', ''Cotton'', and ''Maize'', whose indices are \code{\link[base]{Dates}} in the format ''yyyy-mm-dd''. -Each node has 6 attributes: ''ndvi'', ''evi'', ''red'', ''nir'', ''blue'', +Each node has 6 attributes: ''ndvi'', ''evi'', ''red'', ''nir'', ''blue'', and ''mir''. } \usage{ @@ -15,21 +15,21 @@ MOD13Q1.patterns.list } \description{ This dataset has a list of patterns with the phenological cycle of: Soybean, -Cotton, and Maize. These time series are based on the MODIS product -MOD13Q1 250 m 16 days \insertCite{Didan:2015}{dtwSat}. The patterns were built -from ground truth samples of each +Cotton, and Maize. These time series are based on the MODIS product +MOD13Q1 250 m 16 days \insertCite{Didan:2015}{dtwSat}. The patterns were built +from ground truth samples of each crop using Generalized Additive Models (GAM), see \link[dtwSat]{createPatterns}. } \references{ \insertAllCited{} - - \insertRef{Maus:2019}{dtwSat} - - \insertRef{Maus:2016}{dtwSat} + +\insertRef{Maus:2019}{dtwSat} + +\insertRef{Maus:2016}{dtwSat} } \seealso{ \link[dtwSat]{MOD13Q1.ts}, -\link[dtwSat]{MOD13Q1.ts.list}, and +\link[dtwSat]{MOD13Q1.ts.list}, and \link[dtwSat]{createPatterns}. For details about MOD13Q1 see \insertCite{Didan:2015}{dtwSat}. diff --git a/man/MOD13Q1.ts.Rd b/man/MOD13Q1.ts.Rd index e1969fc..ceec72b 100644 --- a/man/MOD13Q1.ts.Rd +++ b/man/MOD13Q1.ts.Rd @@ -5,25 +5,25 @@ \alias{MOD13Q1.ts} \title{Data: An example of satellite time series} \format{ -A \link[zoo]{zoo} object, whose indices are \code{\link[base]{Dates}} -in the format ''yyyy-mm-dd''. Each node has 6 attributes: ''ndvi'', +A \link[zoo]{zoo} object, whose indices are \code{\link[base]{Dates}} +in the format ''yyyy-mm-dd''. Each node has 6 attributes: ''ndvi'', ''evi'', ''red'', ''nir'', ''blue'', and ''mir''. } \usage{ MOD13Q1.ts } \description{ -This dataset has a time series based on the -MODIS product MOD13Q1 250 m 16 days \insertCite{Didan:2015}{dtwSat}. -It is an irregularly sampled time series +This dataset has a time series based on the +MODIS product MOD13Q1 250 m 16 days \insertCite{Didan:2015}{dtwSat}. +It is an irregularly sampled time series using the real date of each pixel from ''2009-08-05'' to ''2013-07-31''. } \references{ \insertAllCited{} - - \insertRef{Maus:2019}{dtwSat} - - \insertRef{Maus:2016}{dtwSat} + +\insertRef{Maus:2019}{dtwSat} + +\insertRef{Maus:2016}{dtwSat} } \seealso{ \link[dtwSat]{MOD13Q1.ts.list}, diff --git a/man/MOD13Q1.ts.labels.Rd b/man/MOD13Q1.ts.labels.Rd index ab2fcec..57d6c23 100644 --- a/man/MOD13Q1.ts.labels.Rd +++ b/man/MOD13Q1.ts.labels.Rd @@ -5,7 +5,7 @@ \alias{MOD13Q1.ts.labels} \title{Data: Labels of the satellite time series in MOD13Q1.ts} \format{ -An object of class \link[base]{data.frame}, whose attributes are: +An object of class \link[base]{data.frame}, whose attributes are: the label of the crop class ''label'', the start of the crop period ''from'', and the end of the crop period ''to''. The dates are in the format ''yyyy-mm-dd''. } diff --git a/man/MOD13Q1.ts.list.Rd b/man/MOD13Q1.ts.list.Rd index b78f8ef..d5fffb2 100644 --- a/man/MOD13Q1.ts.list.Rd +++ b/man/MOD13Q1.ts.list.Rd @@ -5,28 +5,28 @@ \alias{MOD13Q1.ts.list} \title{Data: A list of satellite time series} \format{ -A \link[zoo]{zoo} object, whose indices are \code{\link[base]{Dates}} -in the format ''yyyy-mm-dd''. Each node has 6 attributes: ''ndvi'', +A \link[zoo]{zoo} object, whose indices are \code{\link[base]{Dates}} +in the format ''yyyy-mm-dd''. Each node has 6 attributes: ''ndvi'', ''evi'', ''red'', ''nir'', ''blue'', and ''mir''. } \usage{ MOD13Q1.ts.list } \description{ -This dataset has a list of time series based on the -MODIS product MOD13Q1 250 m 16 days \insertCite{Didan:2015}{dtwSat}. -It is an irregularly sampled time series +This dataset has a list of time series based on the +MODIS product MOD13Q1 250 m 16 days \insertCite{Didan:2015}{dtwSat}. +It is an irregularly sampled time series using the real date of each pixel from ''2009-08-05'' to ''2013-07-31''. } \references{ \insertAllCited{} - - \insertRef{Maus:2019}{dtwSat} - - \insertRef{Maus:2016}{dtwSat} + +\insertRef{Maus:2019}{dtwSat} + +\insertRef{Maus:2016}{dtwSat} } \seealso{ -\link[dtwSat]{MOD13Q1.ts}, and +\link[dtwSat]{MOD13Q1.ts}, and \link[dtwSat]{MOD13Q1.patterns.list}. For details about MOD13Q1 see \insertCite{Didan:2015}{dtwSat}. diff --git a/man/createPatterns.Rd b/man/createPatterns.Rd deleted file mode 100644 index 0bf8fbf..0000000 --- a/man/createPatterns.Rd +++ /dev/null @@ -1,104 +0,0 @@ -% Generated by roxygen2: do not edit by hand -% Please edit documentation in R/createPatterns.R -\name{createPatterns} -\alias{createPatterns} -\alias{createPatterns,twdtwTimeSeries-method} -\alias{createPatterns-twdtwMatches} -\title{Create patterns} -\usage{ -createPatterns( - x, - from = NULL, - to = NULL, - freq = 1, - attr = NULL, - split = TRUE, - formula, - ... -) - -\S4method{createPatterns}{twdtwTimeSeries}( - x, - from = NULL, - to = NULL, - freq = 1, - attr = NULL, - split = TRUE, - formula, - ... -) -} -\arguments{ -\item{x}{an object of class \code{\link[dtwSat]{twdtwTimeSeries}}.} - -\item{from}{A character or \code{\link[base]{Dates}} object in the format -"yyyy-mm-dd". If not provided it is equal to the smallest date of the -first element in x. See details.} - -\item{to}{A \code{\link[base]{character}} or \code{\link[base]{Dates}} -object in the format "yyyy-mm-dd". If not provided it is equal to the -greatest date of the first element in x. See details.} - -\item{freq}{An integer. The sampling frequency of the output patterns.} - -\item{attr}{A vector character or numeric. The attributes in \code{x} to be used. -If not declared the function uses all attributes.} - -\item{split}{A logical. If TRUE the samples are split by label. If FALSE -all samples are set to the same label.} - -\item{formula}{A formula. Argument to pass to \code{\link[mgcv]{gam}}.} - -\item{...}{other arguments to pass to the function \code{\link[mgcv]{gam}} in the -package \pkg{mgcv}.} -} -\value{ -an object of class \code{\link[dtwSat]{twdtwTimeSeries}} -} -\description{ -Create temporal patterns from objects of class twdtwTimeSeries. -} -\details{ -The hidden assumption is that the temporal pattern is a cycle the repeats itself -within a given time interval. Therefore, all time series samples in \code{x} are aligned -with each other, keeping their respective sequence of days of the year. The function fits a -Generalized Additive Model (GAM) to the aligned set of samples. -} -\examples{ -# Creating patterns from objects of class twdtwTimeSeries -evi = brick(system.file("lucc_MT/data/evi.tif", package="dtwSat")) -ndvi = brick(system.file("lucc_MT/data/ndvi.tif", package="dtwSat")) -timeline = scan(system.file("lucc_MT/data/timeline", package="dtwSat"), what="date") -rts = twdtwRaster(evi, ndvi, timeline=timeline) - -# Read field samples -\dontrun{ -field_samples = read.csv(system.file("lucc_MT/data/samples.csv", package="dtwSat")) -prj_string = scan(system.file("lucc_MT/data/samples_projection", package="dtwSat"), - what = "character") - -# Extract time series -ts = getTimeSeries(rts, y = field_samples, proj4string = prj_string) - -# Create temporal patterns -patt = createPatterns(x=ts, from="2005-09-01", to="2006-09-01", freq=8, formula = y~s(x)) - -# Plot patterns -autoplot(patt[[1]], facets = NULL) + xlab("Time") + ylab("Value") - -} -} -\references{ -\insertRef{Maus:2019}{dtwSat} - - \insertRef{Maus:2016}{dtwSat} -} -\seealso{ -\code{\link[dtwSat]{twdtwMatches-class}}, -\code{\link[dtwSat]{twdtwTimeSeries-class}}, -\code{\link[dtwSat]{getTimeSeries}}, and -\code{\link[dtwSat]{twdtwApply}} -} -\author{ -Victor Maus, \email{vwmaus1@gmail.com} -} diff --git a/man/create_pattern.Rd b/man/create_pattern.Rd new file mode 100644 index 0000000..b13837a --- /dev/null +++ b/man/create_pattern.Rd @@ -0,0 +1,58 @@ +% Generated by roxygen2: do not edit by hand +% Please edit documentation in R/create_patterns.R +\name{create_pattern} +\alias{create_pattern} +\title{Create patterns} +\usage{ +create_pattern(x, from, to, freq, attr, formula, ...) +} +\arguments{ +\item{x}{an object of class \code{\link[dtwSat]{twdtwTimeSeries}}.} + +\item{from}{A character or \code{\link[base]{Dates}} object in the format +"yyyy-mm-dd". If not provided it is equal to the smallest date of the +first element in x. See details.} + +\item{to}{A \code{\link[base]{character}} or \code{\link[base]{Dates}} +object in the format "yyyy-mm-dd". If not provided it is equal to the +greatest date of the first element in x. See details.} + +\item{freq}{An integer. The sampling frequency of the output patterns.} + +\item{attr}{A vector character or numeric. The attributes in \code{x} to be used. +If not declared the function uses all attributes.} + +\item{formula}{A formula. Argument to pass to \code{\link[mgcv]{gam}}.} + +\item{...}{other arguments to pass to the function \code{\link[mgcv]{gam}} in the +package \pkg{mgcv}.} + +\item{split}{A logical. If TRUE the samples are split by label. If FALSE +all samples are set to the same label.} +} +\value{ +an object of class \code{\link[dtwSat]{twdtwTimeSeries}} +} +\description{ +Create temporal patterns from objects of class twdtwTimeSeries. +} +\details{ +The hidden assumption is that the temporal pattern is a cycle the repeats itself +within a given time interval. Therefore, all time series samples in \code{x} are aligned +with each other, keeping their respective sequence of days of the year. The function fits a +Generalized Additive Model (GAM) to the aligned set of samples. +} +\references{ +\insertRef{Maus:2019}{dtwSat} + +\insertRef{Maus:2016}{dtwSat} +} +\seealso{ +\code{\link[dtwSat]{twdtwMatches-class}}, +\code{\link[dtwSat]{twdtwTimeSeries-class}}, +\code{\link[dtwSat]{getTimeSeries}}, and +\code{\link[dtwSat]{twdtwApply}} +} +\author{ +Victor Maus, \email{vwmaus1@gmail.com} +} diff --git a/man/dtwSat.Rd b/man/dtwSat.Rd deleted file mode 100644 index ebbd846..0000000 --- a/man/dtwSat.Rd +++ /dev/null @@ -1,26 +0,0 @@ -% Generated by roxygen2: do not edit by hand -% Please edit documentation in R/dwtSat.R -\name{dtwSat} -\alias{dtwSat} -\title{Time-Weighted Dynamic Time Warping for Satellite Image Time Series} -\description{ -Provides an implementation of the Time-Weighted Dynamic Time Warping -(TWDTW) method for land use and land cover mapping using satellite image time series -\insertCite{Maus:2016,Maus:2019}{dtwSat}. -TWDTW is based on the Dynamic Time Warping technique and has achieved high accuracy -for land use and land cover classification using satellite data. The method is based -on comparing unclassified satellite image time series with a set of known temporal -patterns (e.g. phenological cycles associated with the vegetation). Using 'dtwSat' -the user can build temporal patterns for land cover types, apply the TWDTW analysis -for satellite datasets, visualize the results of the time series analysis, produce -land cover maps, and create temporal plots for land cover change analysis. -} -\references{ -\insertAllCited{} -} -\seealso{ -\code{\link[dtwSat]{twdtwApply}} -} -\author{ -Victor Maus, \email{vwmaus1@gmail.com} -} diff --git a/man/get.Rd b/man/get.Rd deleted file mode 100644 index a0aabd3..0000000 --- a/man/get.Rd +++ /dev/null @@ -1,56 +0,0 @@ -% Generated by roxygen2: do not edit by hand -% Please edit documentation in R/getInternals.R -\name{get} -\alias{get} -\alias{getAlignments,twdtwMatches-method} -\alias{getAlignments} -\alias{getInternals,twdtwMatches-method} -\alias{getInternals} -\alias{getMatches,twdtwMatches-method} -\alias{getMatches} -\title{Get elements from twdtwMatches objects} -\usage{ -\S4method{getAlignments}{twdtwMatches}(object, timeseries.labels = NULL, patterns.labels = NULL) - -\S4method{getInternals}{twdtwMatches}(object, timeseries.labels = NULL, patterns.labels = NULL) - -\S4method{getMatches}{twdtwMatches}(object, timeseries.labels = NULL, patterns.labels = NULL) -} -\arguments{ -\item{object}{an object of class twdtwMatches.} - -\item{timeseries.labels}{a vector with labels of the time series.} - -\item{patterns.labels}{a vector with labels of the patterns.} -} -\value{ -a list with TWDTW results or an object \code{\link[dtwSat]{twdtwTimeSeries-class}}. -} -\description{ -Get elements from \code{\link[dtwSat]{twdtwMatches-class}} objects. -} -\examples{ -# Getting patterns from objects of class twdtwMatches -patt = twdtwTimeSeries(MOD13Q1.patterns.list) -ts = twdtwTimeSeries(MOD13Q1.ts.list) -mat = twdtwApply(x=ts, y=patt, weight.fun=logisticWeight(-0.1,100), - keep=TRUE, legacy = TRUE) -getPatterns(mat) -getTimeSeries(mat) -getAlignments(mat) -getMatches(mat) -getInternals(mat) - -} -\references{ -\insertRef{Maus:2019}{dtwSat} - - \insertRef{Maus:2016}{dtwSat} -} -\seealso{ -\code{\link[dtwSat]{twdtwMatches-class}}, and -\code{\link[dtwSat]{twdtwApply}} -} -\author{ -Victor Maus, \email{vwmaus1@gmail.com} -} diff --git a/man/getTimeSeries.Rd b/man/getTimeSeries.Rd deleted file mode 100644 index 2a0a834..0000000 --- a/man/getTimeSeries.Rd +++ /dev/null @@ -1,94 +0,0 @@ -% Generated by roxygen2: do not edit by hand -% Please edit documentation in R/getTimeSeries.R -\name{getTimeSeries} -\alias{getTimeSeries} -\alias{getPatterns} -\alias{getTimeSeries,twdtwTimeSeries-method} -\alias{getTimeSeries-twdtwTimeSeries} -\alias{getTimeSeries,twdtwMatches-method} -\alias{getTimeSeries-twdtwMatches} -\alias{getPatterns,twdtwMatches-method} -\alias{getPatterns-twdtwMatches} -\alias{getTimeSeries,twdtwRaster-method} -\alias{getTimeSeries-twdtwRaster} -\title{Get time series from twdtw* objects} -\usage{ -\S4method{getTimeSeries}{twdtwTimeSeries}(object, labels = NULL) - -\S4method{getTimeSeries}{twdtwMatches}(object, labels = NULL) - -\S4method{getPatterns}{twdtwMatches}(object, labels = NULL) - -\S4method{getTimeSeries}{twdtwRaster}(object, y, labels = NULL, proj4string = NULL, id.labels = NULL) -} -\arguments{ -\item{object}{an object of class twdtw*.} - -\item{labels}{character vector with time series labels. For signature -\code{\link[dtwSat]{twdtwRaster}} this argument can be used to set the -labels for each sample in \code{y}, or it can be combined with \code{id.labels} -to select samples with a specific label.} - -\item{y}{a \code{\link[base]{data.frame}} whose attributes are: longitude, -latitude, the start ''from'' and the end ''to'' of the time interval -for each sample. This can also be a \code{\link[sp]{SpatialPointsDataFrame}} -whose attributes are the start ''from'' and the end ''to'' of the time interval. -If missing ''from'' and/or ''to'', they are set to the time range of the -\code{object}.} - -\item{proj4string}{projection string, see \code{\link[sp]{CRS-class}}. Used -if \code{y} is a \code{\link[base]{data.frame}}.} - -\item{id.labels}{a numeric or character with an column name from \code{y} to -be used as sample labels. Optional.} -} -\value{ -An object of class \code{\link[dtwSat]{twdtwTimeSeries}}. - -a list with TWDTW results or an object \code{\link[dtwSat]{twdtwTimeSeries-class}}. -} -\description{ -Get time series from objects of class twdtw*. -} -\examples{ -# Getting time series from objects of class twdtwTimeSeries -ts = twdtwTimeSeries(MOD13Q1.ts.list) -getTimeSeries(ts, 2) -# Getting time series from objects of class twdtwTimeSeries -ts = twdtwTimeSeries(MOD13Q1.ts.list) -patt = twdtwTimeSeries(MOD13Q1.patterns.list) -mat = twdtwApply(x=ts, y=patt, keep=TRUE, legacy=TRUE) -getTimeSeries(mat, 2) - -## This example creates a twdtwRaster object and extract time series from it. - -# Creating objects of class twdtwRaster with evi and ndvi time series -evi = brick(system.file("lucc_MT/data/evi.tif", package="dtwSat")) -ndvi = brick(system.file("lucc_MT/data/ndvi.tif", package="dtwSat")) -timeline = scan(system.file("lucc_MT/data/timeline", package="dtwSat"), what="date") -rts = twdtwRaster(evi, ndvi, timeline=timeline) - -# Location and time range -ts_location = data.frame(longitude = -55.96957, latitude = -12.03864, - from = "2007-09-01", to = "2013-09-01") -prj_string = "+proj=longlat +datum=WGS84 +no_defs +ellps=WGS84 +towgs84=0,0,0" - -# Extract time series -ts = getTimeSeries(rts, y = ts_location, proj4string = prj_string) - -autoplot(ts[[1]], facets = NULL) + xlab("Time") + ylab("Value") - -} -\references{ -\insertRef{Maus:2019}{dtwSat} - - \insertRef{Maus:2016}{dtwSat} -} -\seealso{ -\code{\link[dtwSat]{twdtwRaster-class}}, -\code{\link[dtwSat]{twdtwTimeSeries-class}}, and -\code{\link[dtwSat]{twdtwMatches-class}} -} -\author{ -Victor Maus, \email{vwmaus1@gmail.com} -} diff --git a/man/getDatesFromDOY.Rd b/man/get_dates_from_doy.Rd similarity index 61% rename from man/getDatesFromDOY.Rd rename to man/get_dates_from_doy.Rd index 9d5e676..d925fdf 100644 --- a/man/getDatesFromDOY.Rd +++ b/man/get_dates_from_doy.Rd @@ -1,36 +1,29 @@ % Generated by roxygen2: do not edit by hand % Please edit documentation in R/miscellaneous.R \docType{methods} -\name{getDatesFromDOY} -\alias{getDatesFromDOY} +\name{get_dates_from_doy} +\alias{get_dates_from_doy} \title{Get dates from year and day of the year} \usage{ -getDatesFromDOY(year, doy) +get_dates_from_doy(year, doy) } \arguments{ \item{year}{A vector with the years.} -\item{doy}{A vector with the day of the year. +\item{doy}{A vector with the day of the year. It must have the same length as \code{year}.} } \value{ A \code{\link[base]{Dates}} object. } \description{ -This function retrieves the date corresponding to the given +This function retrieves the date corresponding to the given year and day of the year. -} -\examples{ -year = c(2000, 2001) -doy = c(366, 365) -dates = getDatesFromDOY(year, doy) -dates - } \references{ \insertRef{Maus:2019}{dtwSat} - - \insertRef{Maus:2016}{dtwSat} + +\insertRef{Maus:2016}{dtwSat} } \seealso{ \link[dtwSat]{shiftDates} diff --git a/man/linearWeight.Rd b/man/linearWeight.Rd deleted file mode 100644 index f4fdb4a..0000000 --- a/man/linearWeight.Rd +++ /dev/null @@ -1,45 +0,0 @@ -% Generated by roxygen2: do not edit by hand -% Please edit documentation in R/linearWeight.R -\docType{methods} -\name{linearWeight} -\alias{linearWeight} -\title{Linear weight function} -\usage{ -linearWeight(a, b = 0) -} -\arguments{ -\item{a}{numeric. The slop of the line.} - -\item{b}{numeric. The intercept of the line.} -} -\value{ -A \code{\link[base]{function}} object. -} -\description{ -Builds a linear time weight -function to compute the TWDTW local cost matrix [1]. -} -\details{ -The linear \code{linearWeight} and \code{logisticWeight} weight functions -can be passed to \code{\link[dtwSat]{twdtwApply}} through the argument \code{weight.fun}. -This will add a time-weight to the dynamic time warping analysis. The time weight -creates a global constraint useful to analyse time series with phenological cycles -of vegetation that are usually bound to seasons. In previous studies by -\insertCite{Maus:2016;textual}{dtwSat} the logistic weight had better results than the -linear for land cover classification. See \insertCite{Maus:2016;textual}{dtwSat} and -\insertCite{Maus:2019;textual}{dtwSat}. -} -\examples{ -lin_fun = linearWeight(a=0.1) -lin_fun - -} -\references{ -\insertAllCited{} -} -\seealso{ -\code{\link[dtwSat]{twdtwApply}} -} -\author{ -Victor Maus, \email{vwmaus1@gmail.com} -} diff --git a/man/logisticWeight.Rd b/man/logisticWeight.Rd deleted file mode 100644 index df44b49..0000000 --- a/man/logisticWeight.Rd +++ /dev/null @@ -1,45 +0,0 @@ -% Generated by roxygen2: do not edit by hand -% Please edit documentation in R/logisticWeight.R -\docType{methods} -\name{logisticWeight} -\alias{logisticWeight} -\title{Logistic weight function} -\usage{ -logisticWeight(alpha, beta) -} -\arguments{ -\item{alpha}{numeric. The steepness of logistic weight.} - -\item{beta}{numeric. The midpoint of logistic weight.} -} -\value{ -A \code{\link[base]{function}} object. -} -\description{ -Builds a logistic time weight -function to compute the TWDTW local cost matrix [1]. -} -\details{ -The linear \code{linearWeight} and \code{logisticWeight} weight functions -can be passed to \code{\link[dtwSat]{twdtwApply}} through the argument \code{weight.fun}. -This will add a time-weight to the dynamic time warping analysis. The time weight -creates a global constraint useful to analyze time series with phenological cycles -of vegetation that are usually bound to seasons. In previous studies by -\insertCite{Maus:2016;textual}{dtwSat} the logistic weight had better results than the -linear for land cover classification. See \insertCite{Maus:2016;textual}{dtwSat} and -\insertCite{Maus:2019;textual}{dtwSat}. -} -\examples{ -log_fun = logisticWeight(alpha=-0.1, beta=100) -log_fun - -} -\references{ -\insertAllCited{} -} -\seealso{ -\code{\link[dtwSat]{twdtwApply}} -} -\author{ -Victor Maus, \email{vwmaus1@gmail.com} -} diff --git a/man/plot.Rd b/man/plot.Rd deleted file mode 100644 index 9651a23..0000000 --- a/man/plot.Rd +++ /dev/null @@ -1,66 +0,0 @@ -% Generated by roxygen2: do not edit by hand -% Please edit documentation in R/plot.R -\name{plot} -\alias{plot} -\alias{plot,twdtwAssessment,ANY-method} -\alias{plot-twdtwAssessment} -\alias{plot,twdtwCrossValidation,ANY-method} -\alias{plot-twdtwTimeSeries} -\alias{plot,twdtwTimeSeries,ANY-method} -\alias{plot,twdtwMatches,ANY-method} -\alias{plot-twdtwMatches} -\alias{plot,twdtwRaster,ANY-method} -\alias{plot-twdtwRaster} -\title{Plotting twdtw* objects} -\usage{ -\S4method{plot}{twdtwAssessment,ANY}(x, type = "area", ...) - -\S4method{plot}{twdtwCrossValidation,ANY}(x, type = "crossvalidation", ...) - -\S4method{plot}{twdtwTimeSeries,ANY}(x, type = "timeseries", ...) - -\S4method{plot}{twdtwMatches,ANY}(x, type = "alignments", ...) - -\S4method{plot}{twdtwRaster,ANY}(x, type = "maps", ...) -} -\arguments{ -\item{x}{An object of class twdtw*.} - -\item{type}{A character for the plot type: ''paths'', ''matches'', -''alignments'', ''classification'', ''cost'', ''patterns'', ''timeseries'', -''maps'', ''area'', ''changes'', and ''distance''.} - -\item{...}{additional arguments to pass to plotting functions. -\code{\link[dtwSat]{plotPaths}}, -\code{\link[dtwSat]{plotCostMatrix}}, -\code{\link[dtwSat]{plotAlignments}}, -\code{\link[dtwSat]{plotMatches}}, -\code{\link[dtwSat]{plotClassification}}, -\code{\link[dtwSat]{plotPatterns}}, -\code{\link[dtwSat]{plotTimeSeries}}, -\code{\link[dtwSat]{plotMaps}}, -\code{\link[dtwSat]{plotArea}}, or -\code{\link[dtwSat]{plotChanges}}.} -} -\value{ -A \link[ggplot2]{ggplot} object. -} -\description{ -Methods for plotting objects of class twdtw*. -} -\details{ -\describe{ - \item{Plot types}{: - \cr\code{paths}: Method for plotting the minimum paths in the cost matrix of TWDTW. - \cr\code{matches}: Method for plotting the matching points from TWDTW analysis. - \cr\code{alignments}: Method for plotting the alignments and respective TWDTW dissimilarity measures. - \cr\code{classification}: Method for plotting the classification of each subinterval of the time series based on TWDTW analysis. - \cr\code{cost}: Method for plotting the internal matrices used during the TWDTW computation. - \cr\code{patterns}: Method for plotting the temporal patterns. - \cr\code{timeseries}: Method for plotting the temporal patterns. - } -} -} -\author{ -Victor Maus, \email{vwmaus1@gmail.com} -} diff --git a/man/plotAccuracy.Rd b/man/plotAccuracy.Rd deleted file mode 100644 index d0a1570..0000000 --- a/man/plotAccuracy.Rd +++ /dev/null @@ -1,65 +0,0 @@ -% Generated by roxygen2: do not edit by hand -% Please edit documentation in R/plotAccuracy.R -\name{plotAccuracy} -\alias{plotAccuracy} -\title{Plotting accuracy assessment} -\usage{ -plotAccuracy( - x, - perc = TRUE, - conf.int = 0.95, - time.labels = NULL, - category.name = NULL, - category.type = NULL -) -} -\arguments{ -\item{x}{An object of class \code{\link[dtwSat]{twdtwAssessment}} or -\code{\link[dtwSat]{twdtwCrossValidation}}.} - -\item{perc}{if TRUE shows the results in percent of area. Otherwise shows the -area in the map units or km2 for no project raster. Default is TRUE.} - -\item{conf.int}{confidence level (0-1) for interval estimation of the population mean. -For details see \code{\link[Hmisc]{smean.cl.normal}}. Used if \code{x} is -\code{\link[dtwSat]{twdtwCrossValidation}}.} - -\item{time.labels}{a character or numeric for the time periods or NULL to -aggregate all classified periods in the same plot. Default is NULL. Used -if \code{x} is \code{\link[dtwSat]{twdtwAssessment}}.} - -\item{category.name}{a character vector defining the class names. If NULL -the class names in the object \code{x} are used. Default is NULL.} - -\item{category.type}{a character defining the categories type "numeric" -or "letter", if NULL the class names are used. Default is NULL.} -} -\value{ -A \link[ggplot2]{ggplot} object. -} -\description{ -Method for plotting accuracy assessment results. -} -\examples{ -\dontrun{ - -# See ?twdtwAssess and ?twdtwCrosValidate - -plotAccuracy(x) - -plotAccuracy(x, category.type="letter") - -} - -} -\references{ -\insertRef{Maus:2019}{dtwSat} - - \insertRef{Maus:2016}{dtwSat} -} -\seealso{ -\code{\link[dtwSat]{twdtwAssessment}} and \code{\link[dtwSat]{twdtwAssess}} -} -\author{ -Victor Maus, \email{vwmaus1@gmail.com} -} diff --git a/man/plotAdjustedArea.Rd b/man/plotAdjustedArea.Rd deleted file mode 100644 index 5b3f680..0000000 --- a/man/plotAdjustedArea.Rd +++ /dev/null @@ -1,60 +0,0 @@ -% Generated by roxygen2: do not edit by hand -% Please edit documentation in R/plotAdjustedArea.R -\name{plotAdjustedArea} -\alias{plotAdjustedArea} -\title{Plotting area and uncertainty} -\usage{ -plotAdjustedArea( - x, - perc = TRUE, - time.labels = NULL, - category.name = NULL, - category.type = NULL -) -} -\arguments{ -\item{x}{An object of class \code{\link[dtwSat]{twdtwAssessment}} or -\code{\link[dtwSat]{twdtwCrossValidation}}.} - -\item{perc}{if TRUE shows the results in percent of area. Otherwise shows the -area in the map units or km2 for no project raster. Default is TRUE.} - -\item{time.labels}{a character or numeric for the time periods or NULL to -aggregate all classified periods in the same plot. Default is NULL. Used -if \code{x} is \code{\link[dtwSat]{twdtwAssessment}}.} - -\item{category.name}{a character vector defining the class names. If NULL -the class names in the object \code{x} are used. Default is NULL.} - -\item{category.type}{a character defining the categories type "numeric" -or "letter", if NULL the class names are used. Default is NULL.} -} -\value{ -A \link[ggplot2]{ggplot} object. -} -\description{ -Method for plotting area and uncertainty. -} -\examples{ -\dontrun{ - -# See ?twdtwAssess - -plotAdjustedArea(twdtw_assess) - -plotAdjustedArea(twdtw_assess, category.type="letter") - -} - -} -\references{ -\insertRef{Maus:2019}{dtwSat} - - \insertRef{Maus:2016}{dtwSat} -} -\seealso{ -\code{\link[dtwSat]{twdtwAssessment}} and \code{\link[dtwSat]{twdtwAssess}} -} -\author{ -Victor Maus, \email{vwmaus1@gmail.com} -} diff --git a/man/plotAlignments.Rd b/man/plotAlignments.Rd deleted file mode 100644 index d050cdb..0000000 --- a/man/plotAlignments.Rd +++ /dev/null @@ -1,63 +0,0 @@ -% Generated by roxygen2: do not edit by hand -% Please edit documentation in R/plotAlignments.R -\name{plotAlignments} -\alias{plotAlignments} -\title{Plotting alignments} -\usage{ -plotAlignments( - x, - timeseries.labels = NULL, - patterns.labels = NULL, - attr = 1, - threshold = Inf -) -} -\arguments{ -\item{x}{An object of class \code{\link[dtwSat]{twdtwMatches}}.} - -\item{timeseries.labels}{the label or index of the time series. -Default is 1.} - -\item{patterns.labels}{a vector with labels of the patterns. If not -declared the function will plot the alignments for all patterns in \code{x}.} - -\item{attr}{An \link[base]{integer} or \link[base]{character} vector -indicating the attribute for plotting. Default is 1.} - -\item{threshold}{A number. The TWDTW dissimilarity threshold, \emph{i.e.} the -maximum TWDTW cost for consideration. Default is \code{Inf}.} -} -\value{ -A \link[ggplot2]{ggplot} object. -} -\description{ -Method for plotting the alignments and TWDTW -dissimilarity measures. -} -\examples{ -log_fun = logisticWeight(-0.1, 100) -ts = twdtwTimeSeries(MOD13Q1.ts.list) -patt = twdtwTimeSeries(MOD13Q1.patterns.list) -mat1 = twdtwApply(x=ts, y=patt, weight.fun=log_fun, keep=TRUE, legacy=TRUE) - -plotAlignments(mat1) - -plotAlignments(mat1, attr=c("evi","ndvi")) - -} -\references{ -\insertRef{Maus:2019}{dtwSat} - - \insertRef{Maus:2016}{dtwSat} -} -\seealso{ -\code{\link[dtwSat]{twdtwMatches-class}}, -\code{\link[dtwSat]{twdtwApply}}, -\code{\link[dtwSat]{plotPaths}}, -\code{\link[dtwSat]{plotCostMatrix}}, -\code{\link[dtwSat]{plotMatches}}, and -\code{\link[dtwSat]{plotClassification}}. -} -\author{ -Victor Maus, \email{vwmaus1@gmail.com} -} diff --git a/man/plotArea.Rd b/man/plotArea.Rd deleted file mode 100644 index 3becab5..0000000 --- a/man/plotArea.Rd +++ /dev/null @@ -1,106 +0,0 @@ -% Generated by roxygen2: do not edit by hand -% Please edit documentation in R/plotArea.R -\name{plotArea} -\alias{plotArea} -\title{Plotting accumulated area} -\usage{ -plotArea( - x, - time.levels = NULL, - time.labels = NULL, - class.levels = NULL, - class.labels = NULL, - class.colors = NULL, - perc = TRUE -) -} -\arguments{ -\item{x}{An object of class \code{\link[dtwSat]{twdtwRaster}}.} - -\item{time.levels}{A \link[base]{character} or \link[base]{numeric} -vector with the layers to plot. For plot type ''change'' the minimum length -is two.} - -\item{time.labels}{A \link[base]{character} or \link[base]{numeric} -vector with the labels of the layers. It must have the same -length as time.levels. Default is NULL.} - -\item{class.levels}{A \link[base]{character} or \link[base]{numeric} -vector with the levels of the raster values. Default is NULL.} - -\item{class.labels}{A \link[base]{character} or \link[base]{numeric} -vector with the labels of the raster values. It must have the same -length as class.levels. Default is NULL.} - -\item{class.colors}{a set of aesthetic values. It must have the same -length as class.levels. Default is NULL. See -\link[ggplot2]{scale_fill_manual} for details.} - -\item{perc}{if TRUE shows the results in percent of area. Otherwise shows the -area in the map units or km2 for no project raster. Default is TRUE.} -} -\value{ -A \link[ggplot2]{ggplot} object. -} -\description{ -Method for plotting time series of accumulated area. -} -\examples{ -\dontrun{ - -# Create raster time series -evi = brick(system.file("lucc_MT/data/evi.tif", package="dtwSat")) -ndvi = brick(system.file("lucc_MT/data/ndvi.tif", package="dtwSat")) -red = brick(system.file("lucc_MT/data/red.tif", package="dtwSat")) -blue = brick(system.file("lucc_MT/data/blue.tif", package="dtwSat")) -nir = brick(system.file("lucc_MT/data/nir.tif", package="dtwSat")) -mir = brick(system.file("lucc_MT/data/mir.tif", package="dtwSat")) -doy = brick(system.file("lucc_MT/data/doy.tif", package="dtwSat")) -timeline = scan(system.file("lucc_MT/data/timeline", package="dtwSat"), what="date") -rts = twdtwRaster(evi, ndvi, red, blue, nir, mir, timeline = timeline, doy = doy) - -# Read field samples -field_samples = read.csv(system.file("lucc_MT/data/samples.csv", package="dtwSat")) -proj_str = scan(system.file("lucc_MT/data/samples_projection", - package="dtwSat"), what = "character") - -# Split samples for training (10\%) and validation (90\%) using stratified sampling -library(caret) -set.seed(1) -I = unlist(createDataPartition(field_samples$label, p = 0.1)) -training_samples = field_samples[I,] -validation_samples = field_samples[-I,] - -# Create temporal patterns -training_ts = getTimeSeries(rts, y = training_samples, proj4string = proj_str) -temporal_patterns = createPatterns(training_ts, freq = 8, formula = y ~ s(x)) - -# Run TWDTW analysis for raster time series -log_fun = weight.fun=logisticWeight(-0.1,50) -r_twdtw = twdtwApply(x=rts, y=temporal_patterns, weight.fun=log_fun, format="GTiff", - overwrite=TRUE) - -# Classify raster based on the TWDTW analysis -r_lucc = twdtwClassify(r_twdtw, format="GTiff", overwrite=TRUE) - -plotArea(r_lucc) - -plotArea(r_lucc, perc=FALSE) - -} -} -\references{ -\insertRef{Maus:2019}{dtwSat} - - \insertRef{Maus:2016}{dtwSat} -} -\seealso{ -\code{\link[dtwSat]{twdtwRaster-class}}, -\code{\link[dtwSat]{twdtwApply}}, -\code{\link[dtwSat]{plotMaps}}, -\code{\link[dtwSat]{plotChanges}}, and -\code{\link[dtwSat]{plotDistance}}. -} -\author{ -Victor Maus, \email{vwmaus1@gmail.com} -} diff --git a/man/plotChanges.Rd b/man/plotChanges.Rd deleted file mode 100644 index 898d2ea..0000000 --- a/man/plotChanges.Rd +++ /dev/null @@ -1,85 +0,0 @@ -% Generated by roxygen2: do not edit by hand -% Please edit documentation in R/plotChanges.R -\name{plotChanges} -\alias{plotChanges} -\title{Plotting changes} -\usage{ -plotChanges( - x, - time.levels = NULL, - time.labels = NULL, - class.levels = NULL, - class.labels = NULL, - class.colors = NULL -) -} -\arguments{ -\item{x}{An object of class \code{\link[dtwSat]{twdtwRaster}}.} - -\item{time.levels}{A \link[base]{character} or \link[base]{numeric} -vector with the layers to plot. For plot type ''change'' the minimum length -is two.} - -\item{time.labels}{A \link[base]{character} or \link[base]{numeric} -vector with the labels of the layers. It must have the same -length as time.levels. Default is NULL.} - -\item{class.levels}{A \link[base]{character} or \link[base]{numeric} -vector with the levels of the raster values. Default is NULL.} - -\item{class.labels}{A \link[base]{character} or \link[base]{numeric} -vector with the labels of the raster values. It must have the same -length as class.levels. Default is NULL.} - -\item{class.colors}{A set of aesthetic values. It must have the same -length as class.levels. Default is NULL. See -\link[ggplot2]{scale_fill_manual} for details.} -} -\value{ -A \link[ggplot2]{ggplot} object. -} -\description{ -Method for plotting changes over time. -} -\examples{ -\dontrun{ -# Run TWDTW analysis for raster time series -patt = MOD13Q1.MT.yearly.patterns -evi = brick(system.file("lucc_MT/data/evi.tif", package="dtwSat")) -ndvi = brick(system.file("lucc_MT/data/ndvi.tif", package="dtwSat")) -red = brick(system.file("lucc_MT/data/red.tif", package="dtwSat")) -blue = brick(system.file("lucc_MT/data/blue.tif", package="dtwSat")) -nir = brick(system.file("lucc_MT/data/nir.tif", package="dtwSat")) -mir = brick(system.file("lucc_MT/data/mir.tif", package="dtwSat")) -doy = brick(system.file("lucc_MT/data/doy.tif", package="dtwSat")) -timeline = scan(system.file("lucc_MT/data/timeline", package="dtwSat"), what="date") -rts = twdtwRaster(evi, ndvi, red, blue, nir, mir, timeline = timeline, doy = doy) - -time_interval = seq(from=as.Date("2007-09-01"), to=as.Date("2013-09-01"), - by="12 month") -log_fun = weight.fun=logisticWeight(-0.1,50) - -r_twdtw = twdtwApply(x=rts, y=patt, weight.fun=log_fun, breaks=time_interval, - filepath="~/test_twdtw", overwrite=TRUE, format="GTiff") - -r_lucc = twdtwClassify(r_twdtw, format="GTiff", overwrite=TRUE) - -plotChanges(r_lucc) - -} -} -\references{ -\insertRef{Maus:2019}{dtwSat} - - \insertRef{Maus:2016}{dtwSat} -} -\seealso{ -\code{\link[dtwSat]{twdtwRaster-class}}, -\code{\link[dtwSat]{twdtwApply}}, -\code{\link[dtwSat]{plotArea}}, -\code{\link[dtwSat]{plotMaps}}, and -\code{\link[dtwSat]{plotDistance}}. -} -\author{ -Victor Maus, \email{vwmaus1@gmail.com} -} diff --git a/man/plotClassification.Rd b/man/plotClassification.Rd deleted file mode 100644 index eee6911..0000000 --- a/man/plotClassification.Rd +++ /dev/null @@ -1,68 +0,0 @@ -% Generated by roxygen2: do not edit by hand -% Please edit documentation in R/plotClassification.R -\name{plotClassification} -\alias{plotClassification} -\title{Plotting subintervals classification} -\usage{ -plotClassification( - x, - timeseries.labels = NULL, - patterns.labels = NULL, - attr, - ... -) -} -\arguments{ -\item{x}{An object of class \code{\link[dtwSat]{twdtwMatches}}.} - -\item{timeseries.labels}{The label or index of the time series. -Default is 1.} - -\item{patterns.labels}{A vector with labels of the patterns. If not -declared the function will plot one alignment for each pattern.} - -\item{attr}{An \link[base]{integer} vector or \link[base]{character} vector -indicating the attribute for plotting. If not declared the function will plot -all attributes.} - -\item{...}{Additional arguments passed to \code{\link[dtwSat]{twdtwClassify}}.} -} -\value{ -A \link[ggplot2]{ggplot} object. -} -\description{ -Method for plotting the classification of each -subinterval of the time series based on TWDTW analysis. -} -\examples{ -log_fun = logisticWeight(-0.1, 100) -ts = twdtwTimeSeries(MOD13Q1.ts.list) -patt = twdtwTimeSeries(MOD13Q1.patterns.list) -mat1 = twdtwApply(x=ts, y=patt, weight.fun=log_fun, keep=TRUE, legacy=TRUE) - -# Classify interval -from = as.Date("2007-09-01") -to = as.Date("2013-09-01") -by = "6 month" -gp = plotClassification(x=mat1, from=from, to=to, by=by, overlap=.5) -gp - - -} -\references{ -\insertRef{Maus:2019}{dtwSat} - - \insertRef{Maus:2016}{dtwSat} -} -\seealso{ -\code{\link[dtwSat]{twdtwMatches-class}}, -\code{\link[dtwSat]{twdtwApply}}, -\code{\link[dtwSat]{twdtwClassify}}, -\code{\link[dtwSat]{plotAlignments}}, -\code{\link[dtwSat]{plotPaths}}, -\code{\link[dtwSat]{plotMatches}}, and -\code{\link[dtwSat]{plotCostMatrix}}. -} -\author{ -Victor Maus, \email{vwmaus1@gmail.com} -} diff --git a/man/plotCostMatrix.Rd b/man/plotCostMatrix.Rd deleted file mode 100644 index b9e5fd0..0000000 --- a/man/plotCostMatrix.Rd +++ /dev/null @@ -1,62 +0,0 @@ -% Generated by roxygen2: do not edit by hand -% Please edit documentation in R/plotCostMatrix.R -\name{plotCostMatrix} -\alias{plotCostMatrix} -\title{Plotting paths} -\usage{ -plotCostMatrix( - x, - timeseries.labels = NULL, - patterns.labels = NULL, - matrix.name = "costMatrix" -) -} -\arguments{ -\item{x}{An object of class \code{\link[dtwSat]{twdtwMatches}}.} - -\item{timeseries.labels}{The label or index of the time series. -Default is 1.} - -\item{patterns.labels}{A vector with labels of the patterns. If not -declared the function will plot one alignment for each pattern.} - -\item{matrix.name}{A character. The name of the matrix to plot, -"costMatrix" for accumulated cost, "localMatrix" for local cost, -or "timeWeight" for time-weight. Default is "costMatrix".} -} -\value{ -A \link[ggplot2]{ggplot} object. -} -\description{ -Method for plotting low cost paths in the TWDTW -cost matrix. -} -\examples{ -log_fun = logisticWeight(-0.1, 100) -ts = twdtwTimeSeries(MOD13Q1.ts.list) -patt = twdtwTimeSeries(MOD13Q1.patterns.list) -mat1 = twdtwApply(x=ts, y=patt, weight.fun=log_fun, keep=TRUE, legacy=TRUE) - -plotCostMatrix(mat1, matrix.name="costMatrix") - -plotCostMatrix(mat1, matrix.name="localMatrix") - -plotCostMatrix(mat1, matrix.name="timeWeight") - -} -\references{ -\insertRef{Maus:2019}{dtwSat} - - \insertRef{Maus:2016}{dtwSat} -} -\seealso{ -\code{\link[dtwSat]{twdtwMatches-class}}, -\code{\link[dtwSat]{twdtwApply}}, -\code{\link[dtwSat]{plotAlignments}}, -\code{\link[dtwSat]{plotPaths}}, -\code{\link[dtwSat]{plotMatches}}, and -\code{\link[dtwSat]{plotClassification}}. -} -\author{ -Victor Maus, \email{vwmaus1@gmail.com} -} diff --git a/man/plotDistance.Rd b/man/plotDistance.Rd deleted file mode 100644 index 2beaf9d..0000000 --- a/man/plotDistance.Rd +++ /dev/null @@ -1,68 +0,0 @@ -% Generated by roxygen2: do not edit by hand -% Please edit documentation in R/plotDistance.R -\name{plotDistance} -\alias{plotDistance} -\title{Plotting distance maps} -\usage{ -plotDistance(x, time.levels = 1, time.labels = 1, layers = NULL) -} -\arguments{ -\item{x}{An object of class \code{\link[dtwSat]{twdtwRaster}}.} - -\item{time.levels}{A \link[base]{character} or \link[base]{numeric} -vector with the layers to plot. For plot type ''change'' the minimum length -is two.} - -\item{time.labels}{A \link[base]{character} or \link[base]{numeric} -vector with the labels of the layers. It must have the same -length as time.levels. Default is NULL.} - -\item{layers}{A \link[base]{character} or \link[base]{numeric} -vector with the layers/bands of the raster time series.} -} -\value{ -A \link[ggplot2]{ggplot} object. -} -\description{ -Method for plotting TWDTW distance maps. -} -\examples{ -\dontrun{ -# Run TWDTW analysis for raster time series -patt = MOD13Q1.MT.yearly.patterns -evi = brick(system.file("lucc_MT/data/evi.tif", package="dtwSat")) -ndvi = brick(system.file("lucc_MT/data/ndvi.tif", package="dtwSat")) -red = brick(system.file("lucc_MT/data/red.tif", package="dtwSat")) -blue = brick(system.file("lucc_MT/data/blue.tif", package="dtwSat")) -nir = brick(system.file("lucc_MT/data/nir.tif", package="dtwSat")) -mir = brick(system.file("lucc_MT/data/mir.tif", package="dtwSat")) -doy = brick(system.file("lucc_MT/data/doy.tif", package="dtwSat")) -timeline = scan(system.file("lucc_MT/data/timeline", package="dtwSat"), what="date") -rts = twdtwRaster(evi, ndvi, red, blue, nir, mir, timeline = timeline, doy = doy) - -time_interval = seq(from=as.Date("2007-09-01"), to=as.Date("2013-09-01"), - by="12 month") -log_fun = weight.fun=logisticWeight(-0.1,50) - -r_twdtw = twdtwApply(x=rts, y=patt, weight.fun=log_fun, breaks=time_interval, - filepath="~/test_twdtw", overwrite=TRUE, format="GTiff", mc.cores=3) - -plotDistance(r_twdtw) - -} -} -\references{ -\insertRef{Maus:2019}{dtwSat} - - \insertRef{Maus:2016}{dtwSat} -} -\seealso{ -\code{\link[dtwSat]{twdtwRaster-class}}, -\code{\link[dtwSat]{twdtwApply}}, -\code{\link[dtwSat]{plotArea}}, -\code{\link[dtwSat]{plotChanges}}, and -\code{\link[dtwSat]{plotDistance}}. -} -\author{ -Victor Maus, \email{vwmaus1@gmail.com} -} diff --git a/man/plotMapSamples.Rd b/man/plotMapSamples.Rd deleted file mode 100644 index 2e57872..0000000 --- a/man/plotMapSamples.Rd +++ /dev/null @@ -1,120 +0,0 @@ -% Generated by roxygen2: do not edit by hand -% Please edit documentation in R/plotMapSamples.R -\name{plotMapSamples} -\alias{plotMapSamples} -\title{Plotting maps} -\usage{ -plotMapSamples(x, samples = "all", ...) -} -\arguments{ -\item{x}{An object of class \code{\link[dtwSat]{twdtwAssessment}}.} - -\item{samples}{A character defining the samples to plot -"correct", "incorrect", "all". Default is "all".} - -\item{...}{Other arguments to pass to \code{\link[dtwSat]{twdtwRaster}}} -} -\value{ -A \link[ggplot2]{ggplot} object. -} -\description{ -Method for plotting maps and samples. -} -\examples{ -\dontrun{ - -# Example of TWDTW analysis using raster files -library(dtwSat) -library(caret) - -# Load raster data -evi <- brick(system.file("lucc_MT/data/evi.tif", package = "dtwSat")) -ndvi <- brick(system.file("lucc_MT/data/ndvi.tif", package = "dtwSat")) -red <- brick(system.file("lucc_MT/data/red.tif", package = "dtwSat")) -blue <- brick(system.file("lucc_MT/data/blue.tif", package = "dtwSat")) -nir <- brick(system.file("lucc_MT/data/nir.tif", package = "dtwSat")) -mir <- brick(system.file("lucc_MT/data/mir.tif", package = "dtwSat")) -doy <- brick(system.file("lucc_MT/data/doy.tif", package = "dtwSat")) -timeline <- - scan(system.file("lucc_MT/data/timeline", package = "dtwSat"), what="date") - -# Create raster time series -rts <- twdtwRaster(evi, ndvi, red, blue, nir, mir, timeline = timeline, doy = doy) - -# Load field samples and projection -field_samples <- - read.csv(system.file("lucc_MT/data/samples.csv", package = "dtwSat")) -proj_str <- - scan(system.file("lucc_MT/data/samples_projection", package = "dtwSat"), - what = "character") - -# Split samples for training (10\%) and validation (90\%) using stratified sampling -set.seed(1) -I <- unlist(createDataPartition(field_samples$label, p = 0.1)) -training_samples <- field_samples[I, ] -validation_samples <- field_samples[-I, ] - -# Get time series form raster -training_ts <- getTimeSeries(rts, y = training_samples, proj4string = proj_str) -validation_ts <- getTimeSeries(rts, y = validation_samples, proj4string = proj_str) - -# Create temporal patterns -temporal_patterns <- createPatterns(training_ts, freq = 8, formula = y ~ s(x)) - -# Set TWDTW weight function -log_fun <- logisticWeight(-0.1, 50) - -# Run TWDTW analysis -system.time( - r_twdtw <- - twdtwApply(x = rts, y = temporal_patterns, weight.fun = log_fun, progress = 'text') -) - -# Plot TWDTW distances for the first year -plot(r_twdtw, type = "distance", time.levels = 1) - -# Classify raster based on the TWDTW analysis -r_lucc <- twdtwClassify(r_twdtw, progress = 'text') - -# Plot TWDTW classification results -plot(r_lucc, type = "map") - -# Assess classification -twdtw_assess <- - twdtwAssess(object = r_lucc, y = validation_samples, - proj4string = proj_str, conf.int = .95) - -# Plot map accuracy -plot(twdtw_assess, type = "accuracy") - -# Plot area uncertainty -plot(twdtw_assess, type = "area") - -# Plot misclassified samples -plot(twdtw_assess, type = "map", samples = "incorrect") - -# Get latex table with error matrix -twdtwXtable(twdtw_assess, table.type = "matrix") - -# Get latex table with error accuracy -twdtwXtable(twdtw_assess, table.type = "accuracy") - -# Get latex table with area uncertainty -twdtwXtable(twdtw_assess, table.type = "area") - -} - -} -\references{ -\insertRef{Maus:2019}{dtwSat} - - \insertRef{Maus:2016}{dtwSat} -} -\seealso{ -\code{\link[dtwSat]{twdtwAssessment}}, -\code{\link[dtwSat]{plotAccuracy}}, and -\code{\link[dtwSat]{plotAdjustedArea}}. -} -\author{ -Victor Maus, \email{vwmaus1@gmail.com} -} diff --git a/man/plotMaps.Rd b/man/plotMaps.Rd deleted file mode 100644 index b366474..0000000 --- a/man/plotMaps.Rd +++ /dev/null @@ -1,85 +0,0 @@ -% Generated by roxygen2: do not edit by hand -% Please edit documentation in R/plotMaps.R -\name{plotMaps} -\alias{plotMaps} -\title{Plotting maps} -\usage{ -plotMaps( - x, - time.levels = NULL, - time.labels = NULL, - class.levels = NULL, - class.labels = NULL, - class.colors = NULL -) -} -\arguments{ -\item{x}{An object of class \code{\link[dtwSat]{twdtwRaster}}.} - -\item{time.levels}{A \link[base]{character} or \link[base]{numeric} -vector with the layers to plot. For plot type ''change'' the minimum length -is two.} - -\item{time.labels}{A \link[base]{character} or \link[base]{numeric} -vector with the labels of the layers. It must have the same -length as time.levels. Default is NULL.} - -\item{class.levels}{A \link[base]{character} or \link[base]{numeric} -vector with the levels of the raster values. Default is NULL.} - -\item{class.labels}{A \link[base]{character} or \link[base]{numeric} -vector with the labels of the raster values. It must have the same -length as class.levels. Default is NULL.} - -\item{class.colors}{A set of aesthetic values. It must have the same -length as class.levels. Default is NULL. See -\link[ggplot2]{scale_fill_manual} for details.} -} -\value{ -A \link[ggplot2]{ggplot} object. -} -\description{ -Method for plotting time series of maps. -} -\examples{ -\dontrun{ -# Run TWDTW analysis for raster time series -patt = MOD13Q1.MT.yearly.patterns -evi = brick(system.file("lucc_MT/data/evi.tif", package="dtwSat")) -ndvi = brick(system.file("lucc_MT/data/ndvi.tif", package="dtwSat")) -red = brick(system.file("lucc_MT/data/red.tif", package="dtwSat")) -blue = brick(system.file("lucc_MT/data/blue.tif", package="dtwSat")) -nir = brick(system.file("lucc_MT/data/nir.tif", package="dtwSat")) -mir = brick(system.file("lucc_MT/data/mir.tif", package="dtwSat")) -doy = brick(system.file("lucc_MT/data/doy.tif", package="dtwSat")) -timeline = scan(system.file("lucc_MT/data/timeline", package="dtwSat"), what="date") -rts = twdtwRaster(evi, ndvi, red, blue, nir, mir, timeline = timeline, doy = doy) - -time_interval = seq(from=as.Date("2007-09-01"), to=as.Date("2013-09-01"), - by="12 month") -log_fun = weight.fun=logisticWeight(-0.1,50) - -r_twdtw = twdtwApply(x=rts, y=patt, weight.fun=log_fun, breaks=time_interval, - filepath="~/test_twdtw", overwrite=TRUE, format="GTiff", mc.cores=3) - -r_lucc = twdtwClassify(r_twdtw, format="GTiff", overwrite=TRUE) - -plotMaps(r_lucc) - -} -} -\references{ -\insertRef{Maus:2019}{dtwSat} - - \insertRef{Maus:2016}{dtwSat} -} -\seealso{ -\code{\link[dtwSat]{twdtwRaster-class}}, -\code{\link[dtwSat]{twdtwApply}}, -\code{\link[dtwSat]{plotArea}}, -\code{\link[dtwSat]{plotChanges}}, and -\code{\link[dtwSat]{plotDistance}}. -} -\author{ -Victor Maus, \email{vwmaus1@gmail.com} -} diff --git a/man/plotMatches.Rd b/man/plotMatches.Rd deleted file mode 100644 index 9098386..0000000 --- a/man/plotMatches.Rd +++ /dev/null @@ -1,76 +0,0 @@ -% Generated by roxygen2: do not edit by hand -% Please edit documentation in R/plotMatches.R -\docType{methods} -\name{plotMatches} -\alias{plotMatches} -\title{Plotting matching points} -\usage{ -plotMatches( - x, - timeseries.labels = 1, - patterns.labels = NULL, - k = 1, - attr = 1, - shift = 0.5, - show.dist = FALSE -) -} -\arguments{ -\item{x}{An object of class \code{\link[dtwSat]{twdtwMatches}}.} - -\item{timeseries.labels}{The label or index of the time series. -Default is 1.} - -\item{patterns.labels}{A vector with labels of the patterns. If not -declared the function will plot one alignment for each pattern.} - -\item{k}{A positive integer. The index of the last alignment to include in -the plot. If not declared the function will plot the best match for -each pattern.} - -\item{attr}{An \link[base]{integer} or \link[base]{character} vector -indicating the attribute for plotting. Default is 1.} - -\item{shift}{A number that shifts the pattern position in the \code{x} -direction. Default is 0.5.} - -\item{show.dist}{Show the distance for each alignment. Default is FALSE.} -} -\value{ -A \link[ggplot2]{ggplot} object. -} -\description{ -Method for plotting the matching points from -TWDTW analysis. -} -\examples{ -log_fun = logisticWeight(-0.1, 100) -ts = twdtwTimeSeries(MOD13Q1.ts.list) -patt = twdtwTimeSeries(MOD13Q1.patterns.list) -mat1 = twdtwApply(x=ts, y=patt, weight.fun=log_fun, keep=TRUE, legacy=TRUE) - -plotMatches(mat1) - -plotMatches(mat1, patterns.labels="Soybean", k=4) - -plotMatches(mat1, patterns.labels=c("Soybean","Maize"), k=4) - -plotMatches(mat1, patterns.labels=c("Soybean","Cotton"), k=c(3,1)) - -} -\references{ -\insertRef{Maus:2019}{dtwSat} - - \insertRef{Maus:2016}{dtwSat} -} -\seealso{ -\code{\link[dtwSat]{twdtwMatches-class}}, -\code{\link[dtwSat]{twdtwApply}}, -\code{\link[dtwSat]{plotPaths}}, -\code{\link[dtwSat]{plotCostMatrix}}, -\code{\link[dtwSat]{plotAlignments}}, and -\code{\link[dtwSat]{plotClassification}}. -} -\author{ -Victor Maus, \email{vwmaus1@gmail.com} -} diff --git a/man/plotPaths.Rd b/man/plotPaths.Rd deleted file mode 100644 index d08260e..0000000 --- a/man/plotPaths.Rd +++ /dev/null @@ -1,56 +0,0 @@ -% Generated by roxygen2: do not edit by hand -% Please edit documentation in R/plotPaths.R -\name{plotPaths} -\alias{plotPaths} -\title{Plotting paths} -\usage{ -plotPaths(x, timeseries.labels = NULL, patterns.labels = NULL, k = NULL) -} -\arguments{ -\item{x}{An object of class \code{\link[dtwSat]{twdtwMatches}}.} - -\item{timeseries.labels}{The label or index of the time series. -Default is 1.} - -\item{patterns.labels}{A vector with labels of the patterns. If not -declared the function will plot one alignment for each pattern.} - -\item{k}{A positive integer. The index of the last alignment to include in -the plot. If not declared the function will plot all low cost paths.} -} -\value{ -A \link[ggplot2]{ggplot} object. -} -\description{ -Method for plotting low cost paths in the TWDTW -cost matrix. -} -\examples{ -log_fun = logisticWeight(-0.1, 100) -ts = twdtwTimeSeries(MOD13Q1.ts.list) -patt = twdtwTimeSeries(MOD13Q1.patterns.list) -mat1 = twdtwApply(x=ts, y=patt, weight.fun=log_fun, keep=TRUE, legacy=TRUE) - -plotPaths(mat1) - -plotPaths(mat1, patterns.labels="Soybean", k=1:2) - -plotPaths(mat1, patterns.labels=c("Maize","Cotton"), k=2) - -} -\references{ -\insertRef{Maus:2019}{dtwSat} - - \insertRef{Maus:2016}{dtwSat} -} -\seealso{ -\code{\link[dtwSat]{twdtwMatches-class}}, -\code{\link[dtwSat]{twdtwApply}}, -\code{\link[dtwSat]{plotAlignments}}, -\code{\link[dtwSat]{plotCostMatrix}}, -\code{\link[dtwSat]{plotMatches}}, and -\code{\link[dtwSat]{plotClassification}}. -} -\author{ -Victor Maus, \email{vwmaus1@gmail.com} -} diff --git a/man/plotTimeSeries.Rd b/man/plotTimeSeries.Rd deleted file mode 100644 index 8233ef1..0000000 --- a/man/plotTimeSeries.Rd +++ /dev/null @@ -1,43 +0,0 @@ -% Generated by roxygen2: do not edit by hand -% Please edit documentation in R/plotTimeSeries.R -\name{plotTimeSeries} -\alias{plotTimeSeries} -\title{Plotting time series} -\usage{ -plotTimeSeries(x, labels = NULL, attr) -} -\arguments{ -\item{x}{An object of class \code{\link[dtwSat]{twdtwTimeSeries}}, -\code{\link[zoo]{zoo}}, or list of class \code{\link[zoo]{zoo}}.} - -\item{labels}{A vector with labels of the time series. If missing, all -elements in the list will be plotted (up to a maximum of 16).} - -\item{attr}{An \link[base]{integer} vector or \link[base]{character} vector -indicating the attribute for plotting. If not declared the function will plot -all attributes.} -} -\value{ -A \link[ggplot2]{ggplot} object. -} -\description{ -Method for plotting the temporal patterns. -} -\examples{ -ts = twdtwTimeSeries(MOD13Q1.ts.list) -plotTimeSeries(ts) -plotTimeSeries(ts, attr="evi") - -} -\references{ -\insertRef{Maus:2019}{dtwSat} - - \insertRef{Maus:2016}{dtwSat} -} -\seealso{ -\code{\link[dtwSat]{twdtwTimeSeries-class}} and -\code{\link[dtwSat]{plotPatterns}} -} -\author{ -Victor Maus, \email{vwmaus1@gmail.com} -} diff --git a/man/plotPatterns.Rd b/man/plot_patterns.Rd similarity index 68% rename from man/plotPatterns.Rd rename to man/plot_patterns.Rd index 44e91f7..cf7e32b 100644 --- a/man/plotPatterns.Rd +++ b/man/plot_patterns.Rd @@ -1,23 +1,23 @@ % Generated by roxygen2: do not edit by hand -% Please edit documentation in R/plotPatterns.R -\name{plotPatterns} -\alias{plotPatterns} +% Please edit documentation in R/plot_patterns.R +\name{plot_patterns} +\alias{plot_patterns} \title{Plotting temporal patterns} \usage{ -plotPatterns(x, labels = NULL, attr, year = 2005) +plot_patterns(x, labels = NULL, attr, year = 2005) } \arguments{ -\item{x}{An object of class \code{\link[dtwSat]{twdtwTimeSeries}}, +\item{x}{An object of class \code{\link[dtwSat]{twdtwTimeSeries}}, \code{\link[zoo]{zoo}}, or list of \code{\link[zoo]{zoo}}.} -\item{labels}{A vector with labels of the time series. If not declared +\item{labels}{A vector with labels of the time series. If not declared the function will plot all time series.} -\item{attr}{An \link[base]{integer} vector or \link[base]{character} vector -indicating the attribute for plotting. If not declared the function will plot +\item{attr}{An \link[base]{integer} vector or \link[base]{character} vector +indicating the attribute for plotting. If not declared the function will plot all attributes.} -\item{year}{An integer. The base year to shift the dates of the time series to. +\item{year}{An integer. The base year to shift the dates of the time series to. If NULL then the time series is not shifted. Default is 2005.} } \value{ @@ -25,20 +25,14 @@ A \link[ggplot2]{ggplot} object. } \description{ Method for plotting the temporal patterns. -} -\examples{ -patt = twdtwTimeSeries(MOD13Q1.patterns.list) -plotPatterns(patt) -plotPatterns(patt, attr="evi") - } \references{ \insertRef{Maus:2019}{dtwSat} - - \insertRef{Maus:2016}{dtwSat} + +\insertRef{Maus:2016}{dtwSat} } \seealso{ -\code{\link[dtwSat]{twdtwTimeSeries-class}} and +\code{\link[dtwSat]{twdtwTimeSeries-class}} and \code{\link[dtwSat]{plotTimeSeries}} } \author{ diff --git a/man/reexports.Rd b/man/reexports.Rd deleted file mode 100644 index 82e3410..0000000 --- a/man/reexports.Rd +++ /dev/null @@ -1,19 +0,0 @@ -% Generated by roxygen2: do not edit by hand -% Please edit documentation in R/zzz.R -\docType{import} -\name{reexports} -\alias{reexports} -\alias{symmetric1} -\alias{symmetric2} -\alias{asymmetric} -\alias{rabinerJuangStepPattern} -\title{Objects exported from other packages} -\keyword{internal} -\description{ -These objects are imported from other packages. Follow the links -below to see their documentation. - -\describe{ - \item{dtw}{\code{\link[dtw:stepPattern]{asymmetric}}, \code{\link[dtw:stepPattern]{rabinerJuangStepPattern}}, \code{\link[dtw:stepPattern]{symmetric1}}, \code{\link[dtw:stepPattern]{symmetric2}}} -}} - diff --git a/man/resampleTimeSeries.Rd b/man/resampleTimeSeries.Rd deleted file mode 100644 index c2b008f..0000000 --- a/man/resampleTimeSeries.Rd +++ /dev/null @@ -1,40 +0,0 @@ -% Generated by roxygen2: do not edit by hand -% Please edit documentation in R/resampleTimeSeries.R -\name{resampleTimeSeries} -\alias{resampleTimeSeries} -\alias{resampleTimeSeries,twdtwTimeSeries-method} -\alias{resampleTimeSeries-twdtwMatches} -\title{Resample time series} -\usage{ -resampleTimeSeries(object, length = NULL) - -\S4method{resampleTimeSeries}{twdtwTimeSeries}(object, length = NULL) -} -\arguments{ -\item{object}{an object of class twdtwTimeSeries.} - -\item{length}{An integer. The number of samples to resample the time series to. -If not declared the length is set to the length of the longest time series.} -} -\value{ -An object of class \code{\link[dtwSat]{twdtwTimeSeries}} whose -time series have the same number of samples (points). -} -\description{ -Resample time series in the object to have the same length. -} -\examples{ -# Resampling time series from objects of class twdtwTimeSeries -patt = twdtwTimeSeries(MOD13Q1.patterns.list) -npatt = resampleTimeSeries(patt, length=46) -nrow(patt) -nrow(npatt) - -} -\seealso{ -\code{\link[dtwSat]{twdtwTimeSeries-class}}, and -\code{\link[dtwSat]{twdtwApply}} -} -\author{ -Victor Maus, \email{vwmaus1@gmail.com} -} diff --git a/man/shiftDates.Rd b/man/shiftDates.Rd deleted file mode 100644 index 0ff01d8..0000000 --- a/man/shiftDates.Rd +++ /dev/null @@ -1,55 +0,0 @@ -% Generated by roxygen2: do not edit by hand -% Please edit documentation in R/miscellaneous.R -\name{shiftDates} -\alias{shiftDates} -\alias{shiftDates,twdtwTimeSeries-method} -\alias{shiftDates-twdtwTimeSeries} -\alias{shiftDates,list-method} -\alias{shiftDates-list} -\alias{shiftDates,zoo-method} -\alias{shiftDates-zoo} -\title{Shift dates} -\usage{ -shiftDates(object, year = NULL) - -\S4method{shiftDates}{twdtwTimeSeries}(object, year = NULL) - -\S4method{shiftDates}{list}(object, year = NULL) - -\S4method{shiftDates}{zoo}(object, year = NULL) -} -\arguments{ -\item{object}{\code{\link[dtwSat]{twdtwTimeSeries}} objects, -\code{\link[zoo]{zoo}} objects or a list of \code{\link[zoo]{zoo}} objects.} - -\item{year}{the base year to shift the time series to.} -} -\value{ -An object of the same class as the input \code{object}. -} -\description{ -This function shifts the dates of the time series to a -given base year. -} -\examples{ -patt = twdtwTimeSeries(MOD13Q1.patterns.list) -npatt = shiftDates(patt, year=2005) -index(patt) -index(npatt) - -} -\references{ -\insertRef{Maus:2019}{dtwSat} - - \insertRef{Maus:2016}{dtwSat} - -\insertRef{Maus:2019}{dtwSat} - - \insertRef{Maus:2016}{dtwSat} -} -\seealso{ -\code{\link[dtwSat]{twdtwTimeSeries-class}} -} -\author{ -Victor Maus, \email{vwmaus1@gmail.com} -} diff --git a/man/shift_dates.Rd b/man/shift_dates.Rd new file mode 100644 index 0000000..6ed829b --- /dev/null +++ b/man/shift_dates.Rd @@ -0,0 +1,29 @@ +% Generated by roxygen2: do not edit by hand +% Please edit documentation in R/miscellaneous.R +\name{shift_dates} +\alias{shift_dates} +\title{Shift dates} +\usage{ +shift_dates(x, year) +} +\arguments{ +\item{year}{the base year to shift the time series to.} + +\item{object}{\code{\link[dtwSat]{twdtwTimeSeries}} objects, +\code{\link[zoo]{zoo}} objects or a list of \code{\link[zoo]{zoo}} objects.} +} +\value{ +An object of the same class as the input \code{object}. +} +\description{ +This function shifts the dates of the time series to a +given base year. +} +\references{ +\insertRef{Maus:2019}{dtwSat} + +\insertRef{Maus:2016}{dtwSat} +} +\author{ +Victor Maus, \email{vwmaus1@gmail.com} +} diff --git a/man/subset.Rd b/man/subset.Rd deleted file mode 100644 index ef0fb5d..0000000 --- a/man/subset.Rd +++ /dev/null @@ -1,87 +0,0 @@ -% Generated by roxygen2: do not edit by hand -% Please edit documentation in R/subset.R -\name{subset} -\alias{subset} -\alias{subset,twdtwTimeSeries-method} -\alias{subset-twdtwTimeSeries} -\alias{subset,twdtwMatches-method} -\alias{subset-twdtwMatches} -\alias{subset,twdtwRaster-method} -\alias{subset-twdtwRaster} -\title{Subset time series} -\usage{ -\S4method{subset}{twdtwTimeSeries}(x, labels = NULL) - -\S4method{subset}{twdtwMatches}(x, timeseries.labels = NULL, patterns.labels = NULL, k = NULL) - -\S4method{subset}{twdtwRaster}(x, e = NULL, layers = NULL) -} -\arguments{ -\item{x}{An objects of class twdtw*.} - -\item{labels}{A character vector with time series labels.} - -\item{timeseries.labels}{a vector with labels of the time series.} - -\item{patterns.labels}{a vector with labels of the patterns.} - -\item{k}{A positive integer. The index of the last alignment to include in -the subset.} - -\item{e}{An extent object, or any object from which an Extent object can -be extracted. See \link[raster]{crop} for details.} - -\item{layers}{A vector with the names of the \code{twdtwRaster} object to include in -the subset.} -} -\value{ -An object of class twdtw*. -} -\description{ -Get subsets from objects of class twdtw*. -} -\examples{ -# Getting time series from objects of class twdtwTimeSeries -ts = twdtwTimeSeries(MOD13Q1.ts.list) -ts = subset(ts, 2) -ts -# Getting time series from objects of class twdtwTimeSeries -patt = twdtwTimeSeries(MOD13Q1.patterns.list) -mat = twdtwApply(x=ts, y=patt, weight.fun=logisticWeight(-0.1,100), - keep=TRUE, legacy=TRUE) -mat = subset(mat, k=4) - -## This example creates a twdtwRaster object and extracts time series from it. - -# Creating objects of class twdtwRaster with evi and ndvi time series -evi = brick(system.file("lucc_MT/data/evi.tif", package="dtwSat")) -ndvi = brick(system.file("lucc_MT/data/ndvi.tif", package="dtwSat")) -timeline = scan(system.file("lucc_MT/data/timeline", package="dtwSat"), what="date") -rts = twdtwRaster(evi, ndvi, timeline=timeline) - -rts_evi = subset(rts, layers="evi") - -field_samples = read.csv(system.file("lucc_MT/data/samples.csv", package="dtwSat")) -prj_string = scan(system.file("lucc_MT/data/samples_projection", package="dtwSat"), - what = "character") - -# Extract time series -ts_evi = getTimeSeries(rts_evi, y = field_samples, proj4string = prj_string) - -# Subset all labels = "Forest" -ts_forest = subset(ts_evi, labels="Forest") - -} -\references{ -\insertRef{Maus:2019}{dtwSat} - - \insertRef{Maus:2016}{dtwSat} -} -\seealso{ -\code{\link[dtwSat]{twdtwRaster-class}}, -\code{\link[dtwSat]{twdtwTimeSeries-class}}, and -\code{\link[dtwSat]{twdtwMatches-class}} -} -\author{ -Victor Maus, \email{vwmaus1@gmail.com} -} diff --git a/man/twdtwApply.Rd b/man/twdtwApply.Rd deleted file mode 100644 index 9b885a9..0000000 --- a/man/twdtwApply.Rd +++ /dev/null @@ -1,272 +0,0 @@ -% Generated by roxygen2: do not edit by hand -% Please edit documentation in R/twdtwApply.R -\name{twdtwApply} -\alias{twdtwApply} -\alias{twdtwApply,twdtwTimeSeries-method} -\alias{twdtwApply-twdtwTimeSeries} -\alias{twdtwApply,twdtwRaster-method} -\alias{twdtwApply-twdtwRaster} -\title{Apply TWDTW analysis} -\usage{ -twdtwApply( - x, - y, - resample = TRUE, - length = NULL, - weight.fun = function(phi, psi) phi, - dist.method = "Euclidean", - step.matrix = symmetric1, - n = NULL, - span = NULL, - min.length = 0, - ... -) - -\S4method{twdtwApply}{twdtwTimeSeries}( - x, - y, - resample, - length, - weight.fun, - dist.method, - step.matrix, - n, - span, - min.length, - legacy = FALSE, - keep = FALSE, - ... -) - -\S4method{twdtwApply}{twdtwRaster}( - x, - y, - resample, - length, - weight.fun, - dist.method, - step.matrix, - n, - span, - min.length, - breaks = NULL, - from = NULL, - to = NULL, - by = NULL, - overlap = 0.5, - filepath = "", - fill = NULL, - legacy = FALSE, - progress = "text", - minrows = 1, - alpha = -0.1, - beta = 50, - ... -) -} -\arguments{ -\item{x}{An object of class twdtw*. This is the target time series. -Usually, it is a set of unclassified time series.} - -\item{y}{An object of class \link[dtwSat]{twdtwTimeSeries}. -The temporal patterns.} - -\item{resample}{Resample the patterns to have the same length. Default is TRUE. -See \link[dtwSat]{resampleTimeSeries} for details.} - -\item{length}{An integer. Length of patterns used with \code{patterns.length}. -If not declared the length of the output patterns will be the length of -the longest pattern.} - -\item{weight.fun}{A function. Any function that receives two matrices and -performs a computation on them, returning a single matrix with the same -dimensions. The first matrix is the DTW local cost matrix and the -second a matrix of the time differences in days. The function should return a -matrix of DTW local cost weighted by the time differences. If not declared -the time-weight is zero. In this case the function runs the standard version -of the dynamic time warping. See details.} - -\item{dist.method}{A character. Method to derive the local cost matrix. -Default is ''Euclidean'' see \code{\link[proxy]{dist}} in package -\pkg{proxy}.} - -\item{step.matrix}{See \code{\link[dtw]{stepPattern}} in package \pkg{dtw} -\insertCite{Giorgino:2009}{dtwSat}.} - -\item{n}{An integer. The maximun number of matches to perform. -NULL will return all matches.} - -\item{span}{A number. Span between two matches, \emph{i.e.} the minimum -interval between two matches; for details see \insertCite{Muller:2007}{dtwSat}. -If not declared it removes all overlapping matches of the same pattern. To include -overlapping matches of the same pattern use \code{span=0}.} - -\item{min.length}{A number between 0 an 1. This argument removes overfittings. -Minimum length after warping. Percentage of the original pattern length. Default is 0.5, -meaning that the matching cannot be shorter than half of the pattern length.} - -\item{...}{Arguments to pass to \code{\link[raster]{writeRaster}} and -\code{\link[raster]{pbCreate}}} - -\item{legacy}{logical. If FALSE, runs a faster new TWDTW implementation. Default FLASE} - -\item{keep}{Preserves the cost matrix, inputs, and other internal structures. -Default is FALSE. For plot methods use \code{keep=TRUE}.} - -\item{breaks}{A vector of class \code{\link[base]{Dates}}. This replaces the arguments \code{from}, -\code{to}, and \code{by}.} - -\item{from}{A character or \code{\link[base]{Dates}} object in the format "yyyy-mm-dd".} - -\item{to}{A \code{\link[base]{character}} or \code{\link[base]{Dates}} object in the format "yyyy-mm-dd".} - -\item{by}{A \code{\link[base]{character}} with the interval size, \emph{e.g.} "6 month".} - -\item{overlap}{A number between 0 and 1. The minimum overlapping -between one match and the interval of classification. Default is 0.5, -\emph{i.e.} an overlap minimum of 50\%.} - -\item{filepath}{A character. The path at which to save the raster with results. If not provided the -function saves in the current work directory.} - -\item{fill}{A character to fill the classification gaps. -For signature \code{twdtwTimeSeries} the default is \code{fill="unclassified"}, -for signature \code{twdtwRaster} the default is \code{fill="unclassified"}.} - -\item{progress}{character. 'text' or 'window'.} - -\item{minrows}{Integer. Minimum number of rows in each block} - -\item{alpha}{Numeric. The steepness of TWDTW logistic weight.} - -\item{beta}{Numeric. The midpoint of TWDTW logistic weight.} -} -\value{ -An object of class twdtw*. -} -\description{ -This function performs a multidimensional Time-Weighted DTW -analysis and retrieves the matches between the temporal patterns and -a set of time series \insertCite{Maus:2019}{dtwSat}. -} -\details{ -The linear \code{linearWeight} and \code{logisticWeight} weight functions -can be passed to \code{twdtwApply} through the argument \code{weight.fun}. This will -add a time-weight to the dynamic time warping analysis. The time weight -creates a global constraint useful for analyzing time series with phenological cycles -of vegetation that are usually bound to seasons. In previous studies by -\insertCite{Maus:2016}{dtwSat} the logistic weight had better results than the -linear for land cover classification. -See \insertCite{Maus:2016,Maus:2019}{dtwSat} for details about the method. -} -\examples{ -# Applying TWDTW analysis to objects of class twdtwTimeSeries -log_fun = logisticWeight(-0.1, 100) -ts = twdtwTimeSeries(MOD13Q1.ts.list) -patt = twdtwTimeSeries(MOD13Q1.patterns.list) -mat1 = twdtwApply(x=ts, y=patt, weight.fun=log_fun, keep=TRUE, legacy=TRUE) -mat1 - -\dontrun{ -# Parallel processin -require(parallel) -mat_list = mclapply(as.list(ts), mc.cores=2, FUN=twdtwApply, y=patt, weight.fun=log_fun) -mat2 = twdtwMatches(alignments=mat_list) -} -\dontrun{ - -# Example of TWDTW analysis using raster files -library(dtwSat) -library(caret) - -# Load raster data -evi <- brick(system.file("lucc_MT/data/evi.tif", package = "dtwSat")) -ndvi <- brick(system.file("lucc_MT/data/ndvi.tif", package = "dtwSat")) -red <- brick(system.file("lucc_MT/data/red.tif", package = "dtwSat")) -blue <- brick(system.file("lucc_MT/data/blue.tif", package = "dtwSat")) -nir <- brick(system.file("lucc_MT/data/nir.tif", package = "dtwSat")) -mir <- brick(system.file("lucc_MT/data/mir.tif", package = "dtwSat")) -doy <- brick(system.file("lucc_MT/data/doy.tif", package = "dtwSat")) -timeline <- - scan(system.file("lucc_MT/data/timeline", package = "dtwSat"), what="date") - -# Create raster time series -rts <- twdtwRaster(evi, ndvi, red, blue, nir, mir, timeline = timeline, doy = doy) - -# Load field samples and projection -field_samples <- - read.csv(system.file("lucc_MT/data/samples.csv", package = "dtwSat")) -proj_str <- - scan(system.file("lucc_MT/data/samples_projection", package = "dtwSat"), - what = "character") - -# Split samples for training (10\%) and validation (90\%) using stratified sampling -set.seed(1) -I <- unlist(createDataPartition(field_samples$label, p = 0.1)) -training_samples <- field_samples[I, ] -validation_samples <- field_samples[-I, ] - -# Get time series form raster -training_ts <- getTimeSeries(rts, y = training_samples, proj4string = proj_str) -validation_ts <- getTimeSeries(rts, y = validation_samples, proj4string = proj_str) - -# Create temporal patterns -temporal_patterns <- createPatterns(training_ts, freq = 8, formula = y ~ s(x)) - -# Set TWDTW weight function -log_fun <- logisticWeight(-0.1, 50) - -# Run TWDTW analysis -system.time( - r_twdtw <- - twdtwApply(x = rts, y = temporal_patterns, weight.fun = log_fun, progress = 'text') -) - -# Plot TWDTW distances for the first year -plot(r_twdtw, type = "distance", time.levels = 1) - -# Classify raster based on the TWDTW analysis -r_lucc <- twdtwClassify(r_twdtw, progress = 'text') - -# Plot TWDTW classification results -plot(r_lucc, type = "map") - -# Assess classification -twdtw_assess <- - twdtwAssess(object = r_lucc, y = validation_samples, - proj4string = proj_str, conf.int = .95) - -# Plot map accuracy -plot(twdtw_assess, type = "accuracy") - -# Plot area uncertainty -plot(twdtw_assess, type = "area") - -# Plot misclassified samples -plot(twdtw_assess, type = "map", samples = "incorrect") - -# Get latex table with error matrix -twdtwXtable(twdtw_assess, table.type = "matrix") - -# Get latex table with error accuracy -twdtwXtable(twdtw_assess, table.type = "accuracy") - -# Get latex table with area uncertainty -twdtwXtable(twdtw_assess, table.type = "area") - -} - -} -\references{ -\insertAllCited{} -} -\seealso{ -\code{\link[dtwSat]{twdtwMatches-class}}, -\code{\link[dtwSat]{twdtwTimeSeries-class}}, -\code{\link[dtwSat]{twdtwRaster-class}}, -\code{\link[dtwSat]{getTimeSeries}}, and -\code{\link[dtwSat]{createPatterns}} -} -\author{ -Victor Maus, \email{vwmaus1@gmail.com} -} diff --git a/man/twdtwAssess.Rd b/man/twdtwAssess.Rd deleted file mode 100644 index e89ceb6..0000000 --- a/man/twdtwAssess.Rd +++ /dev/null @@ -1,284 +0,0 @@ -% Generated by roxygen2: do not edit by hand -% Please edit documentation in R/twdtwAssess.R -\name{twdtwAssess} -\alias{twdtwAssess} -\alias{twdtwAssess,twdtwRaster-method} -\alias{twdtwAssess-twdtwRaster} -\alias{twdtwAssess,data.frame-method} -\alias{twdtwAssess-data.frame} -\alias{twdtwAssess,table-method} -\alias{twdtwAssess-table} -\alias{twdtwAssess,matrix-method} -\alias{twdtwAssess-matrix} -\alias{twdtwAssess,twdtwMatches-method} -\alias{twdtwAssess-twdtwMatches} -\title{Assess TWDTW classification} -\usage{ -\S4method{twdtwAssess}{twdtwRaster}( - object, - y, - labels = NULL, - id.labels = NULL, - proj4string = NULL, - conf.int = 0.95, - rm.nosample = FALSE, - start_date = NULL -) - -\S4method{twdtwAssess}{data.frame}(object, area, conf.int = 0.95, rm.nosample = TRUE) - -\S4method{twdtwAssess}{table}(object, area, conf.int = 0.95, rm.nosample = TRUE) - -\S4method{twdtwAssess}{matrix}(object, area, conf.int = 0.95, rm.nosample = TRUE) - -\S4method{twdtwAssess}{twdtwMatches}(object, area, conf.int = 0.95, rm.nosample = TRUE) -} -\arguments{ -\item{object}{An object of class \code{\link[dtwSat]{twdtwRaster}} resulting from -the classification, i.e. \code{\link[dtwSat]{twdtwClassify}}. -The argument can also receive an error matrix (confusion matrix) using the classes -\code{\link[base]{data.frame}} or \code{\link[base]{table}}. In this case the user -must provide the area for each class to the argument \code{area}.} - -\item{y}{A \code{\link[base]{data.frame}} whose attributes are: longitude, -latitude, the start ''from'' and the end ''to'' of the time interval -for each sample. This can also be a \code{\link[sp]{SpatialPointsDataFrame}} -whose attributes are the start ''from'' and the end ''to'' of the time interval. -If missing ''from'' and/or ''to'', they are set to the time range of the -\code{object}.} - -\item{labels}{Character vector with time series labels. For signature -\code{\link[dtwSat]{twdtwRaster}} this argument can be used to set the -labels for each sample in \code{y}, or it can be combined with \code{id.labels} -to select samples with a specific label.} - -\item{id.labels}{A numeric or character with an column name from \code{y} to -be used as samples labels. Optional.} - -\item{proj4string}{Projection string, see \code{\link[sp]{CRS-class}}. Used -if \code{y} is a \code{\link[base]{data.frame}}.} - -\item{conf.int}{Specifies the confidence level (0-1).} - -\item{rm.nosample}{If sum of columns and sum of rows of the error matrix are zero -then remove class. Default is TRUE.} - -\item{start_date}{A date. Required if there is only one map to be assessed. Usually this is the -first date of the timeline from satellite images.} - -\item{area}{A numeric vector with the area for each class if the argument \code{object} -is an error matrix (confusion matrix). If \code{object} is \code{\link[dtwSat]{twdtwMatches}} -area can be either a vector with the area of each classified object, or a single number -if the objects are single pixels.} -} -\description{ -Performs an accuracy assessment -of the classified maps. The function returns Overall Accuracy, -User's Accuracy, Produce's Accuracy, error matrix (confusion matrix), -and estimated area according to \insertCite{Olofsson:2013,Olofsson:2014;textual}{dtwSat}. -The function returns the metrics for each time interval and a summary considering all -classified intervals. -} -\examples{ -\dontrun{ - -# Example of TWDTW analysis using raster files -library(dtwSat) -library(caret) - -# Load raster data -evi <- brick(system.file("lucc_MT/data/evi.tif", package = "dtwSat")) -ndvi <- brick(system.file("lucc_MT/data/ndvi.tif", package = "dtwSat")) -red <- brick(system.file("lucc_MT/data/red.tif", package = "dtwSat")) -blue <- brick(system.file("lucc_MT/data/blue.tif", package = "dtwSat")) -nir <- brick(system.file("lucc_MT/data/nir.tif", package = "dtwSat")) -mir <- brick(system.file("lucc_MT/data/mir.tif", package = "dtwSat")) -doy <- brick(system.file("lucc_MT/data/doy.tif", package = "dtwSat")) -timeline <- - scan(system.file("lucc_MT/data/timeline", package = "dtwSat"), what="date") - -# Create raster time series -rts <- twdtwRaster(evi, ndvi, red, blue, nir, mir, timeline = timeline, doy = doy) - -# Load field samples and projection -field_samples <- - read.csv(system.file("lucc_MT/data/samples.csv", package = "dtwSat")) -proj_str <- - scan(system.file("lucc_MT/data/samples_projection", package = "dtwSat"), - what = "character") - -# Split samples for training (10\%) and validation (90\%) using stratified sampling -set.seed(1) -I <- unlist(createDataPartition(field_samples$label, p = 0.1)) -training_samples <- field_samples[I, ] -validation_samples <- field_samples[-I, ] - -# Get time series form raster -training_ts <- getTimeSeries(rts, y = training_samples, proj4string = proj_str) -validation_ts <- getTimeSeries(rts, y = validation_samples, proj4string = proj_str) - -# Create temporal patterns -temporal_patterns <- createPatterns(training_ts, freq = 8, formula = y ~ s(x)) - -# Set TWDTW weight function -log_fun <- logisticWeight(-0.1, 50) - -# Run TWDTW analysis -system.time( - r_twdtw <- - twdtwApply(x = rts, y = temporal_patterns, weight.fun = log_fun, progress = 'text') -) - -# Plot TWDTW distances for the first year -plot(r_twdtw, type = "distance", time.levels = 1) - -# Classify raster based on the TWDTW analysis -r_lucc <- twdtwClassify(r_twdtw, progress = 'text') - -# Plot TWDTW classification results -plot(r_lucc, type = "map") - -# Assess classification -twdtw_assess <- - twdtwAssess(object = r_lucc, y = validation_samples, - proj4string = proj_str, conf.int = .95) - -# Plot map accuracy -plot(twdtw_assess, type = "accuracy") - -# Plot area uncertainty -plot(twdtw_assess, type = "area") - -# Plot misclassified samples -plot(twdtw_assess, type = "map", samples = "incorrect") - -# Get latex table with error matrix -twdtwXtable(twdtw_assess, table.type = "matrix") - -# Get latex table with error accuracy -twdtwXtable(twdtw_assess, table.type = "accuracy") - -# Get latex table with area uncertainty -twdtwXtable(twdtw_assess, table.type = "area") - -} - - -# Total mapped area by class. Data from [1] -area = c(A = 22353, B = 1122543, C = 610228) - -# Error matrix, columns (Reference) rows (Map) -x = - rbind( - c( 97, 0, 3), - c( 3, 279, 18), - c( 2, 1, 97) - ) - -table_assess = twdtwAssess(x, area, conf.int = .95) - -table_assess - -plot(table_assess, type="area", perc=FALSE) - -plot(table_assess, type="accuracy") - -\dontrun{ - -# Example of TWDTW analysis using raster files -library(dtwSat) -library(caret) - -# Load raster data -evi <- brick(system.file("lucc_MT/data/evi.tif", package = "dtwSat")) -ndvi <- brick(system.file("lucc_MT/data/ndvi.tif", package = "dtwSat")) -red <- brick(system.file("lucc_MT/data/red.tif", package = "dtwSat")) -blue <- brick(system.file("lucc_MT/data/blue.tif", package = "dtwSat")) -nir <- brick(system.file("lucc_MT/data/nir.tif", package = "dtwSat")) -mir <- brick(system.file("lucc_MT/data/mir.tif", package = "dtwSat")) -doy <- brick(system.file("lucc_MT/data/doy.tif", package = "dtwSat")) -timeline <- - scan(system.file("lucc_MT/data/timeline", package = "dtwSat"), what="date") - -# Create raster time series -rts <- twdtwRaster(evi, ndvi, red, blue, nir, mir, timeline = timeline, doy = doy) - -# Load field samples and projection -field_samples <- - read.csv(system.file("lucc_MT/data/samples.csv", package = "dtwSat")) -proj_str <- - scan(system.file("lucc_MT/data/samples_projection", package = "dtwSat"), - what = "character") - -# Split samples for training (10\%) and validation (90\%) using stratified sampling -set.seed(1) -I <- unlist(createDataPartition(field_samples$label, p = 0.1)) -training_samples <- field_samples[I, ] -validation_samples <- field_samples[-I, ] - -# Get time series form raster -training_ts <- getTimeSeries(rts, y = training_samples, proj4string = proj_str) -validation_ts <- getTimeSeries(rts, y = validation_samples, proj4string = proj_str) - -# Create temporal patterns -temporal_patterns <- createPatterns(training_ts, freq = 8, formula = y ~ s(x)) - -# Set TWDTW weight function -log_fun <- logisticWeight(-0.1, 50) - -# Run TWDTW analysis -system.time( - r_twdtw <- - twdtwApply(x = rts, y = temporal_patterns, weight.fun = log_fun, progress = 'text') -) - -# Plot TWDTW distances for the first year -plot(r_twdtw, type = "distance", time.levels = 1) - -# Classify raster based on the TWDTW analysis -r_lucc <- twdtwClassify(r_twdtw, progress = 'text') - -# Plot TWDTW classification results -plot(r_lucc, type = "map") - -# Assess classification -twdtw_assess <- - twdtwAssess(object = r_lucc, y = validation_samples, - proj4string = proj_str, conf.int = .95) - -# Plot map accuracy -plot(twdtw_assess, type = "accuracy") - -# Plot area uncertainty -plot(twdtw_assess, type = "area") - -# Plot misclassified samples -plot(twdtw_assess, type = "map", samples = "incorrect") - -# Get latex table with error matrix -twdtwXtable(twdtw_assess, table.type = "matrix") - -# Get latex table with error accuracy -twdtwXtable(twdtw_assess, table.type = "accuracy") - -# Get latex table with area uncertainty -twdtwXtable(twdtw_assess, table.type = "area") - -} - -} -\references{ -\insertAllCited{} - - \insertRef{Maus:2019}{dtwSat} - - \insertRef{Maus:2016}{dtwSat} -} -\seealso{ -\code{\link[dtwSat]{twdtwClassify}}, -\code{\link[dtwSat]{twdtwAssessment}}, and -\code{\link[dtwSat]{twdtwXtable}}. -} -\author{ -Victor Maus, \email{vwmaus1@gmail.com} -} diff --git a/man/twdtwAssessment-class.Rd b/man/twdtwAssessment-class.Rd deleted file mode 100644 index a79d971..0000000 --- a/man/twdtwAssessment-class.Rd +++ /dev/null @@ -1,48 +0,0 @@ -% Generated by roxygen2: do not edit by hand -% Please edit documentation in R/class-twdtwAssessment.R, R/methods.R -\name{twdtwAssessment-class} -\alias{twdtwAssessment-class} -\alias{twdtwAssessment} -\alias{show,twdtwAssessment-method} -\title{class "twdtwAssessment"} -\usage{ -\S4method{show}{twdtwAssessment}(object) -} -\arguments{ -\item{object}{an object of class twdtwAssessment.} -} -\description{ -This class stores the map assessment metrics. -} -\details{ -If the twdtwRaster is unprojected (longitude/latitude) the estimated area is the sum of the approximate -surface area in km2 of each cell (pixel). If the twdtwRaster is projected the estimated area is calculated -using the the pixel resolution in the map unit. -} -\section{Slots }{ - -\describe{ - \item{\code{accuracySummary}:}{Overall Accuracy, User's Accuracy, Producer's Accuracy, - Error Matrix (confusion matrix), and Estimated Area, considering all time periods.} - \item{\code{accuracyByPeriod}:}{Overall Accuracy, User's Accuracy, Producer's Accuracy, - Error Matrix (confusion matrix), and Estimated Area, for each time periods independently - from each other.} - \item{\code{data}:}{A \code{\link[sp]{SpatialPointsDataFrame}} with sample ID, period, - date from, date to, reference labels, predicted labels, and TWDTW distance.} - \item{\code{map}:}{A \code{\link[dtwSat]{twdtwRaster}} with the raster maps.} -} -} - -\references{ -\insertRef{Maus:2019}{dtwSat} - - \insertRef{Maus:2016}{dtwSat} -} -\seealso{ -\code{\link[dtwSat]{twdtwClassify}}, -\code{\link[dtwSat]{twdtwAssess}}, and -\code{\link[dtwSat]{twdtwXtable}}. -} -\author{ -Victor Maus, \email{vwmaus1@gmail.com} -} diff --git a/man/twdtwClassify.Rd b/man/twdtwClassify.Rd deleted file mode 100644 index 3db968a..0000000 --- a/man/twdtwClassify.Rd +++ /dev/null @@ -1,576 +0,0 @@ -% Generated by roxygen2: do not edit by hand -% Please edit documentation in R/twdtwClassify.R -\name{twdtwClassify} -\alias{twdtwClassify} -\alias{twdtwClassify,data.frame-method} -\alias{twdtwClassify-data.frame} -\alias{twdtwClassify,list-method} -\alias{twdtwClassify-list} -\alias{twdtwClassify,twdtwTimeSeries-method} -\alias{twdtwClassify-twdtwTimeSeries} -\alias{twdtwClassify,twdtwMatches-method} -\alias{twdtwClassify,twdtwRaster-method} -\alias{twdtwClassify-twdtwRaster} -\title{Classify time series} -\usage{ -twdtwClassify(x, ...) - -\S4method{twdtwClassify}{data.frame}( - x, - y, - step.matrix = symmetric1, - breaks = NULL, - from = NULL, - to = NULL, - by = NULL, - overlap = 0.5, - fill = length(y), - alpha = -0.1, - beta = 50, - time.window = FALSE, - keep = FALSE, - ... -) - -\S4method{twdtwClassify}{list}( - x, - y, - step.matrix = symmetric1, - breaks = NULL, - from = NULL, - to = NULL, - by = NULL, - overlap = 0.5, - fill = length(y), - alpha = -0.1, - beta = 50, - time.window = FALSE, - keep = FALSE, - ... -) - -\S4method{twdtwClassify}{twdtwTimeSeries}( - x, - patterns.labels = NULL, - from = NULL, - to = NULL, - by = NULL, - breaks = NULL, - overlap = 0.5, - thresholds = Inf, - fill = "unclassified", - ... -) - -\S4method{twdtwClassify}{twdtwMatches}( - x, - patterns.labels = NULL, - from = NULL, - to = NULL, - by = NULL, - breaks = NULL, - overlap = 0.5, - thresholds = Inf, - fill = "unclassified" -) - -\S4method{twdtwClassify}{twdtwRaster}( - x, - patterns.labels = NULL, - thresholds = Inf, - fill = 255, - filepath = "", - ... -) -} -\arguments{ -\item{x}{An object of class twdtw*. This is the target time series. -Usually, it is a set of unclassified time series.} - -\item{...}{Arguments to pass to specific methods for each twdtw* class -and other arguments to pass to \code{\link[raster]{writeRaster}} and -\code{\link[raster]{pbCreate}}. If \code{x} of -\code{\link[dtwSat]{twdtwTimeSeries-class}} additional arguments passed to -\code{\link[dtwSat]{twdtwApply}}.} - -\item{y}{a list of data.frame objects similar to \code{x}. -The temporal patterns used to classify the time series in \code{x}.} - -\item{step.matrix}{See \code{\link[dtw]{stepPattern}} in package \pkg{dtw} -\insertCite{Giorgino:2009}{dtwSat}.} - -\item{breaks}{A vector of class \code{\link[base]{Dates}}. This replaces the arguments \code{from}, -\code{to}, and \code{by}.} - -\item{from}{A character or \code{\link[base]{Dates}} object in the format "yyyy-mm-dd".} - -\item{to}{A \code{\link[base]{character}} or \code{\link[base]{Dates}} object in the format "yyyy-mm-dd".} - -\item{by}{A \code{\link[base]{character}} with the interval size, \emph{e.g.} "6 month".} - -\item{overlap}{A number between 0 and 1. The minimum overlapping -between one match and the interval of classification. Default is 0.5, -\emph{i.e.} an overlap minimum of 50\%.} - -\item{fill}{A character to fill the classification gaps. -For signature \code{twdtwTimeSeries} the default is \code{fill="unclassified"}, -for signature \code{twdtwRaster} the default is \code{fill="unclassified"}.} - -\item{alpha}{Numeric. The steepness of TWDTW logistic weight.} - -\item{beta}{Numeric. The midpoint of TWDTW logistic weight.} - -\item{time.window}{logical. TRUE will constrain the TWDTW computation to the -value of the parameter \code{beta} defined in the logistic weight function. -Default is FALSE.} - -\item{keep}{Preserves the cost matrix, inputs, and other internal structures. -Default is FALSE. For plot methods use \code{keep=TRUE}.} - -\item{patterns.labels}{a vector with labels of the patterns.} - -\item{thresholds}{A numeric vector the same length as \code{patterns.labels}. -The TWDTW dissimilarity thresholds, i.e. the maximum TWDTW cost for consideration -in the classification. Default is \code{Inf} for all \code{patterns.labels}.} - -\item{filepath}{A character. The path at which to save the raster with results. -If not provided the function saves in the same directory as the input time series raster.} -} -\value{ -An object of class twdtw*. -} -\description{ -This function classifies the intervals of a time series -based on the TWDTW results. -} -\examples{ -\dontrun{ - -# Example of TWDTW analysis using raster files -library(dtwSat) -library(caret) - -# Load raster data -evi <- brick(system.file("lucc_MT/data/evi.tif", package = "dtwSat")) -ndvi <- brick(system.file("lucc_MT/data/ndvi.tif", package = "dtwSat")) -red <- brick(system.file("lucc_MT/data/red.tif", package = "dtwSat")) -blue <- brick(system.file("lucc_MT/data/blue.tif", package = "dtwSat")) -nir <- brick(system.file("lucc_MT/data/nir.tif", package = "dtwSat")) -mir <- brick(system.file("lucc_MT/data/mir.tif", package = "dtwSat")) -doy <- brick(system.file("lucc_MT/data/doy.tif", package = "dtwSat")) -timeline <- - scan(system.file("lucc_MT/data/timeline", package = "dtwSat"), what="date") - -# Create raster time series -rts <- twdtwRaster(evi, ndvi, red, blue, nir, mir, timeline = timeline, doy = doy) - -# Load field samples and projection -field_samples <- - read.csv(system.file("lucc_MT/data/samples.csv", package = "dtwSat")) -proj_str <- - scan(system.file("lucc_MT/data/samples_projection", package = "dtwSat"), - what = "character") - -# Split samples for training (10\%) and validation (90\%) using stratified sampling -set.seed(1) -I <- unlist(createDataPartition(field_samples$label, p = 0.1)) -training_samples <- field_samples[I, ] -validation_samples <- field_samples[-I, ] - -# Get time series form raster -training_ts <- getTimeSeries(rts, y = training_samples, proj4string = proj_str) -validation_ts <- getTimeSeries(rts, y = validation_samples, proj4string = proj_str) - -# Create temporal patterns -temporal_patterns <- createPatterns(training_ts, freq = 8, formula = y ~ s(x)) - -# Set TWDTW weight function -log_fun <- logisticWeight(-0.1, 50) - -# Run TWDTW analysis -system.time( - r_twdtw <- - twdtwApply(x = rts, y = temporal_patterns, weight.fun = log_fun, progress = 'text') -) - -# Plot TWDTW distances for the first year -plot(r_twdtw, type = "distance", time.levels = 1) - -# Classify raster based on the TWDTW analysis -r_lucc <- twdtwClassify(r_twdtw, progress = 'text') - -# Plot TWDTW classification results -plot(r_lucc, type = "map") - -# Assess classification -twdtw_assess <- - twdtwAssess(object = r_lucc, y = validation_samples, - proj4string = proj_str, conf.int = .95) - -# Plot map accuracy -plot(twdtw_assess, type = "accuracy") - -# Plot area uncertainty -plot(twdtw_assess, type = "area") - -# Plot misclassified samples -plot(twdtw_assess, type = "map", samples = "incorrect") - -# Get latex table with error matrix -twdtwXtable(twdtw_assess, table.type = "matrix") - -# Get latex table with error accuracy -twdtwXtable(twdtw_assess, table.type = "accuracy") - -# Get latex table with area uncertainty -twdtwXtable(twdtw_assess, table.type = "area") - -} - -\dontrun{ - -# Example of TWDTW analysis using raster files -library(dtwSat) -library(caret) - -# Load raster data -evi <- brick(system.file("lucc_MT/data/evi.tif", package = "dtwSat")) -ndvi <- brick(system.file("lucc_MT/data/ndvi.tif", package = "dtwSat")) -red <- brick(system.file("lucc_MT/data/red.tif", package = "dtwSat")) -blue <- brick(system.file("lucc_MT/data/blue.tif", package = "dtwSat")) -nir <- brick(system.file("lucc_MT/data/nir.tif", package = "dtwSat")) -mir <- brick(system.file("lucc_MT/data/mir.tif", package = "dtwSat")) -doy <- brick(system.file("lucc_MT/data/doy.tif", package = "dtwSat")) -timeline <- - scan(system.file("lucc_MT/data/timeline", package = "dtwSat"), what="date") - -# Create raster time series -rts <- twdtwRaster(evi, ndvi, red, blue, nir, mir, timeline = timeline, doy = doy) - -# Load field samples and projection -field_samples <- - read.csv(system.file("lucc_MT/data/samples.csv", package = "dtwSat")) -proj_str <- - scan(system.file("lucc_MT/data/samples_projection", package = "dtwSat"), - what = "character") - -# Split samples for training (10\%) and validation (90\%) using stratified sampling -set.seed(1) -I <- unlist(createDataPartition(field_samples$label, p = 0.1)) -training_samples <- field_samples[I, ] -validation_samples <- field_samples[-I, ] - -# Get time series form raster -training_ts <- getTimeSeries(rts, y = training_samples, proj4string = proj_str) -validation_ts <- getTimeSeries(rts, y = validation_samples, proj4string = proj_str) - -# Create temporal patterns -temporal_patterns <- createPatterns(training_ts, freq = 8, formula = y ~ s(x)) - -# Set TWDTW weight function -log_fun <- logisticWeight(-0.1, 50) - -# Run TWDTW analysis -system.time( - r_twdtw <- - twdtwApply(x = rts, y = temporal_patterns, weight.fun = log_fun, progress = 'text') -) - -# Plot TWDTW distances for the first year -plot(r_twdtw, type = "distance", time.levels = 1) - -# Classify raster based on the TWDTW analysis -r_lucc <- twdtwClassify(r_twdtw, progress = 'text') - -# Plot TWDTW classification results -plot(r_lucc, type = "map") - -# Assess classification -twdtw_assess <- - twdtwAssess(object = r_lucc, y = validation_samples, - proj4string = proj_str, conf.int = .95) - -# Plot map accuracy -plot(twdtw_assess, type = "accuracy") - -# Plot area uncertainty -plot(twdtw_assess, type = "area") - -# Plot misclassified samples -plot(twdtw_assess, type = "map", samples = "incorrect") - -# Get latex table with error matrix -twdtwXtable(twdtw_assess, table.type = "matrix") - -# Get latex table with error accuracy -twdtwXtable(twdtw_assess, table.type = "accuracy") - -# Get latex table with area uncertainty -twdtwXtable(twdtw_assess, table.type = "area") - -} - -\dontrun{ - -# Example of TWDTW analysis using raster files -library(dtwSat) -library(caret) - -# Load raster data -evi <- brick(system.file("lucc_MT/data/evi.tif", package = "dtwSat")) -ndvi <- brick(system.file("lucc_MT/data/ndvi.tif", package = "dtwSat")) -red <- brick(system.file("lucc_MT/data/red.tif", package = "dtwSat")) -blue <- brick(system.file("lucc_MT/data/blue.tif", package = "dtwSat")) -nir <- brick(system.file("lucc_MT/data/nir.tif", package = "dtwSat")) -mir <- brick(system.file("lucc_MT/data/mir.tif", package = "dtwSat")) -doy <- brick(system.file("lucc_MT/data/doy.tif", package = "dtwSat")) -timeline <- - scan(system.file("lucc_MT/data/timeline", package = "dtwSat"), what="date") - -# Create raster time series -rts <- twdtwRaster(evi, ndvi, red, blue, nir, mir, timeline = timeline, doy = doy) - -# Load field samples and projection -field_samples <- - read.csv(system.file("lucc_MT/data/samples.csv", package = "dtwSat")) -proj_str <- - scan(system.file("lucc_MT/data/samples_projection", package = "dtwSat"), - what = "character") - -# Split samples for training (10\%) and validation (90\%) using stratified sampling -set.seed(1) -I <- unlist(createDataPartition(field_samples$label, p = 0.1)) -training_samples <- field_samples[I, ] -validation_samples <- field_samples[-I, ] - -# Get time series form raster -training_ts <- getTimeSeries(rts, y = training_samples, proj4string = proj_str) -validation_ts <- getTimeSeries(rts, y = validation_samples, proj4string = proj_str) - -# Create temporal patterns -temporal_patterns <- createPatterns(training_ts, freq = 8, formula = y ~ s(x)) - -# Set TWDTW weight function -log_fun <- logisticWeight(-0.1, 50) - -# Run TWDTW analysis -system.time( - r_twdtw <- - twdtwApply(x = rts, y = temporal_patterns, weight.fun = log_fun, progress = 'text') -) - -# Plot TWDTW distances for the first year -plot(r_twdtw, type = "distance", time.levels = 1) - -# Classify raster based on the TWDTW analysis -r_lucc <- twdtwClassify(r_twdtw, progress = 'text') - -# Plot TWDTW classification results -plot(r_lucc, type = "map") - -# Assess classification -twdtw_assess <- - twdtwAssess(object = r_lucc, y = validation_samples, - proj4string = proj_str, conf.int = .95) - -# Plot map accuracy -plot(twdtw_assess, type = "accuracy") - -# Plot area uncertainty -plot(twdtw_assess, type = "area") - -# Plot misclassified samples -plot(twdtw_assess, type = "map", samples = "incorrect") - -# Get latex table with error matrix -twdtwXtable(twdtw_assess, table.type = "matrix") - -# Get latex table with error accuracy -twdtwXtable(twdtw_assess, table.type = "accuracy") - -# Get latex table with area uncertainty -twdtwXtable(twdtw_assess, table.type = "area") - -} - -\dontrun{ - -# Example of TWDTW analysis using raster files -library(dtwSat) -library(caret) - -# Load raster data -evi <- brick(system.file("lucc_MT/data/evi.tif", package = "dtwSat")) -ndvi <- brick(system.file("lucc_MT/data/ndvi.tif", package = "dtwSat")) -red <- brick(system.file("lucc_MT/data/red.tif", package = "dtwSat")) -blue <- brick(system.file("lucc_MT/data/blue.tif", package = "dtwSat")) -nir <- brick(system.file("lucc_MT/data/nir.tif", package = "dtwSat")) -mir <- brick(system.file("lucc_MT/data/mir.tif", package = "dtwSat")) -doy <- brick(system.file("lucc_MT/data/doy.tif", package = "dtwSat")) -timeline <- - scan(system.file("lucc_MT/data/timeline", package = "dtwSat"), what="date") - -# Create raster time series -rts <- twdtwRaster(evi, ndvi, red, blue, nir, mir, timeline = timeline, doy = doy) - -# Load field samples and projection -field_samples <- - read.csv(system.file("lucc_MT/data/samples.csv", package = "dtwSat")) -proj_str <- - scan(system.file("lucc_MT/data/samples_projection", package = "dtwSat"), - what = "character") - -# Split samples for training (10\%) and validation (90\%) using stratified sampling -set.seed(1) -I <- unlist(createDataPartition(field_samples$label, p = 0.1)) -training_samples <- field_samples[I, ] -validation_samples <- field_samples[-I, ] - -# Get time series form raster -training_ts <- getTimeSeries(rts, y = training_samples, proj4string = proj_str) -validation_ts <- getTimeSeries(rts, y = validation_samples, proj4string = proj_str) - -# Create temporal patterns -temporal_patterns <- createPatterns(training_ts, freq = 8, formula = y ~ s(x)) - -# Set TWDTW weight function -log_fun <- logisticWeight(-0.1, 50) - -# Run TWDTW analysis -system.time( - r_twdtw <- - twdtwApply(x = rts, y = temporal_patterns, weight.fun = log_fun, progress = 'text') -) - -# Plot TWDTW distances for the first year -plot(r_twdtw, type = "distance", time.levels = 1) - -# Classify raster based on the TWDTW analysis -r_lucc <- twdtwClassify(r_twdtw, progress = 'text') - -# Plot TWDTW classification results -plot(r_lucc, type = "map") - -# Assess classification -twdtw_assess <- - twdtwAssess(object = r_lucc, y = validation_samples, - proj4string = proj_str, conf.int = .95) - -# Plot map accuracy -plot(twdtw_assess, type = "accuracy") - -# Plot area uncertainty -plot(twdtw_assess, type = "area") - -# Plot misclassified samples -plot(twdtw_assess, type = "map", samples = "incorrect") - -# Get latex table with error matrix -twdtwXtable(twdtw_assess, table.type = "matrix") - -# Get latex table with error accuracy -twdtwXtable(twdtw_assess, table.type = "accuracy") - -# Get latex table with area uncertainty -twdtwXtable(twdtw_assess, table.type = "area") - -} - -\dontrun{ - -# Example of TWDTW analysis using raster files -library(dtwSat) -library(caret) - -# Load raster data -evi <- brick(system.file("lucc_MT/data/evi.tif", package = "dtwSat")) -ndvi <- brick(system.file("lucc_MT/data/ndvi.tif", package = "dtwSat")) -red <- brick(system.file("lucc_MT/data/red.tif", package = "dtwSat")) -blue <- brick(system.file("lucc_MT/data/blue.tif", package = "dtwSat")) -nir <- brick(system.file("lucc_MT/data/nir.tif", package = "dtwSat")) -mir <- brick(system.file("lucc_MT/data/mir.tif", package = "dtwSat")) -doy <- brick(system.file("lucc_MT/data/doy.tif", package = "dtwSat")) -timeline <- - scan(system.file("lucc_MT/data/timeline", package = "dtwSat"), what="date") - -# Create raster time series -rts <- twdtwRaster(evi, ndvi, red, blue, nir, mir, timeline = timeline, doy = doy) - -# Load field samples and projection -field_samples <- - read.csv(system.file("lucc_MT/data/samples.csv", package = "dtwSat")) -proj_str <- - scan(system.file("lucc_MT/data/samples_projection", package = "dtwSat"), - what = "character") - -# Split samples for training (10\%) and validation (90\%) using stratified sampling -set.seed(1) -I <- unlist(createDataPartition(field_samples$label, p = 0.1)) -training_samples <- field_samples[I, ] -validation_samples <- field_samples[-I, ] - -# Get time series form raster -training_ts <- getTimeSeries(rts, y = training_samples, proj4string = proj_str) -validation_ts <- getTimeSeries(rts, y = validation_samples, proj4string = proj_str) - -# Create temporal patterns -temporal_patterns <- createPatterns(training_ts, freq = 8, formula = y ~ s(x)) - -# Set TWDTW weight function -log_fun <- logisticWeight(-0.1, 50) - -# Run TWDTW analysis -system.time( - r_twdtw <- - twdtwApply(x = rts, y = temporal_patterns, weight.fun = log_fun, progress = 'text') -) - -# Plot TWDTW distances for the first year -plot(r_twdtw, type = "distance", time.levels = 1) - -# Classify raster based on the TWDTW analysis -r_lucc <- twdtwClassify(r_twdtw, progress = 'text') - -# Plot TWDTW classification results -plot(r_lucc, type = "map") - -# Assess classification -twdtw_assess <- - twdtwAssess(object = r_lucc, y = validation_samples, - proj4string = proj_str, conf.int = .95) - -# Plot map accuracy -plot(twdtw_assess, type = "accuracy") - -# Plot area uncertainty -plot(twdtw_assess, type = "area") - -# Plot misclassified samples -plot(twdtw_assess, type = "map", samples = "incorrect") - -# Get latex table with error matrix -twdtwXtable(twdtw_assess, table.type = "matrix") - -# Get latex table with error accuracy -twdtwXtable(twdtw_assess, table.type = "accuracy") - -# Get latex table with area uncertainty -twdtwXtable(twdtw_assess, table.type = "area") - -} - -} -\references{ -\insertRef{Maus:2019}{dtwSat} - - \insertRef{Maus:2016}{dtwSat} -} -\seealso{ -\code{\link[dtwSat]{twdtwApply}}, -\code{\link[dtwSat]{twdtwMatches-class}}, -\code{\link[dtwSat]{twdtwTimeSeries-class}}, and -\code{\link[dtwSat]{twdtwRaster-class}}, -} -\author{ -Victor Maus, \email{vwmaus1@gmail.com} -} diff --git a/man/twdtwCrossValidate.Rd b/man/twdtwCrossValidate.Rd deleted file mode 100644 index 25024a3..0000000 --- a/man/twdtwCrossValidate.Rd +++ /dev/null @@ -1,81 +0,0 @@ -% Generated by roxygen2: do not edit by hand -% Please edit documentation in R/twdtwCrossValidate.R -\name{twdtwCrossValidate} -\alias{twdtwCrossValidate} -\alias{twdtwCrossValidate,twdtwTimeSeries-method} -\alias{twdtwCrossValidate-twdtwTimeSeries} -\title{Cross Validate temporal patterns} -\usage{ -\S4method{twdtwCrossValidate}{twdtwTimeSeries}(object, times, p, ...) -} -\arguments{ -\item{object}{An object of class \code{\link[dtwSat]{twdtwTimeSeries}}.} - -\item{times}{Number of partitions to create.} - -\item{p}{The percentage of data that goes to training. -See \code{\link[caret]{createDataPartition}} for details.} - -\item{...}{Other arguments to be passed to \code{\link[dtwSat]{createPatterns}} and -to \code{\link[dtwSat]{twdtwApply}}.} -} -\description{ -Splits the set of time series into training and validation and -computes accuracy metrics. The function uses stratified sampling and a simple -random sampling for each stratum. For each data partition this function -performs a TWDTW analysis and returns the Overall Accuracy, User's Accuracy, -Produce's Accuracy, error matrix (confusion matrix), and a \code{\link[base]{data.frame}} -with the classification (Predicted), the reference classes (Reference), -and the results of the TWDTW analysis. -} -\examples{ -\dontrun{ -# Data folder -data_folder = system.file("lucc_MT/data", package = "dtwSat") - -# Read dates -dates = scan(paste(data_folder,"timeline", sep = "/"), what = "dates") - -# Read raster time series -evi = brick(paste(data_folder,"evi.tif", sep = "/")) -raster_timeseries = twdtwRaster(evi, timeline = dates) - -# Read field samples -field_samples = read.csv(paste(data_folder,"samples.csv", sep = "/")) -table(field_samples[["label"]]) - -# Read field samples projection -proj_str = scan(paste(data_folder,"samples_projection", sep = "/"), - what = "character") - -# Get sample time series from raster time series -field_samples_ts = getTimeSeries(raster_timeseries, - y = field_samples, proj4string = proj_str) -field_samples_ts - -# Run cross validation -set.seed(1) -# Define TWDTW weight function -log_fun = logisticWeight(alpha=-0.1, beta=50) -cross_validation = twdtwCrossValidate(field_samples_ts, times=3, p=0.1, - freq = 8, formula = y ~ s(x, bs="cc"), weight.fun = log_fun) -cross_validation - -summary(cross_validation) - -plot(cross_validation) - -twdtwXtable(cross_validation) - -twdtwXtable(cross_validation, show.overall=FALSE) - -} -} -\references{ -\insertRef{Maus:2019}{dtwSat} - - \insertRef{Maus:2016}{dtwSat} -} -\author{ -Victor Maus, \email{vwmaus1@gmail.com} -} diff --git a/man/twdtwCrossValidation-class.Rd b/man/twdtwCrossValidation-class.Rd deleted file mode 100644 index f78ec53..0000000 --- a/man/twdtwCrossValidation-class.Rd +++ /dev/null @@ -1,85 +0,0 @@ -% Generated by roxygen2: do not edit by hand -% Please edit documentation in R/class-crossValidation.R, R/methods.R -\name{twdtwCrossValidation-class} -\alias{twdtwCrossValidation-class} -\alias{twdtwCrossValidation} -\alias{show,twdtwCrossValidation-method} -\alias{summary,twdtwCrossValidation-method} -\title{class "twdtwCrossValidation"} -\usage{ -\S4method{show}{twdtwCrossValidation}(object) - -\S4method{summary}{twdtwCrossValidation}(object, conf.int = 0.95, ...) -} -\arguments{ -\item{object}{an object of class twdtwCrossValidation.} - -\item{conf.int}{specifies the confidence level (0-1) for interval estimation of the -population mean. For more details see \code{\link[ggplot2]{mean_cl_boot}}.} - -\item{...}{Other arguments. Not used.} -} -\description{ -This class stores the results of the cross-validation. -} -\section{Slots }{ - -\describe{ - \item{\code{partitions}:}{A list with the indices of time series used for training.} - \item{\code{accuracy}:}{A list with the accuracy and other TWDTW information for each - data partitions.} -} -} - -\examples{ -\dontrun{ -# Data folder -data_folder = system.file("lucc_MT/data", package = "dtwSat") - -# Read dates -dates = scan(paste(data_folder,"timeline", sep = "/"), what = "dates") - -# Read raster time series -evi = brick(paste(data_folder,"evi.tif", sep = "/")) -raster_timeseries = twdtwRaster(evi, timeline = dates) - -# Read field samples -field_samples = read.csv(paste(data_folder,"samples.csv", sep = "/")) -table(field_samples[["label"]]) - -# Read field samples projection -proj_str = scan(paste(data_folder,"samples_projection", sep = "/"), - what = "character") - -# Get sample time series from raster time series -field_samples_ts = getTimeSeries(raster_timeseries, - y = field_samples, proj4string = proj_str) -field_samples_ts - -# Run cross validation -set.seed(1) -# Define TWDTW weight function -log_fun = logisticWeight(alpha=-0.1, beta=50) -cross_validation = twdtwCrossValidate(field_samples_ts, times=3, p=0.1, - freq = 8, formula = y ~ s(x, bs="cc"), weight.fun = log_fun) -cross_validation - -summary(cross_validation) - -plot(cross_validation) - -} -} -\references{ -\insertRef{Maus:2019}{dtwSat} - - \insertRef{Maus:2016}{dtwSat} -} -\seealso{ -\code{\link[dtwSat]{twdtwMatches-class}}, -\code{\link[dtwSat]{createPatterns}}, and -\code{\link[dtwSat]{twdtwApply}}. -} -\author{ -Victor Maus, \email{vwmaus1@gmail.com} -} diff --git a/man/twdtwMatches-class.Rd b/man/twdtwMatches-class.Rd deleted file mode 100644 index 7ad7654..0000000 --- a/man/twdtwMatches-class.Rd +++ /dev/null @@ -1,131 +0,0 @@ -% Generated by roxygen2: do not edit by hand -% Please edit documentation in R/class-twdtwMatches.R, R/methods.R -\name{twdtwMatches-class} -\alias{twdtwMatches-class} -\alias{twdtwMatches} -\alias{twdtwMatches,ANY-method} -\alias{twdtwMatches-create} -\alias{index,twdtwMatches-method} -\alias{length,twdtwMatches-method} -\alias{as.list,twdtwMatches-method} -\alias{as.list,twdtwRaster-method} -\alias{[,twdtwMatches,ANY,ANY,ANY-method} -\alias{[[,twdtwMatches,numeric,ANY-method} -\alias{labels,twdtwMatches-method} -\alias{show,twdtwMatches-method} -\alias{is.twdtwMatches,ANY-method} -\alias{is.twdtwMatches} -\title{class "twdtwMatches"} -\usage{ -\S4method{twdtwMatches}{ANY}(timeseries = NULL, patterns = NULL, alignments = NULL) - -\S4method{index}{twdtwMatches}(x) - -\S4method{length}{twdtwMatches}(x) - -\S4method{as.list}{twdtwMatches}(x) - -\S4method{as.list}{twdtwRaster}(x) - -\S4method{[}{twdtwMatches,ANY,ANY,ANY}(x, i, j, drop = TRUE) - -\S4method{[[}{twdtwMatches,numeric,ANY}(x, i, j, drop = TRUE) - -\S4method{labels}{twdtwMatches}(object) - -\S4method{show}{twdtwMatches}(object) - -\S4method{is.twdtwMatches}{ANY}(x) -} -\arguments{ -\item{timeseries}{a \code{\link[dtwSat]{twdtwTimeSeries}} object.} - -\item{patterns}{a \code{\link[dtwSat]{twdtwTimeSeries}} object.} - -\item{alignments}{an object of class list with the TWDTW results with -the same length as \code{timeseries} or a list of twdtwMatches.} - -\item{x}{an object of class twdtwMatches.} - -\item{i}{indices of the time series.} - -\item{j}{indices of the pattern.} - -\item{drop}{if TRUE returns a data.frame, if FALSE returns a list. -Default is TRUE.} - -\item{object}{an object of class twdtwMatches.} - -\item{labels}{a vector with labels of the time series.} -} -\description{ -Class for Time-Weighted Dynamic Time Warping results. -} -\section{Methods (by generic)}{ -\itemize{ -\item \code{twdtwMatches(ANY)}: Create object of class twdtwMatches. - -\item \code{is.twdtwMatches(ANY)}: Check if the object belongs to the class twdtwMatches. - -}} -\section{Slots }{ - -\describe{ - \item{\code{timeseries}:}{An object of class \code{\link[dtwSat]{twdtwTimeSeries-class}} with the satellite time series.} - \item{\code{pattern}:}{An object of class \code{\link[dtwSat]{twdtwTimeSeries-class}} with the temporal patterns.} - \item{\code{alignments}:}{A \code{\link[base]{list}} of TWDTW results with the same length as - the \code{timeseries}. Each element in this list has the following results for each temporal pattern - in \code{patterns}: - \cr\code{from}: a vector with the starting dates of each match in the format "YYYY-MM-DD", - \cr\code{to}: a vector with the ending dates of each match in the format "YYYY-MM-DD", - \cr\code{distance}: a vector with TWDTW dissimilarity measure, and - \cr\code{K}: the number of matches of the pattern. - } - \item{This list might have additional elements:}{ if \code{keep=TRUE} in the \code{twdtwApply} call - the list is extended to include internal structures used during the TWDTW computation: - \cr\code{costMatrix}: cumulative cost matrix, - \cr\code{directionMatrix}: directions of steps that would be taken from each element of matrix, - \cr\code{startingMatrix}: the starting points of each element of the matrix, - \cr\code{stepPattern}: \code{\link[dtw]{stepPattern}} used for the - computation, see package \code{\link[dtw]{dtw}}, - \cr\code{N}: the length of the \code{pattern}, - \cr\code{M}: the length of the time series \code{timeseries}, - \cr\code{timeWeight}: time weight matrix, - \cr\code{localMatrix}: local cost matrix, - \cr\code{matching}: A list whose elements have the matching points for - each match between pattern the time series, such that: - \cr--\code{index1}: a vector with matching points of the pattern, and - \cr--\code{index2}: a vector with matching points of the time series. - } -} -} - -\examples{ -ts = twdtwTimeSeries(timeseries=MOD13Q1.ts.list) -patterns = twdtwTimeSeries(timeseries=MOD13Q1.patterns.list) -matches = twdtwApply(x = ts, y = patterns, keep=TRUE, legacy=TRUE) -class(matches) -length(matches) -matches -# Creating objects of class twdtwMatches -ts = twdtwTimeSeries(MOD13Q1.ts.list) -patt = twdtwTimeSeries(MOD13Q1.patterns.list) -mat = twdtwApply(ts, patt, weight.fun = logisticWeight(-0.1, 100), - keep=TRUE, legacy=TRUE) -mat = twdtwMatches(ts, patterns=patt, alignments=mat) -mat - -} -\references{ -\insertRef{Maus:2019}{dtwSat} - - \insertRef{Maus:2016}{dtwSat} -} -\seealso{ -\code{\link[dtwSat]{twdtwApply}}, -\code{\link[dtwSat]{twdtwTimeSeries-class}}, and -\code{\link[dtwSat]{twdtwRaster-class}} -} -\author{ -Victor Maus, \email{vwmaus1@gmail.com} -} diff --git a/man/twdtwRaster-class.Rd b/man/twdtwRaster-class.Rd deleted file mode 100644 index e1ab6a0..0000000 --- a/man/twdtwRaster-class.Rd +++ /dev/null @@ -1,203 +0,0 @@ -% Generated by roxygen2: do not edit by hand -% Please edit documentation in R/class-twdtwRaster.R, R/methods.R -\name{twdtwRaster-class} -\alias{twdtwRaster-class} -\alias{twdtwRaster} -\alias{twdtwRaster,ANY-method} -\alias{twdtwRaster-create} -\alias{dim,twdtwRaster-method} -\alias{res,twdtwRaster-method} -\alias{extent,twdtwRaster-method} -\alias{writeRaster,twdtwRaster,ANY-method} -\alias{ncol,twdtwRaster-method} -\alias{nrow,twdtwRaster-method} -\alias{nlayers,twdtwRaster-method} -\alias{levels,twdtwRaster-method} -\alias{layers,twdtwRaster-method} -\alias{layers} -\alias{coverages,twdtwRaster-method} -\alias{coverages} -\alias{bands,twdtwRaster-method} -\alias{bands} -\alias{names,twdtwRaster-method} -\alias{index,twdtwRaster-method} -\alias{length,twdtwRaster-method} -\alias{[,twdtwRaster,ANY,ANY,ANY-method} -\alias{[[,twdtwRaster,ANY,ANY-method} -\alias{labels,twdtwRaster-method} -\alias{crop,twdtwRaster-method} -\alias{coordinates,twdtwRaster-method} -\alias{show,twdtwRaster-method} -\alias{is.twdtwRaster,ANY-method} -\alias{is.twdtwRaster} -\alias{projecttwdtwRaster,twdtwRaster-method} -\alias{projecttwdtwRaster} -\title{class "twdtwRaster"} -\usage{ -\S4method{twdtwRaster}{ANY}( - ..., - timeline, - doy = NULL, - layers = NULL, - labels = NULL, - levels = NULL, - filepath = NULL -) - -\S4method{dim}{twdtwRaster}(x) - -\S4method{res}{twdtwRaster}(x) - -\S4method{extent}{twdtwRaster}(x, y, ...) - -\S4method{writeRaster}{twdtwRaster,ANY}(x, filepath = ".", ...) - -\S4method{ncol}{twdtwRaster}(x) - -\S4method{nrow}{twdtwRaster}(x) - -\S4method{nlayers}{twdtwRaster}(x) - -\S4method{levels}{twdtwRaster}(x) - -\S4method{layers}{twdtwRaster}(x) - -\S4method{coverages}{twdtwRaster}(x) - -\S4method{bands}{twdtwRaster}(x) - -\S4method{names}{twdtwRaster}(x) - -\S4method{index}{twdtwRaster}(x) - -\S4method{length}{twdtwRaster}(x) - -\S4method{[}{twdtwRaster,ANY,ANY,ANY}(x, i) - -\S4method{[[}{twdtwRaster,ANY,ANY}(x, i) - -\S4method{labels}{twdtwRaster}(object) - -\S4method{crop}{twdtwRaster}(x, y, ...) - -\S4method{coordinates}{twdtwRaster}(obj, ...) - -\S4method{extent}{twdtwRaster}(x, y, ...) - -\S4method{show}{twdtwRaster}(object) - -\S4method{is.twdtwRaster}{ANY}(x) - -\S4method{projecttwdtwRaster}{twdtwRaster}(x, crs, ...) -} -\arguments{ -\item{...}{objects of class \code{\link[raster]{RasterBrick-class}} or -\code{\link[raster]{RasterStack-class}}.} - -\item{timeline}{a vector with the dates of the satellite images -in the format of "YYYY-MM-DD".} - -\item{doy}{A \code{\link[raster]{RasterBrick-class}} or -\code{\link[raster]{RasterStack-class}} with a sequence of days of the year for each pixel. -\code{doy} must have the same spatial and temporal extents as the Raster* objects passed to \code{...}. -If \code{doy} is not provided then at least one Raster* object must be passed through \code{...}.} - -\item{layers}{a vector with the names of the \code{Raster*} objects -passed to "\code{...}". If not provided the layers are set to the -names of objects in "\code{...}".} - -\item{labels}{a vector of class \code{\link[base]{character}} with -labels of the values in the Raster* objects. This is -useful for categorical Raster* values of land use classes.} - -\item{levels}{a vector of class \code{\link[base]{numeric}} with -levels of the values in the Raster* objects. This is -useful for categorical Raster* values of land use classes.} - -\item{filepath}{A character. The path to save the raster time series. If provided the -function saves a raster file for each Raster* object in the list, \emph{i.e} one file -for each time series. This way the function retrieves a list of -\code{\link[raster]{RasterBrick-class}}. It is useful when the time series are -originally stored in separated files. See details.} - -\item{x}{an object of class twdtwRaster.} - -\item{y}{Extent object, or any object from which an Extent object can be extracted.} - -\item{i}{indices of the time series.} - -\item{object}{an object of class twdtwRaster.} - -\item{obj}{object of class twdtwRaster.} - -\item{crs}{character or object of class 'CRS'. PROJ.4 description of -the coordinate reference system. For other arguments and more details see -\code{\link[raster]{projectRaster}}.} -} -\description{ -Class for set of satellite time series. -} -\details{ -The performance of the functions \code{\link[dtwSat]{twdtwApply}} and -\code{\link[dtwSat]{getTimeSeries}} is improved if the Raster* objects are connected -to files with the whole time series for each attribute. -} -\section{Methods (by generic)}{ -\itemize{ -\item \code{twdtwRaster(ANY)}: Create object of class twdtwRaster. - -\item \code{is.twdtwRaster(ANY)}: Check if the object belongs to the class twdtwRaster. - -\item \code{projecttwdtwRaster(twdtwRaster)}: project twdtwRaster object. - -}} -\section{Slots }{ - -\describe{ - \item{\code{timeseries}:}{A list of multi-layer Raster* objects - with the satellite image time series.} - \item{\code{timeline}:}{A vector of class \code{\link[base]{date}} - with dates of the satellite images in \code{timeseries}.} - \item{\code{layers}:}{A vector of class \code{\link[base]{character}} - with the names of the Raster* objects.} - \item{\code{labels}:}{A vector of class \code{\link[base]{factor}} - with levels and labels of the values in the Raster* objects. This - is useful for categorical Raster* values of land use classes.} -} -} - -\examples{ -# Creating a new object of class twdtwTimeSeries -evi = brick(system.file("lucc_MT/data/evi.tif", package="dtwSat")) -timeline = scan(system.file("lucc_MT/data/timeline", package="dtwSat"), what="date") -rts = new("twdtwRaster", timeseries = evi, timeline = timeline) - -\dontrun{ -# Creating objects of class twdtwRaster -evi = brick(system.file("lucc_MT/data/evi.tif", package="dtwSat")) -timeline = scan(system.file("lucc_MT/data/timeline", package="dtwSat"), what="date") -ts_evi = twdtwRaster(evi, timeline=timeline) - -ndvi = brick(system.file("lucc_MT/data/ndvi.tif", package="dtwSat")) -blue = brick(system.file("lucc_MT/data/blue.tif", package="dtwSat")) -red = brick(system.file("lucc_MT/data/red.tif", package="dtwSat")) -nir = brick(system.file("lucc_MT/data/nir.tif", package="dtwSat")) -mir = brick(system.file("lucc_MT/data/mir.tif", package="dtwSat")) -doy = brick(system.file("lucc_MT/data/doy.tif", package="dtwSat")) -rts = twdtwRaster(doy, evi, ndvi, blue, red, nir, mir, timeline = timeline) -} -} -\references{ -\insertRef{Maus:2019}{dtwSat} - - \insertRef{Maus:2016}{dtwSat} -} -\seealso{ -\code{\link[dtwSat]{twdtwApply}}, -\code{\link[dtwSat]{getTimeSeries}}, -\code{\link[dtwSat]{twdtwMatches-class}}, and -\code{\link[dtwSat]{twdtwTimeSeries-class}} -} -\author{ -Victor Maus, \email{vwmaus1@gmail.com} -} diff --git a/man/twdtwReduceTime.Rd b/man/twdtwReduceTime.Rd deleted file mode 100644 index 2f9a466..0000000 --- a/man/twdtwReduceTime.Rd +++ /dev/null @@ -1,108 +0,0 @@ -% Generated by roxygen2: do not edit by hand -% Please edit documentation in R/twdtw_reduce_time.R -\name{twdtwReduceTime} -\alias{twdtwReduceTime} -\title{Faster version of TWDTW apply} -\usage{ -twdtwReduceTime( - x, - y, - alpha = -0.1, - beta = 50, - time.window = FALSE, - dist.method = "Euclidean", - step.matrix = symmetric1, - from = NULL, - to = NULL, - by = NULL, - breaks = NULL, - overlap = 0.5, - fill = length(y) + 1, - keep = FALSE, - ... -) -} -\arguments{ -\item{x}{a data.frame with the target time series. Usually, it is an -unclassified time series. It must contain two or more columns, one column -called \code{date} with dates in the format "YYYY-MM-DD". The other columns -can have any names (e.g., red, blue, nir, evi, ndvi) as long as they match -the column names in the temporal patterns \code{y}.} - -\item{y}{a list of data.frame objects similar to \code{x}. -The temporal patterns used to classify the time series in \code{x}.} - -\item{alpha}{Numeric. The steepness of TWDTW logistic weight.} - -\item{beta}{Numeric. The midpoint of TWDTW logistic weight.} - -\item{time.window}{logical. TRUE will constrain the TWDTW computation to the -value of the parameter \code{beta} defined in the logistic weight function. -Default is FALSE.} - -\item{dist.method}{A character. Method to derive the local cost matrix. -Default is ''Euclidean'' see \code{\link[proxy]{dist}} in package -\pkg{proxy}.} - -\item{step.matrix}{See \code{\link[dtw]{stepPattern}} in package \pkg{dtw} -\insertCite{Giorgino:2009}{dtwSat}.} - -\item{from}{A character or \code{\link[base]{Dates}} object in the format "yyyy-mm-dd".} - -\item{to}{A \code{\link[base]{character}} or \code{\link[base]{Dates}} object in the format "yyyy-mm-dd".} - -\item{by}{A \code{\link[base]{character}} with the interval size, \emph{e.g.} "6 month".} - -\item{breaks}{A vector of class \code{\link[base]{Dates}}. This replaces the arguments \code{from}, -\code{to}, and \code{by}.} - -\item{overlap}{A number between 0 and 1. The minimum overlapping -between one match and the interval of classification. Default is 0.5, -\emph{i.e.} an overlap minimum of 50\%.} - -\item{fill}{An integer to fill the classification gaps.} - -\item{keep}{Preserves the cost matrix, inputs, and other internal structures. -Default is FALSE. For plot methods use \code{keep=TRUE}.} - -\item{...}{Arguments to pass to \code{\link[raster]{writeRaster}} and -\code{\link[raster]{pbCreate}}} -} -\description{ -This function is a faster implementation of -\link[dtwSat]{twdtwApply} that is in average 4x faster. The time weight function -is coded in Fortran. It does not keep any intermediate data. -It performs a multidimensional TWDTW analysis -\insertCite{Maus:2019}{dtwSat} and retrieves only the best matches between -the unclassified time series and the patterns for each defined time interval. -} -\examples{ -\dontrun{ - -library(dtwSat) -from = "2009-09-01" -to = "2017-09-01" -by = "12 month" - -# S4 objects for original implementation -tw_patt = readRDS(system.file("lucc_MT/patterns/patt.rds", package = "dtwSat")) -tw_ts = twdtwTimeSeries(MOD13Q1.ts) - -# Table from csv for faster version -mn_patt <- lapply(dir(system.file("lucc_MT/patterns", package = "dtwSat"), - pattern = ".csv$", full.names = TRUE), read.csv, stringsAsFactors = FALSE) -mn_ts <- read.csv(system.file("reduce_time/ts_MODIS13Q1.csv", package = "dtwSat"), - stringsAsFactors = FALSE) - -# Benchtmark -rbenchmark::benchmark( - legacy_twdtw = twdtwClassify(twdtwApply(x = tw_ts, y = tw_patt, weight.fun = log_fun), - from = from, to = to, by = by)[[1]], - fast_twdtw = twdtwReduceTime(x = mn_ts, y = mn_patt, rom = from, to = to, by = by) - ) -} - -} -\author{ -Victor Maus, \email{vwmaus1@gmail.com} -} diff --git a/man/twdtwTimeSeries-class.Rd b/man/twdtwTimeSeries-class.Rd deleted file mode 100644 index 2ce2304..0000000 --- a/man/twdtwTimeSeries-class.Rd +++ /dev/null @@ -1,127 +0,0 @@ -% Generated by roxygen2: do not edit by hand -% Please edit documentation in R/class-twdtwTimeSeries.R, R/methods.R -\name{twdtwTimeSeries-class} -\alias{twdtwTimeSeries-class} -\alias{twdtwTimeSeries} -\alias{twdtwTimeSeries,ANY-method} -\alias{twdtwTimeSeries-create} -\alias{dim,twdtwTimeSeries-method} -\alias{index,twdtwTimeSeries-method} -\alias{nrow,twdtwTimeSeries-method} -\alias{ncol,twdtwTimeSeries-method} -\alias{length,twdtwTimeSeries-method} -\alias{as.list,twdtwTimeSeries-method} -\alias{as.data.frame,twdtwTimeSeries-method} -\alias{[,twdtwTimeSeries,ANY,ANY,ANY-method} -\alias{[[,twdtwTimeSeries,ANY,ANY-method} -\alias{labels,twdtwTimeSeries-method} -\alias{levels,twdtwTimeSeries-method} -\alias{show,twdtwTimeSeries-method} -\alias{as.twdtwTimeSeries,ANY-method} -\alias{as.twdtwTimeSeries} -\alias{is.twdtwTimeSeries,ANY-method} -\alias{is.twdtwTimeSeries} -\title{class "twdtwTimeSeries"} -\usage{ -\S4method{twdtwTimeSeries}{ANY}(..., labels = NULL) - -\S4method{dim}{twdtwTimeSeries}(x) - -\S4method{index}{twdtwTimeSeries}(x) - -\S4method{nrow}{twdtwTimeSeries}(x) - -\S4method{ncol}{twdtwTimeSeries}(x) - -\S4method{length}{twdtwTimeSeries}(x) - -\S4method{as.list}{twdtwTimeSeries}(x) - -\S4method{as.data.frame}{twdtwTimeSeries}(x) - -\S4method{[}{twdtwTimeSeries,ANY,ANY,ANY}(x, i) - -\S4method{[[}{twdtwTimeSeries,ANY,ANY}(x, i) - -\S4method{labels}{twdtwTimeSeries}(object) - -\S4method{levels}{twdtwTimeSeries}(x) - -\S4method{show}{twdtwTimeSeries}(object) - -\S4method{as.twdtwTimeSeries}{ANY}(x) - -\S4method{is.twdtwTimeSeries}{ANY}(x) -} -\arguments{ -\item{...}{\code{\link[dtwSat]{twdtwTimeSeries}} objects, -\code{\link[zoo]{zoo}} objects or a list of \code{\link[zoo]{zoo}} objects.} - -\item{labels}{a vector with labels of the time series.} - -\item{x}{an object of class twdtwTimeSeries.} - -\item{i}{indices of the time series.} - -\item{object}{an object of class twdtwTimeSeries.} -} -\description{ -Class for setting irregular time series. -} -\section{Methods (by generic)}{ -\itemize{ -\item \code{twdtwTimeSeries(ANY)}: Create object of class twdtwTimeSeries. - -\item \code{as.twdtwTimeSeries(ANY)}: convert list of data.frame to class twdtwTimeSeries. - -\item \code{is.twdtwTimeSeries(ANY)}: Check if the object belongs to the class twdtwTimeSeries. - -}} -\section{Slots }{ - -\describe{ - \item{\code{timeseries}:}{A list of \code{\link[zoo]{zoo}} objects.} - \item{\code{labels}:}{A vector of class \code{\link[base]{factor}} with time series labels.} -} -} - -\examples{ -# Creating a new object of class twdtwTimeSeries -ptt = new("twdtwTimeSeries", timeseries = MOD13Q1.patterns.list, - labels = names(MOD13Q1.patterns.list)) -class(ptt) -labels(ptt) -levels(ptt) -length(ptt) -nrow(ptt) -ncol(ptt) -dim(ptt) -# Creating objects of class twdtwTimeSeries from zoo objects -ts = twdtwTimeSeries(MOD13Q1.ts) -ts - -# Creating objects of class twdtwTimeSeries from list of zoo objects -patt = twdtwTimeSeries(MOD13Q1.patterns.list) -patt - -# Joining objects of class twdtwTimeSeries -tsA = twdtwTimeSeries(MOD13Q1.ts.list[[1]], labels = "A") -tsB = twdtwTimeSeries(B = MOD13Q1.ts.list[[2]]) -ts = twdtwTimeSeries(tsA, tsB, C=MOD13Q1.ts) -ts - -} -\references{ -\insertRef{Maus:2019}{dtwSat} - - \insertRef{Maus:2016}{dtwSat} -} -\seealso{ -\code{\link[dtwSat]{twdtwMatches-class}}, -\code{\link[dtwSat]{twdtwRaster-class}}, -\code{\link[dtwSat]{getTimeSeries}}, and -\code{\link[dtwSat]{twdtwApply}} -} -\author{ -Victor Maus, \email{vwmaus1@gmail.com} -} diff --git a/man/twdtwXtable.Rd b/man/twdtwXtable.Rd deleted file mode 100644 index 94b3c82..0000000 --- a/man/twdtwXtable.Rd +++ /dev/null @@ -1,139 +0,0 @@ -% Generated by roxygen2: do not edit by hand -% Please edit documentation in R/twdtwXtable.R -\name{twdtwXtable} -\alias{twdtwXtable} -\alias{twdtwXtable,twdtwAssessment-method} -\alias{twdtwXtable-twdtwAssessment} -\alias{twdtwXtable,twdtwCrossValidation-method} -\alias{twdtwXtable-twdtwCrossValidation} -\title{LaTeX table from accuracy metrics} -\usage{ -\S4method{twdtwXtable}{twdtwAssessment}( - object, - table.type = "accuracy", - show.prop = TRUE, - category.name = NULL, - category.type = NULL, - rotate.col = FALSE, - time.labels = NULL, - caption = NULL, - digits = 2, - show.footnote = TRUE, - ... -) - -\S4method{twdtwXtable}{twdtwCrossValidation}( - object, - conf.int = 0.95, - show.overall = TRUE, - category.name = NULL, - category.type = NULL, - caption = NULL, - digits = 2, - show.footnote = TRUE, - ... -) -} -\arguments{ -\item{object}{an object of class twdtwAssessment.} - -\item{table.type}{Table type, 'accuracy' for User's and Producer's Accuracy, -'errormatrix' for error matrix, and 'area' for area and uncertainty. -Default is 'accuracy'.} - -\item{show.prop}{If TRUE shows the estimated proportion of area. -Used with \code{table.type='accuracy'}. Default is TRUE.} - -\item{category.name}{A character vector defining the class names. If NULL -the class names in the object \code{x} are used. Default is NULL.} - -\item{category.type}{A character defining the categories type "numeric" -or "letter", if NULL the class names are used. Default is NULL.} - -\item{rotate.col}{Rotate class column names in latex table. Default is FALSE.} - -\item{time.labels}{A character or numeric for the time period or NULL to -include all classified periods. Default is NULL.} - -\item{caption}{The table caption.} - -\item{digits}{Number of digits to show.} - -\item{show.footnote}{Show confidence interval in the footnote.} - -\item{...}{Other arguments to pass to \code{\link[xtable]{print.xtable}}.} - -\item{conf.int}{Specifies the confidence level (0-1).} - -\item{show.overall}{If TRUE shows the overall accuracy of the cross-validation. -Default is TRUE.} -} -\description{ -Creates LaTeX table from accuracy metrics -} -\examples{ -\dontrun{ - -# Create raster time series -evi = brick(system.file("lucc_MT/data/evi.tif", package="dtwSat")) -ndvi = brick(system.file("lucc_MT/data/ndvi.tif", package="dtwSat")) -red = brick(system.file("lucc_MT/data/red.tif", package="dtwSat")) -blue = brick(system.file("lucc_MT/data/blue.tif", package="dtwSat")) -nir = brick(system.file("lucc_MT/data/nir.tif", package="dtwSat")) -mir = brick(system.file("lucc_MT/data/mir.tif", package="dtwSat")) -doy = brick(system.file("lucc_MT/data/doy.tif", package="dtwSat")) -timeline = scan(system.file("lucc_MT/data/timeline", package="dtwSat"), what="date") -rts = twdtwRaster(evi, ndvi, red, blue, nir, mir, timeline = timeline, doy = doy) - -# Read field samples -field_samples = read.csv(system.file("lucc_MT/data/samples.csv", package="dtwSat")) -proj_str = scan(system.file("lucc_MT/data/samples_projection", - package="dtwSat"), what = "character") - -# Split samples for training (10\%) and validation (90\%) using stratified sampling -library(caret) -set.seed(1) -I = unlist(createDataPartition(field_samples$label, p = 0.1)) -training_samples = field_samples[I,] -validation_samples = field_samples[-I,] - -# Create temporal patterns -training_ts = getTimeSeries(rts, y = training_samples, proj4string = proj_str) -temporal_patterns = createPatterns(training_ts, freq = 8, formula = y ~ s(x)) - -# Run TWDTW analysis for raster time series -log_fun = weight.fun=logisticWeight(-0.1,50) -r_twdtw = twdtwApply(x=rts, y=temporal_patterns, weight.fun=log_fun, format="GTiff", - overwrite=TRUE) - -# Classify raster based on the TWDTW analysis -r_lucc = twdtwClassify(r_twdtw, format="GTiff", overwrite=TRUE) -plot(r_lucc) - -# Assess classification -twdtw_assess = twdtwAssess(object = r_lucc, y = validation_samples, - proj4string = proj_str, conf.int=.95) -twdtw_assess - -# Create latex tables -twdtwXtable(twdtw_assess, table.type="errormatrix", rotate.col=TRUE, - caption="Error matrix", digits=2, comment=FALSE) -twdtwXtable(twdtw_assess, table.type="accuracy", category.type="letter", - caption="Accuracy metrics.") -twdtwXtable(twdtw_assess, table.type="area", category.type="letter", - digits = 0, caption="Area and uncertainty") - -} -} -\references{ -\insertRef{Maus:2019}{dtwSat} - - \insertRef{Maus:2016}{dtwSat} -} -\seealso{ -\code{\link[dtwSat]{twdtwAssess}} and -\code{\link[dtwSat]{twdtwAssessment}}. -} -\author{ -Victor Maus, \email{vwmaus1@gmail.com} -} diff --git a/src/bestmatches.f b/src/bestmatches.f deleted file mode 100644 index 82642d1..0000000 --- a/src/bestmatches.f +++ /dev/null @@ -1,80 +0,0 @@ -CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC -C C -C (c) Victor Maus C -C Institute for Geoinformatics (IFGI) C -C University of Muenster (WWU), Germany C -C C -C Earth System Science Center (CCST) C -C National Institute for Space Research (INPE), Brazil C -C C -C C -C Find best matches TWDTW - 2016-03-26 C -C C -CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC -C -C XM - Two columns matrix with 'from' and 'to' dates as integers -C AM - Matrix (P-1 x L) with classification intervals (P-1) and possible classes (L) -C DM - Vector length K DTW distance for each alignment -C DP - Vector length P-1 with classification intervals -C X - Vector length K with alignments index -C IM - Matrix to return best matches, intervals, and class labels -C A - Vector with alignment index -C K - Number of alignments -C P - Number of dates defineing classification intervals -C L - Number of classes -C OV - Minimum temporal overlap - SUBROUTINE bestmatches(XM,AM,DM,DP,X,IM,DB,A,K,P,L,OV) -C I/O Variables - INTEGER K, P, L, XM(K,2), X(K), DP(P), IM(P-1,4), A(K) - DOUBLE PRECISION AM(P-1,L), DD, DM(K), OV, DB(P-1) -C Internals - DOUBLE PRECISION R - INTEGER I, J, IL, B1, B2, D1, D2 -C For all time intervals - DO 30 J = 1, P-1 - B1 = DP(J) - B2 = DP(J+1) - DD = AM(J,1) - -C For all TWDTW matches - DO 20 I = 1, K -C print *, "I: ", I - D1 = XM(I,1) - D2 = XM(I,2) - IL = X(I) - IF ((D2.LT.B1).OR.(D1.GT.B2)) THEN -C print *, "D1: ", D1, "D2: ", D2 - GOTO 20 - ENDIF - IF (D1.LT.B1) THEN - D1 = B1 - ENDIF - IF (B2.LT.D2) THEN - D2 = B2 - ENDIF - R = REAL(D2 - D1) / REAL(B2 - B1) - IF( .NOT.(OV.LE.R.AND.R.LE.(2-OV)) ) THEN -C print *, "R: ", R - GOTO 20 - ENDIF - IF( DM(I).GE.AM(J,IL) ) THEN -C print *, "DM(I): ", DM(I) - GOTO 20 - ENDIF - AM(J,IL) = DM(I) - IF( DM(I).LT.DD ) THEN - DD = DM(I) - IM(J,1) = IL - IM(J,2) = I - IM(J,3) = A(I) -C print *, "IM: ", IM - DB(J) = DD - ENDIF - 20 CONTINUE - 30 CONTINUE - END - - - - - diff --git a/src/computecost.f b/src/computecost.f deleted file mode 100644 index 962fd89..0000000 --- a/src/computecost.f +++ /dev/null @@ -1,89 +0,0 @@ -CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC -C C -C (c) Victor Maus C -C Institute for Geoinformatics (IFGI) C -C University of Muenster (WWU), Germany C -C C -C Earth System Science Center (CCST) C -C National Institute for Space Research (INPE), Brazil C -C C -C C -C Efficient computation of DTW cost matrix - 2015-10-16 C -C C -C This function was adpted from the C function 'computeCM' C -C implemented in the R package 'dtw' by Toni Giorgino. C -CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC -C -C CM - Input local cost and output cumulative cost matrix -C DM - Direction matrix -C VM - Starting points matrix -C SM - Matrix of step patterns -C N - Number of rows in CM, DM, and VM -C M - Number of columns CM, DM, and VM -C NS - Number of rows in SM - SUBROUTINE computecost(CM, DM, VM, SM, N, M, NS) -C 800 FORMAT(I4,I4,I4,I4,F8.0,F8.0) -C I/O Variables - INTEGER N, M, NS, SM(NS,4), DM(N,M), VM(N,M) - DOUBLE PRECISION CM(N,M) -C Internals - DOUBLE PRECISION W, CP(NS), VMIN - INTEGER I, J, IL(NS), JL(NS), K, PK, KMIN, ZERO, ONE - PARAMETER(ZERO=0,ONE=1) - REAL NAN, INF - NAN = ZERO - NAN = NAN / NAN - INF = HUGE(ZERO) - VM(1,1) = 1 -C Initialize the firt row and col of the matrices - DO 21 I = 2, N - CM(I,1) = CM(I-1,1) + CM(I,1) - DM(I,1) = 3 - VM(I,1) = 1 - 21 CONTINUE - DO 31 J = 2, M - CM(1,J) = CM(1,J-1) + CM(1,J) - DM(1,J) = 2 - VM(1,J) = J - 31 CONTINUE -C Compute cumulative cost matrix - DO 32 J = 2, M - DO 22 I = 2, N -C Initialize list of step cost - DO 10 K = 1, NS - CP(K) = NAN - 10 CONTINUE - DO 11 K = 1, NS - PK = SM(K,1) - IL(K) = I - SM(K,2) - JL(K) = J - SM(K,3) - IF ((IL(K).GT.ZERO).AND.(JL(K).GT.ZERO)) THEN - W = SM(K,4) - IF (W.EQ.-ONE) THEN - CP(PK) = CM(IL(K),JL(K)) - ELSE - CP(PK) = CP(PK) + CM(IL(K),JL(K))*W - ENDIF - ENDIF - 11 CONTINUE - KMIN = -ONE - VMIN = INF - ILMIN = -ONE - JLMIN = -ONE - DO 12 K = 1, NS - PK = SM(K,1) - IF (CP(PK).EQ.CP(PK).AND.CP(PK).LT.VMIN) THEN - KMIN = PK - VMIN = CP(PK) - ILMIN = IL(K) - JLMIN = JL(K) - ENDIF - 12 CONTINUE - IF (KMIN.GT.-ONE) THEN - CM(I,J) = VMIN - DM(I,J) = KMIN - VM(I,J) = VM(ILMIN, JLMIN) - ENDIF - 22 CONTINUE - 32 CONTINUE - END diff --git a/src/ellapsed.f b/src/ellapsed.f deleted file mode 100644 index a854ad0..0000000 --- a/src/ellapsed.f +++ /dev/null @@ -1,17 +0,0 @@ -C Computation ellapsed time in days -C -C TD - time difference in days - SUBROUTINE ellapsed(TD) - DOUBLE PRECISION TD, HPC - PARAMETER(PC=366.0) - HPC = PC/2 -C Compute ellapsed time difference - TD = SQRT(TD * TD) -C Correct ellapsed time with year cycle - IF (TD.GT.HPC) THEN - TD = PC - TD - ENDIF - TD = ABS(TD) - RETURN - END - diff --git a/src/g.f b/src/g.f deleted file mode 100644 index 8406ffc..0000000 --- a/src/g.f +++ /dev/null @@ -1,37 +0,0 @@ -CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC -C C -C (c) Victor Maus C -C Institute for Geoinformatics (IFGI) C -C University of Muenster (WWU), Germany C -C C -C Earth System Science Center (CCST) C -C National Institute for Space Research (INPE), Brazil C -C C -C C -C Computation allapsed time - 2016-01-22 C -C C -CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC -C -C TM - Time difference matrix -C N - Number of rows in CM -C M - Number of columns CM -C PC - Cycle length in the unity of the measurements - SUBROUTINE g(TM, N, M, PC) -C I/O Variables - INTEGER N, M - DOUBLE PRECISION TM(N,M), PC -C Internals - DOUBLE PRECISION HPC - INTEGER I, J - PARAMETER(TWO=2.0) - HPC = PC/2 -C Compute ellapsed time matrix - DO 30 J = 1, M - DO 20 I = 1, N - IF (TM(I,J).GT.HPC) THEN - TM(I,J) = ABS(PC - TM(I,J)) - ENDIF - 20 CONTINUE - 30 CONTINUE - END - \ No newline at end of file diff --git a/src/init.c b/src/init.c deleted file mode 100644 index de747f3..0000000 --- a/src/init.c +++ /dev/null @@ -1,33 +0,0 @@ -#include -#include // for NULL -#include - - -/* FIXME: - Check these declarations against the C/Fortran source code. - */ - -/* .Fortran calls */ -extern void F77_NAME(bestmatches)(void *, void *, void *, void *, void *, void *, void *, void *, void *, void *, void *, void *); -extern void F77_NAME(computecost)(void *, void *, void *, void *, void *, void *, void *); -extern void F77_NAME(twdtw)(void *, void *, void *, void *, void *, void *, void *, void *, void *, void *, void *, void *, void *); -extern void F77_NAME(g)(void *, void *, void *, void *); -extern void F77_NAME(tracepath)(void *, void *, void *, void *, void *, void *, void *, void *, void *, void *, void *); - -static const R_FortranMethodDef FortranEntries[] = { - {"bestmatches", (DL_FUNC) &F77_NAME(bestmatches), 12}, - {"computecost", (DL_FUNC) &F77_NAME(computecost), 7}, - {"twdtw", (DL_FUNC) &F77_NAME(twdtw), 13}, - {"g", (DL_FUNC) &F77_NAME(g), 4}, - {"tracepath", (DL_FUNC) &F77_NAME(tracepath), 11}, - {NULL, NULL, 0} -}; - -void R_init_dtwSat(DllInfo *dll) -{ - R_registerRoutines(dll, NULL, NULL, FortranEntries, NULL); - R_useDynamicSymbols(dll, FALSE); - R_forceSymbols(dll, FALSE); -} - - diff --git a/src/logtwdtw.f b/src/logtwdtw.f deleted file mode 100644 index a8d0480..0000000 --- a/src/logtwdtw.f +++ /dev/null @@ -1,31 +0,0 @@ -C Compute TWDTW distance using logistic weight -C -C XM - matrix with the time series (N,D) -C YM - matrix with the temporal profile (M,D) -C N - Number of rows in CM, DM, and VM - time series -C M - Number of columns CM, DM, and VM - temporal profile -C D - Number of spectral dimensions including time in XM and YM -C I - Single point in the time series to calculate the local distance -C J - Single point in the temporal profile to calculate the local distance -C A - Time-Weight parameter alpha -C B - Time-Weight parameter beta - REAL FUNCTION distance(YM, XM, N, M, D, I, J, TW, TD) - INTEGER N, M, D, I, J, K - DOUBLE PRECISION XM(M,D), YM(N,D), TD, BD, CD, TW(2) - PARAMETER(ZERO=0) - REAL NAN - NAN = ZERO - NAN = NAN / NAN - distance = NAN -C TD = YM(I,1) - XM(J,1) -C CALL ellapsed(TD) - CD = ZERO - DO 30 K = 2, D - BD = YM(I,K) - XM(J,K) - CD = CD + (BD * BD) - 30 CONTINUE -C WRITE (*,*) 'The value of X J', J, 'is', XM(J,D) - distance = SQRT(CD) + 1.0 / (1.0 + EXP(TW(1) * (TD - TW(2)))) - RETURN - END - diff --git a/src/tracepath.f b/src/tracepath.f deleted file mode 100644 index 6431f0b..0000000 --- a/src/tracepath.f +++ /dev/null @@ -1,77 +0,0 @@ -CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC -C C -C (c) Victor Maus C -C Institute for Geoinformatics (IFGI) C -C University of Muenster (WWU), Germany C -C C -C Earth System Science Center (CCST) C -C National Institute for Space Research (INPE), Brazil C -C C -C C -C Efficient computation of DTW trace back - 2015-10-17 C -C C -CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC -C -C DM - Direction matrix -C SM - Matrix of step patterns -C JMIN - Positions o the minimum points -C IND1 - Alignment indices in the pattern -C IND2 - Alignment indices in the template -C POS - Starting points in IND1 and IND2 -C N - Number of rows in DM -C M - Number of columns DM -C NS - Number of rows in SM -C NJ - Number of minimum points -C AL - Length of IND1 and IND2 - SUBROUTINE tracepath(DM,SM,JMIN,IND1,IND2,POS,N,M,NS,NJ,AL) -C 800 FORMAT(I4,I4,I4,I4,I4,I4,I4,I4) -C I/O Variables - INTEGER N, M, NS, NJ, AL - INTEGER IND1(AL),IND2(AL),POS(NJ+1),SM(NS,4),DM(N,M),JMIN(NJ) -C Internals - INTEGER K, PK, I, J, P, PI, PJ, S, IS(NS), STEPS(NS,4*NS) - INTEGER ZERO, ONE - PARAMETER(ZERO=0,ONE=1) -C Initialize steps - DO 10 PK = 1, SM(NS,1) - STEPS(PK,1) = ZERO - IS(PK) = 2 - 10 CONTINUE -C Get steps direction - DO 11 K = 1, NS - PK = SM(K,1) - PI = SM(K,2) - PJ = SM(K,3) - IF (PI.EQ.ZERO.AND.PJ.EQ.ZERO) THEN - GO TO 11 - ENDIF - STEPS(PK,1) = STEPS(PK,1) + ONE - STEPS(PK,IS(PK)) = PI - STEPS(PK,IS(PK)+1) = PJ - IS(PK) = IS(PK) + 2 - 11 CONTINUE -C Trace back - P = ONE - POS(1) = ZERO - DO 30 JM = 1, NJ - I = N - J = JMIN(JM) - S = DM(I,J) - 20 IF (I.NE.ONE.AND.P.LT.AL) THEN - IND1(P) = I - IND2(P) = J - NS = STEPS(S,1) - DO 12 K = 1, NS - P = P + 1 - IND1(P) = I - STEPS(S,2*K) - IND2(P) = J - STEPS(S,2*K+1) - I = IND1(P) - J = IND2(P) - 12 CONTINUE - S = DM(I,J) - GO TO 20 - ENDIF - POS(JM+1) = P - P = P + 1 - 30 CONTINUE - END diff --git a/src/twdtw.f b/src/twdtw.f deleted file mode 100644 index df96fe8..0000000 --- a/src/twdtw.f +++ /dev/null @@ -1,157 +0,0 @@ -C Computation of TWDTW cost matrix -C -C XM - matrix with the time series (N,D) -C YM - matrix with the temporal profile (M,D) -C CM - Output cumulative cost matrix -C DM - Direction matrix -C VM - Starting points matrix -C SM - Matrix of step patterns -C N - Number of rows in CM, DM, and VM - time series -C M - Number of columns CM, DM, and VM - temporal profile -C D - Number of spectral dimensions including time in XM and YM -C NS - Number of rows in SM -C TW - Time-Weight parameters alpha and beta -C LB - Constrain TWDTW calculation to band given by TW(2) - SUBROUTINE twdtw(XM, YM, CM, DM, VM, SM, N, M, D, NS, TW, LB, JB) -C I/O Variables - INTEGER N, M, D, NS, SM(NS,4), DM(N+1,M), VM(N+1,M), JB(N) - DOUBLE PRECISION XM(M,D), YM(N,D), CM(N+1,M), TW(2) - LOGICAL LB -C Internals - DOUBLE PRECISION W, CP(NS), VMIN, A, B, TD - INTEGER I, J, IL(NS), JL(NS), K, PK, KMIN, ZERO, ONE, JM - PARAMETER(ZERO=0,ONE=1) - DOUBLE PRECISION NAN, INF - NAN = 0.0 - NAN = NAN / NAN - INF = HUGE(0.0) - IML = 1 - VM(1,1) = 1 - -C Initialize the firt row and col of the matrices - DO 21 I = 2, N+1 - TD = YM(I-1,1) - XM(1,1) - CALL ellapsed(TD) -C IF (TD.GT.TW(2)) THEN -C CM(I,1) = INF -C ELSE - CM(I,1) = CM(I-1,1) + - & distance(YM, XM, N, M, D, I-1, 1, TW, TD) -C ENDIF -C WRITE (*,*) 'The distance ',I,',1 is ', CM(I,1) - DM(I,1) = 3 - VM(I,1) = 1 - 21 CONTINUE - DO 31 J = 2, M - TD = YM(2,1) - XM(J,1) - CALL ellapsed(TD) -C IF (TD.GT.TW(2)) THEN -C CM(2,J) = INF -C ELSE - CM(2,J) = CM(2,J-1) + - & distance(YM, XM, N, M, D, 1, J, TW, TD) -C ENDIF -C WRITE (*,*) 'The distance 2,',J,' is ', CM(2,J) - DM(1,J) = 2 - VM(1,J) = J - 31 CONTINUE -C Compute cumulative cost matrix - J = 2 - DO 32 WHILE ( J .LE. M ) - I = 2 - DO 22 WHILE ( I .LE. N+1 ) -C PRINT *, "J: ", J, "I: ", I -C Calculate local distance -C # the call takes I-1 because local matrix has an additional row at the begning - TD = YM(I-1,1) - XM(J,1) - CALL ellapsed(TD) - IF (LB.AND.(TD.GT.TW(2))) THEN -C print *, "I: ", I, "TD: ", TD, " -- TW: ", TW(2) - CM(I,J) = INF - DM(I,J) = -ONE - VM(I,J) = ZERO - GOTO 44 - ELSE - CM(I,J) = distance(YM, XM, N, M, D, I-1, J, TW, TD) - ENDIF -C Initialize list of step cost - DO 10 K = 1, NS - CP(K) = NAN - 10 CONTINUE - DO 11 K = 1, NS - PK = SM(K,1) - IL(K) = I - SM(K,2) - JL(K) = J - SM(K,3) - IF ((IL(K).GT.ZERO).AND.(JL(K).GT.ZERO)) THEN - W = SM(K,4) - IF (W.EQ.-ONE) THEN - CP(PK) = CM(IL(K),JL(K)) - ELSE - CP(PK) = CP(PK) + CM(IL(K),JL(K))*W - ENDIF - ENDIF - 11 CONTINUE - KMIN = -ONE - VMIN = INF - ILMIN = -ONE - JLMIN = -ONE - DO 12 K = 1, NS - PK = SM(K,1) - IF (CP(PK).EQ.CP(PK).AND.CP(PK).LT.VMIN) THEN - KMIN = PK - VMIN = CP(PK) - ILMIN = IL(K) - JLMIN = JL(K) - ENDIF - 12 CONTINUE - IF (KMIN.GT.-ONE) THEN - CM(I,J) = VMIN - DM(I,J) = KMIN - VM(I,J) = VM(ILMIN, JLMIN) - ENDIF - 44 CONTINUE - I = I + 1 - 22 CONTINUE - J = J + 1 - 32 CONTINUE - 99 CONTINUE - J = 1 - K = ZERO -C PRINT *, "DONE: LOOP 1" - DO 69 WHILE ( J .LE. M ) - IF (VM(N+1,J).NE.ZERO) THEN - IF (K.EQ.ZERO) THEN - K = 1 - JB(K) = J - JM = VM(N+1,J) - GOTO 68 - ENDIF - IF (VM(N+1,J).NE.JM) THEN - K = K + 1 - JB(K) = J - JM = VM(N+1,J) - GOTO 68 - ENDIF -C PRINT *, J, "JB:",JB(k),"-", CM(N+1,J),"-",CM(N+1,JB(K)) - IF (CM(N+1,J).LT.CM(N+1,JB(K))) THEN - JB(K) = J - GOTO 68 - ENDIF - ENDIF - 68 CONTINUE - J = J + 1 - 69 CONTINUE -C PRINT *, "XM", XM -C PRINT *, "YM", YM -C PRINT *, "CM", CM -C PRINT *, "DM", DM -C PRINT *, "VM", VM -C PRINT *, "SM", SM -C PRINT *, "N", N -C PRINT *, "M", M -C PRINT *, "D", D -C PRINT *, "NS", NS -C PRINT *, "TW", TW -C PRINT *, "LB", LB -C PRINT *, "JB", JB - END diff --git a/tic.R b/tic.R deleted file mode 100644 index ec2f06f..0000000 --- a/tic.R +++ /dev/null @@ -1 +0,0 @@ -add_package_checks() diff --git a/vignettes/twdtw01.Rmd b/vignettes/twdtw01.Rmd deleted file mode 100644 index 23af762..0000000 --- a/vignettes/twdtw01.Rmd +++ /dev/null @@ -1,109 +0,0 @@ ---- -title: "1. TWDTW: Time-Weighted Dynamic Time Warping" -author: "Victor Maus" -output: rmarkdown::html_vignette -vignette: > - %\VignetteIndexEntry{1. TWDTW: Time-Weighted Dynamic Time Warping} - %\VignetteEncoding{UTF-8} - %\VignetteEngine{knitr::rmarkdown} -bibliography: ./../inst/REFERENCES.bib ---- - -```{r, echo=FALSE, include=FALSE} -knitr::opts_chunk$set(collapse = TRUE) -knitr::opts_chunk$set(fig.height = 4.5) -knitr::opts_chunk$set(fig.width = 6) -``` - -This vignette present a short introduction on Time-Weighted Dynamic Time Warping (TWDTW) analysis using `dtwSat`. TWDTW is an algorithm for land cover mapping using multi-band satellite image time series. The algorithm is particularly valuable to produce land cover maps in regions with scarcity of training data. For details see @Maus:2016 and @Maus:2019. - -# Satellite images time series - -Continuous Earth observation measurements produce sequences of multi-temporal images--satellite images time series. TWDTW algorithm can extract information from satellite images time series, in particular about vegetation with annual phenological cycle. - -An example of phenological cycles is available in `dtwSat` as `MOD13Q1.MT.yearly.patterns`, which includes temporal profiles of vegetation in the Brazilian Amazon extracted from `MOD13Q1` time series. You can load and visualize these profiles in your R session using -```{r , echo = TRUE, eval = TRUE, warning = FALSE, message = FALSE} -library(dtwSat) - -veg_profiles <- twdtwTimeSeries(MOD13Q1.MT.yearly.patterns) - -veg_profiles - -class(veg_profiles) - -plot(veg_profiles, type = "patterns") -``` - -We can refer to the above profiles as the library of known vegetation phenological cycles in the study area. For this area study area `dtwSat` also provides some examples of time series, which you can load by running -```{r , echo = TRUE, eval = TRUE, warning = FALSE, message = FALSE} -veg_ts <- twdtwTimeSeries(MOD13Q1.ts) - -veg_ts - -class(veg_ts) - -plot(veg_ts, type = "timeseries") -``` - -# TWDTW analysis - -Comparing the above time series to the profiles library, which is the sequence of vegetation types in the above time series? To answered this question we can run a TWDTW analysis and compare the above time series to the profiles library, such that -```{r echo = TRUE, eval = TRUE, warning = FALSE, message = FALSE} -# Define logistic time-weight, see Maus et al. (2016) -weight_fun <- logisticWeight(alpha = -0.1, beta = 50) - -# Run TWDTW analysis -twdtw_matches <- twdtwApply(x = veg_ts, - y = veg_profiles, - weight.fun = weight_fun, - keep = TRUE, legacy=TRUE) - -class(twdtw_matches) - -twdtw_matches -``` - -TWDTW analysis has found `r length(twdtw_matches)` alignments, i.e. `r length(twdtw_matches)` alignments between the profiles in the library and shorter segments of the time series. Each of these matches have an associated dissimilarity metric--the TWDTW distance. Using the code below we can visualize all matches with a TWDTW distance lower than `10.0`. -```{r, echo = TRUE, eval = TRUE, warning = FALSE, message = FALSE} -plot(x = twdtw_matches, - type = "alignments", - threshold = 10.0) -``` - -Every segment in the figure shows one possible match between the profiles and the time series. The segments with lower TWDTW distance are more likely to be the correct classification for that specific segment. - -To further investigate the segments by looking at the matching points (observation) between a single pattern and the time series. In the code below we visualize the matching observations for the two best (lowest TWDTW distance) alignments of the `Soybean-cotton`. -```{r, echo = TRUE, eval = TRUE, warning = FALSE, message = FALSE} -plot(x = twdtw_matches, - type = "matches", - attr = "evi", - patterns.labels = "Soybean-cotton", - k = 2) -``` - -We can also investigate the paths of minimum cost in the TWDTW cost matrix for each profile, for example for `Soybean-cotton` run -```{r, echo = TRUE, eval = TRUE, warning = FALSE, message = FALSE} -plot(x = twdtw_matches, - type = "paths", - patterns.labels = "Soybean-cotton") -``` - -Finally we define sub-intervals of 12 months and classify each segment of the time series into one class in our profiles library, such that -```{r, echo = TRUE, eval = TRUE, warning = FALSE, message = FALSE} -twdtw_classification <- twdtwClassify(x = twdtw_matches, - from = "2009-09-01", - to = "2014-08-31", - by = "12 month") - -twdtw_classification - -plot(twdtw_classification, type = "classification") -``` - -In this last chunk of code we answered our question. We can see that only the `r length(twdtw_classification)` best alignments over all land cover classes remained, i.e. the alignments with the lowest TWDTW distance per segment. - -This short introduction showed how to use `dtwSat` to analyse and classify a single time series. This is useful to better understand the method and adjust classification parameters. To learn how apply the method to a raster stack please red the next vignette. - -# References - - diff --git a/vignettes/twdtw02-lucc.Rmd b/vignettes/twdtw02-lucc.Rmd deleted file mode 100644 index c39fdd5..0000000 --- a/vignettes/twdtw02-lucc.Rmd +++ /dev/null @@ -1,180 +0,0 @@ ---- -title: "2. Land-cover change analysis with TWDTW" -author: "Victor Maus" -output: rmarkdown::html_vignette -vignette: > - %\VignetteIndexEntry{1. Land-cover change analysis with TWDTW} - %\VignetteEncoding{UTF-8} - %\VignetteEngine{knitr::rmarkdown} -bibliography: ./../inst/REFERENCES.bib ---- - -```{r, echo=FALSE, include=FALSE} -knitr::opts_chunk$set(collapse = TRUE) -knitr::opts_chunk$set(fig.height = 4.5) -knitr::opts_chunk$set(fig.width = 6) -``` - -This vignette provides a short guide on how to perform a Time-Weighted Dynamic Time Warping (TWDTW) analysis on raster image time series using `dtwSat`. For more details about TWDTW read @Maus:2016 and @Maus:2019. - -# Create multi-band image time series - -`dtwSat` provides a set of images extracted from `MOD13Q1` dataset for a region within the Brazilian Amazon. You can load these images with -```{r , echo = TRUE, eval = TRUE, warning = FALSE, message = FALSE} -library(dtwSat) - -evi <- brick(system.file("lucc_MT/data/evi.tif", package = "dtwSat")) -ndvi <- brick(system.file("lucc_MT/data/ndvi.tif", package = "dtwSat")) -red <- brick(system.file("lucc_MT/data/red.tif", package = "dtwSat")) -blue <- brick(system.file("lucc_MT/data/blue.tif", package = "dtwSat")) -nir <- brick(system.file("lucc_MT/data/nir.tif", package = "dtwSat")) -mir <- brick(system.file("lucc_MT/data/mir.tif", package = "dtwSat")) -doy <- brick(system.file("lucc_MT/data/doy.tif", package = "dtwSat")) -``` - -The `tif` files above have been pre-processed, so that a single file has the complete time series for each band. One can also built the time series for each band from independent files using the function `stack` from the R package `raster`. - -Note that every band must have the same extend, resolution, and number of images, i.e. the same number of observations across space and time. To create the multi-band image time series we need the dates of each observation, which for the set of images above are -```{r , echo = TRUE, eval = TRUE, warning = FALSE, message = FALSE} -timeline <- scan(system.file("lucc_MT/data/timeline", package = "dtwSat"), what="date") -timeline -``` - -Finally, we can create the multi-band image time series with -```{r , echo = TRUE, eval = TRUE, warning = FALSE, message = FALSE} -rts <- twdtwRaster(evi, ndvi, red, blue, nir, mir, timeline = timeline, doy = doy) -rts -``` - -The multi-band image time series has `r length(rts)` bands and `r length(index(rts))` observations ranging from `r index(rts)[1]` to `r tail(index(rts), 1)`. - -# Create a library of vegetation profiles - -To crate a library of profiles we need a set of samples. `dtwSat` provides a set of samples of land cover classes for the study area. We can load the samples with -```{r , echo = TRUE, eval = TRUE, warning = FALSE, message = FALSE} -field_samples <- read.csv(system.file("lucc_MT/data/samples.csv", package = "dtwSat")) -head(field_samples) -``` - -We split this samples into a training and a validation set, such that -```{r , echo = TRUE, eval = TRUE, warning = FALSE, message = FALSE} -library(caret) - -set.seed(1) # set for reproducibility - -I <- unlist(createDataPartition(field_samples$label, p = 0.1)) - -training_samples <- field_samples[I,] - -validation_samples <- field_samples[-I,] -``` - -To get the time series for each sample in the training set, we can run -```{r , echo = TRUE, eval = TRUE, warning = FALSE, message = FALSE} -training_ts <- getTimeSeries(rts, - y = training_samples, - proj4string = "+proj=longlat +datum=WGS84 +no_defs +ellps=WGS84 +towgs84=0,0,0") -``` - -Finally, we can use the training samples to crate the profiles library with -```{r , echo = TRUE, eval = TRUE, warning = FALSE, message = FALSE} -profiles_library <- createPatterns(training_ts, - freq = 8, - formula = y ~ s(x)) - -plot(profiles_library, type = "patterns") -``` - -The function `createPatterns` using generalized additive models (GAMs) to create the profiles. For details see `?gam` from `mgcv` package. - - - -# Classify image time series - -```{r , echo = TRUE, eval = TRUE, warning = FALSE, message = FALSE} -system.time( - twdtw_lucc <- twdtwApply(x = rts, - y = profiles_library, - alpha = -0.1, - beta = 50, - progress = 'text', - minrows = 30, - legacy = FALSE, - time.window = TRUE) -) -``` - -Note the argument `legacy = FALSE`. Setting this argument to `FALSE` considerably improves the performance of the processing as it does not keep any intermediate dataset. Using `time.window = TRUE` implements a change in the TWDTW algorithm to reduce processing. - -One can also run TWDTW in parallel. For a small area, the performance is not much better than the sequential processing. However, for larger areas, the parallel processing can reduce processing time. To run `twdtwApply` in parallel setup and register a cluster before calling the function, such that -```{r, echo = TRUE, eval = FALSE, warning = FALSE, message = FALSE} -library(doParallel) -library(parallel) -library(foreach) - -cl <- makeCluster(detectCores(), type = "FORK") -registerDoParallel(cl) - -system.time( - twdtw_lucc <- twdtwApply(x = rts, - y = profiles_library, - alpha = -0.1, - beta = 50, - progress = 'text', - minrows = 30, - legacy = FALSE, - time.window = TRUE) -) - -registerDoSEQ() -stopCluster(cl) -``` - -# Assess classifiaction results - -`dtwSat` provides a set of functions to asses the classification results. For example with -```{r , echo = TRUE, eval = TRUE, warning = FALSE, message = FALSE} -# Plot TWDTW distances for the first year - plot(twdtw_lucc, type = "distance", time.levels = 1) - -# Plot TWDTW classification results - plot(twdtw_lucc, type = "map") - -# Plot mapped area time series - plot(twdtw_lucc, type = "area") - -# Plot land-cover changes - plot(twdtw_lucc, type = "changes") -``` - -The package also offers a set of methods to assess the classification accuracy and visualize the results. -```{r , echo = TRUE, eval = TRUE, warning = FALSE, message = FALSE} -# Assess classification - twdtw_assess <- - twdtwAssess(twdtw_lucc, - y = validation_samples, - proj4string = "+proj=longlat +datum=WGS84 +no_defs +ellps=WGS84 +towgs84=0,0,0", - conf.int = .95) - -# Plot map accuracy - plot(twdtw_assess, type = "accuracy") - -# Plot area uncertainty - plot(twdtw_assess, type = "area") - -# Plot misclassified samples - plot(twdtw_assess, type = "map", samples = "incorrect") - -# Get latex table with error matrix - twdtwXtable(twdtw_assess, table.type = "matrix") - -# Get latex table with error accuracy - twdtwXtable(twdtw_assess, table.type = "accuracy") - -# Get latex table with area uncertainty - twdtwXtable(twdtw_assess, table.type = "area") -``` - -This short introduction showed how to use `dtwSat` for land-cover change analyse. To learn TWDTW read @Maus:2016 and @Maus:2019. - -# References diff --git a/vignettes/twdtw03-speed.Rmd b/vignettes/twdtw03-speed.Rmd deleted file mode 100644 index 13c7435..0000000 --- a/vignettes/twdtw03-speed.Rmd +++ /dev/null @@ -1,64 +0,0 @@ ---- -title: "2. TWDTW processing time" -author: "Victor Maus" -output: -output: rmarkdown::html_vignette -vignette: > - %\VignetteIndexEntry{1. TWDTW processing time} - %\VignetteEncoding{UTF-8} - %\VignetteEngine{knitr::rmarkdown} -bibliography: ./../inst/REFERENCES.bib -editor_options: - chunk_output_type: console ---- - -```{r, echo=FALSE, include=FALSE} -knitr::opts_chunk$set(collapse = TRUE) -knitr::opts_chunk$set(fig.height = 4.5) -knitr::opts_chunk$set(fig.width = 6) -``` -This vignette tests the performance of TWDTW. For details about method read @Maus:2016 and @Maus:2019. - -# Data - -This vignette uses data from the R package `sitsdata`, which can be installed from Github run -```{r, eval=FALSE} -remotes::install_github(repo = 'e-sensing/sitsdata', ref = '16c8fa7') -``` -The keep this vignette reproducible, I set the argument `ref` to a commit on the online Github repository. - -```{r, eval=FALSE} -library(dtwSat) -library(sitsdata) -library(dplyr) -data(samples_cerrado_mod13q1) -samples_cerrado_mod13q1 |> - group_by(label) |> - summarise(n_samples = n()) -``` - -# Performance - -## Performance on implementations - single time series - - -```{r} -# TODO: -# - twdtwCLassify call for twdtwTimeSeries class and list of data.frame/data.table -# - the same as above with the legacy option -rbenchmark::benchmark( - legacy = twdtwClassify(twdtwApply(x = tw_ts, y = tw_patt, weight.fun = log_fun), from = from, to = to, by = by)[[1]], - fast = twdtwReduceTime(x = mn_ts, y = mn_patt, from = from, to = to, by = by) -) -``` - -## Performance on a real world dataset - -## Performance on a real world with dense time sereis - -In this experiment I increase the number of observation observations in the time series of the example above. - - - - - From 7aaa17decdd1200cd63593aad4ad27752b68b98c Mon Sep 17 00:00:00 2001 From: vwmaus Date: Sat, 15 Jul 2023 14:24:52 +0200 Subject: [PATCH 2/9] Clean repo --- .Rbuildignore | 2 + DESCRIPTION | 5 +- LICENSE | 16 - LICENSE.md | 595 ++++++++++++++++++++++++++ R/create_patterns.R | 17 +- R/data.R | 132 ------ R/miscellaneous.R | 16 +- R/plot_patterns.R | 12 +- data/.gitignore | 2 - data/MOD13Q1.MT.yearly.patterns.RData | Bin 24051 -> 0 bytes data/MOD13Q1.patterns.list.RData | Bin 3931 -> 0 bytes data/MOD13Q1.ts.RData | Bin 3520 -> 0 bytes data/MOD13Q1.ts.labels.RData | Bin 240 -> 0 bytes data/MOD13Q1.ts.list.RData | Bin 14694 -> 0 bytes man/MOD13Q1.MT.yearly.patterns.Rd | 34 -- man/MOD13Q1.patterns.list.Rd | 40 -- man/MOD13Q1.ts.Rd | 37 -- man/MOD13Q1.ts.labels.Rd | 24 -- man/MOD13Q1.ts.list.Rd | 37 -- man/create_pattern.Rd | 15 +- man/get_dates_from_doy.Rd | 9 - man/plot_patterns.Rd | 12 +- man/shift_dates.Rd | 8 +- 23 files changed, 608 insertions(+), 405 deletions(-) delete mode 100644 LICENSE create mode 100644 LICENSE.md delete mode 100644 R/data.R delete mode 100644 data/.gitignore delete mode 100644 data/MOD13Q1.MT.yearly.patterns.RData delete mode 100644 data/MOD13Q1.patterns.list.RData delete mode 100644 data/MOD13Q1.ts.RData delete mode 100644 data/MOD13Q1.ts.labels.RData delete mode 100644 data/MOD13Q1.ts.list.RData delete mode 100644 man/MOD13Q1.MT.yearly.patterns.Rd delete mode 100644 man/MOD13Q1.patterns.list.Rd delete mode 100644 man/MOD13Q1.ts.Rd delete mode 100644 man/MOD13Q1.ts.labels.Rd delete mode 100644 man/MOD13Q1.ts.list.Rd diff --git a/.Rbuildignore b/.Rbuildignore index 716531b..4b9cd57 100644 --- a/.Rbuildignore +++ b/.Rbuildignore @@ -36,3 +36,5 @@ vignettes/twdtw03-speed.Rmd ^data/mod13q1.db ^CRAN-RELEASE$ ^CRAN-SUBMISSION$ +^LICENSE\.md$ +^dtwSat\.Rproj$ diff --git a/DESCRIPTION b/DESCRIPTION index bfbce85..3fed013 100644 --- a/DESCRIPTION +++ b/DESCRIPTION @@ -34,14 +34,13 @@ License: GPL (>= 3) URL: https://github.com/vwmaus/dtwSat/ BugReports: https://github.com/vwmaus/dtwSat/issues/ Maintainer: Victor Maus -LazyData: true Encoding: UTF-8 Roxygen: list(markdown = TRUE) RoxygenNote: 7.2.3 Depends: - twdtw + twdtw, + stars Imports: - stats, mgcv Suggests: rbenchmark, diff --git a/LICENSE b/LICENSE deleted file mode 100644 index 8b36c59..0000000 --- a/LICENSE +++ /dev/null @@ -1,16 +0,0 @@ -GPL (>= 2) - -R Package dtwSat: Time-Weighted Dynamic Time Warping (TWDTW) for -multi-band satellite image time series analysis. - -Copyright (c) 2015 Victor Maus - -This program is free software; you can redistribute it and/or -modify it under the terms of the GNU General Public License -as published by the Free Software Foundation; either version 2 -of the License, or (at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU General Public License for more details. diff --git a/LICENSE.md b/LICENSE.md new file mode 100644 index 0000000..175443c --- /dev/null +++ b/LICENSE.md @@ -0,0 +1,595 @@ +GNU General Public License +========================== + +_Version 3, 29 June 2007_ +_Copyright © 2007 Free Software Foundation, Inc. <>_ + +Everyone is permitted to copy and distribute verbatim copies of this license +document, but changing it is not allowed. + +## Preamble + +The GNU General Public License is a free, copyleft license for software and other +kinds of works. + +The licenses for most software and other practical works are designed to take away +your freedom to share and change the works. By contrast, the GNU General Public +License is intended to guarantee your freedom to share and change all versions of a +program--to make sure it remains free software for all its users. We, the Free +Software Foundation, use the GNU General Public License for most of our software; it +applies also to any other work released this way by its authors. You can apply it to +your programs, too. + +When we speak of free software, we are referring to freedom, not price. Our General +Public Licenses are designed to make sure that you have the freedom to distribute +copies of free software (and charge for them if you wish), that you receive source +code or can get it if you want it, that you can change the software or use pieces of +it in new free programs, and that you know you can do these things. + +To protect your rights, we need to prevent others from denying you these rights or +asking you to surrender the rights. Therefore, you have certain responsibilities if +you distribute copies of the software, or if you modify it: responsibilities to +respect the freedom of others. + +For example, if you distribute copies of such a program, whether gratis or for a fee, +you must pass on to the recipients the same freedoms that you received. You must make +sure that they, too, receive or can get the source code. And you must show them these +terms so they know their rights. + +Developers that use the GNU GPL protect your rights with two steps: **(1)** assert +copyright on the software, and **(2)** offer you this License giving you legal permission +to copy, distribute and/or modify it. + +For the developers' and authors' protection, the GPL clearly explains that there is +no warranty for this free software. For both users' and authors' sake, the GPL +requires that modified versions be marked as changed, so that their problems will not +be attributed erroneously to authors of previous versions. + +Some devices are designed to deny users access to install or run modified versions of +the software inside them, although the manufacturer can do so. This is fundamentally +incompatible with the aim of protecting users' freedom to change the software. The +systematic pattern of such abuse occurs in the area of products for individuals to +use, which is precisely where it is most unacceptable. Therefore, we have designed +this version of the GPL to prohibit the practice for those products. If such problems +arise substantially in other domains, we stand ready to extend this provision to +those domains in future versions of the GPL, as needed to protect the freedom of +users. + +Finally, every program is threatened constantly by software patents. States should +not allow patents to restrict development and use of software on general-purpose +computers, but in those that do, we wish to avoid the special danger that patents +applied to a free program could make it effectively proprietary. To prevent this, the +GPL assures that patents cannot be used to render the program non-free. + +The precise terms and conditions for copying, distribution and modification follow. + +## TERMS AND CONDITIONS + +### 0. Definitions + +“This License” refers to version 3 of the GNU General Public License. + +“Copyright” also means copyright-like laws that apply to other kinds of +works, such as semiconductor masks. + +“The Program” refers to any copyrightable work licensed under this +License. Each licensee is addressed as “you”. “Licensees” and +“recipients” may be individuals or organizations. + +To “modify” a work means to copy from or adapt all or part of the work in +a fashion requiring copyright permission, other than the making of an exact copy. The +resulting work is called a “modified version” of the earlier work or a +work “based on” the earlier work. + +A “covered work” means either the unmodified Program or a work based on +the Program. + +To “propagate” a work means to do anything with it that, without +permission, would make you directly or secondarily liable for infringement under +applicable copyright law, except executing it on a computer or modifying a private +copy. Propagation includes copying, distribution (with or without modification), +making available to the public, and in some countries other activities as well. + +To “convey” a work means any kind of propagation that enables other +parties to make or receive copies. Mere interaction with a user through a computer +network, with no transfer of a copy, is not conveying. + +An interactive user interface displays “Appropriate Legal Notices” to the +extent that it includes a convenient and prominently visible feature that **(1)** +displays an appropriate copyright notice, and **(2)** tells the user that there is no +warranty for the work (except to the extent that warranties are provided), that +licensees may convey the work under this License, and how to view a copy of this +License. If the interface presents a list of user commands or options, such as a +menu, a prominent item in the list meets this criterion. + +### 1. Source Code + +The “source code” for a work means the preferred form of the work for +making modifications to it. “Object code” means any non-source form of a +work. + +A “Standard Interface” means an interface that either is an official +standard defined by a recognized standards body, or, in the case of interfaces +specified for a particular programming language, one that is widely used among +developers working in that language. + +The “System Libraries” of an executable work include anything, other than +the work as a whole, that **(a)** is included in the normal form of packaging a Major +Component, but which is not part of that Major Component, and **(b)** serves only to +enable use of the work with that Major Component, or to implement a Standard +Interface for which an implementation is available to the public in source code form. +A “Major Component”, in this context, means a major essential component +(kernel, window system, and so on) of the specific operating system (if any) on which +the executable work runs, or a compiler used to produce the work, or an object code +interpreter used to run it. + +The “Corresponding Source” for a work in object code form means all the +source code needed to generate, install, and (for an executable work) run the object +code and to modify the work, including scripts to control those activities. However, +it does not include the work's System Libraries, or general-purpose tools or +generally available free programs which are used unmodified in performing those +activities but which are not part of the work. For example, Corresponding Source +includes interface definition files associated with source files for the work, and +the source code for shared libraries and dynamically linked subprograms that the work +is specifically designed to require, such as by intimate data communication or +control flow between those subprograms and other parts of the work. + +The Corresponding Source need not include anything that users can regenerate +automatically from other parts of the Corresponding Source. + +The Corresponding Source for a work in source code form is that same work. + +### 2. Basic Permissions + +All rights granted under this License are granted for the term of copyright on the +Program, and are irrevocable provided the stated conditions are met. This License +explicitly affirms your unlimited permission to run the unmodified Program. The +output from running a covered work is covered by this License only if the output, +given its content, constitutes a covered work. This License acknowledges your rights +of fair use or other equivalent, as provided by copyright law. + +You may make, run and propagate covered works that you do not convey, without +conditions so long as your license otherwise remains in force. You may convey covered +works to others for the sole purpose of having them make modifications exclusively +for you, or provide you with facilities for running those works, provided that you +comply with the terms of this License in conveying all material for which you do not +control copyright. Those thus making or running the covered works for you must do so +exclusively on your behalf, under your direction and control, on terms that prohibit +them from making any copies of your copyrighted material outside their relationship +with you. + +Conveying under any other circumstances is permitted solely under the conditions +stated below. Sublicensing is not allowed; section 10 makes it unnecessary. + +### 3. Protecting Users' Legal Rights From Anti-Circumvention Law + +No covered work shall be deemed part of an effective technological measure under any +applicable law fulfilling obligations under article 11 of the WIPO copyright treaty +adopted on 20 December 1996, or similar laws prohibiting or restricting circumvention +of such measures. + +When you convey a covered work, you waive any legal power to forbid circumvention of +technological measures to the extent such circumvention is effected by exercising +rights under this License with respect to the covered work, and you disclaim any +intention to limit operation or modification of the work as a means of enforcing, +against the work's users, your or third parties' legal rights to forbid circumvention +of technological measures. + +### 4. Conveying Verbatim Copies + +You may convey verbatim copies of the Program's source code as you receive it, in any +medium, provided that you conspicuously and appropriately publish on each copy an +appropriate copyright notice; keep intact all notices stating that this License and +any non-permissive terms added in accord with section 7 apply to the code; keep +intact all notices of the absence of any warranty; and give all recipients a copy of +this License along with the Program. + +You may charge any price or no price for each copy that you convey, and you may offer +support or warranty protection for a fee. + +### 5. Conveying Modified Source Versions + +You may convey a work based on the Program, or the modifications to produce it from +the Program, in the form of source code under the terms of section 4, provided that +you also meet all of these conditions: + +* **a)** The work must carry prominent notices stating that you modified it, and giving a +relevant date. +* **b)** The work must carry prominent notices stating that it is released under this +License and any conditions added under section 7. This requirement modifies the +requirement in section 4 to “keep intact all notices”. +* **c)** You must license the entire work, as a whole, under this License to anyone who +comes into possession of a copy. This License will therefore apply, along with any +applicable section 7 additional terms, to the whole of the work, and all its parts, +regardless of how they are packaged. This License gives no permission to license the +work in any other way, but it does not invalidate such permission if you have +separately received it. +* **d)** If the work has interactive user interfaces, each must display Appropriate Legal +Notices; however, if the Program has interactive interfaces that do not display +Appropriate Legal Notices, your work need not make them do so. + +A compilation of a covered work with other separate and independent works, which are +not by their nature extensions of the covered work, and which are not combined with +it such as to form a larger program, in or on a volume of a storage or distribution +medium, is called an “aggregate” if the compilation and its resulting +copyright are not used to limit the access or legal rights of the compilation's users +beyond what the individual works permit. Inclusion of a covered work in an aggregate +does not cause this License to apply to the other parts of the aggregate. + +### 6. Conveying Non-Source Forms + +You may convey a covered work in object code form under the terms of sections 4 and +5, provided that you also convey the machine-readable Corresponding Source under the +terms of this License, in one of these ways: + +* **a)** Convey the object code in, or embodied in, a physical product (including a +physical distribution medium), accompanied by the Corresponding Source fixed on a +durable physical medium customarily used for software interchange. +* **b)** Convey the object code in, or embodied in, a physical product (including a +physical distribution medium), accompanied by a written offer, valid for at least +three years and valid for as long as you offer spare parts or customer support for +that product model, to give anyone who possesses the object code either **(1)** a copy of +the Corresponding Source for all the software in the product that is covered by this +License, on a durable physical medium customarily used for software interchange, for +a price no more than your reasonable cost of physically performing this conveying of +source, or **(2)** access to copy the Corresponding Source from a network server at no +charge. +* **c)** Convey individual copies of the object code with a copy of the written offer to +provide the Corresponding Source. This alternative is allowed only occasionally and +noncommercially, and only if you received the object code with such an offer, in +accord with subsection 6b. +* **d)** Convey the object code by offering access from a designated place (gratis or for +a charge), and offer equivalent access to the Corresponding Source in the same way +through the same place at no further charge. You need not require recipients to copy +the Corresponding Source along with the object code. If the place to copy the object +code is a network server, the Corresponding Source may be on a different server +(operated by you or a third party) that supports equivalent copying facilities, +provided you maintain clear directions next to the object code saying where to find +the Corresponding Source. Regardless of what server hosts the Corresponding Source, +you remain obligated to ensure that it is available for as long as needed to satisfy +these requirements. +* **e)** Convey the object code using peer-to-peer transmission, provided you inform +other peers where the object code and Corresponding Source of the work are being +offered to the general public at no charge under subsection 6d. + +A separable portion of the object code, whose source code is excluded from the +Corresponding Source as a System Library, need not be included in conveying the +object code work. + +A “User Product” is either **(1)** a “consumer product”, which +means any tangible personal property which is normally used for personal, family, or +household purposes, or **(2)** anything designed or sold for incorporation into a +dwelling. In determining whether a product is a consumer product, doubtful cases +shall be resolved in favor of coverage. For a particular product received by a +particular user, “normally used” refers to a typical or common use of +that class of product, regardless of the status of the particular user or of the way +in which the particular user actually uses, or expects or is expected to use, the +product. A product is a consumer product regardless of whether the product has +substantial commercial, industrial or non-consumer uses, unless such uses represent +the only significant mode of use of the product. + +“Installation Information” for a User Product means any methods, +procedures, authorization keys, or other information required to install and execute +modified versions of a covered work in that User Product from a modified version of +its Corresponding Source. The information must suffice to ensure that the continued +functioning of the modified object code is in no case prevented or interfered with +solely because modification has been made. + +If you convey an object code work under this section in, or with, or specifically for +use in, a User Product, and the conveying occurs as part of a transaction in which +the right of possession and use of the User Product is transferred to the recipient +in perpetuity or for a fixed term (regardless of how the transaction is +characterized), the Corresponding Source conveyed under this section must be +accompanied by the Installation Information. But this requirement does not apply if +neither you nor any third party retains the ability to install modified object code +on the User Product (for example, the work has been installed in ROM). + +The requirement to provide Installation Information does not include a requirement to +continue to provide support service, warranty, or updates for a work that has been +modified or installed by the recipient, or for the User Product in which it has been +modified or installed. Access to a network may be denied when the modification itself +materially and adversely affects the operation of the network or violates the rules +and protocols for communication across the network. + +Corresponding Source conveyed, and Installation Information provided, in accord with +this section must be in a format that is publicly documented (and with an +implementation available to the public in source code form), and must require no +special password or key for unpacking, reading or copying. + +### 7. Additional Terms + +“Additional permissions” are terms that supplement the terms of this +License by making exceptions from one or more of its conditions. Additional +permissions that are applicable to the entire Program shall be treated as though they +were included in this License, to the extent that they are valid under applicable +law. If additional permissions apply only to part of the Program, that part may be +used separately under those permissions, but the entire Program remains governed by +this License without regard to the additional permissions. + +When you convey a copy of a covered work, you may at your option remove any +additional permissions from that copy, or from any part of it. (Additional +permissions may be written to require their own removal in certain cases when you +modify the work.) You may place additional permissions on material, added by you to a +covered work, for which you have or can give appropriate copyright permission. + +Notwithstanding any other provision of this License, for material you add to a +covered work, you may (if authorized by the copyright holders of that material) +supplement the terms of this License with terms: + +* **a)** Disclaiming warranty or limiting liability differently from the terms of +sections 15 and 16 of this License; or +* **b)** Requiring preservation of specified reasonable legal notices or author +attributions in that material or in the Appropriate Legal Notices displayed by works +containing it; or +* **c)** Prohibiting misrepresentation of the origin of that material, or requiring that +modified versions of such material be marked in reasonable ways as different from the +original version; or +* **d)** Limiting the use for publicity purposes of names of licensors or authors of the +material; or +* **e)** Declining to grant rights under trademark law for use of some trade names, +trademarks, or service marks; or +* **f)** Requiring indemnification of licensors and authors of that material by anyone +who conveys the material (or modified versions of it) with contractual assumptions of +liability to the recipient, for any liability that these contractual assumptions +directly impose on those licensors and authors. + +All other non-permissive additional terms are considered “further +restrictions” within the meaning of section 10. If the Program as you received +it, or any part of it, contains a notice stating that it is governed by this License +along with a term that is a further restriction, you may remove that term. If a +license document contains a further restriction but permits relicensing or conveying +under this License, you may add to a covered work material governed by the terms of +that license document, provided that the further restriction does not survive such +relicensing or conveying. + +If you add terms to a covered work in accord with this section, you must place, in +the relevant source files, a statement of the additional terms that apply to those +files, or a notice indicating where to find the applicable terms. + +Additional terms, permissive or non-permissive, may be stated in the form of a +separately written license, or stated as exceptions; the above requirements apply +either way. + +### 8. Termination + +You may not propagate or modify a covered work except as expressly provided under +this License. Any attempt otherwise to propagate or modify it is void, and will +automatically terminate your rights under this License (including any patent licenses +granted under the third paragraph of section 11). + +However, if you cease all violation of this License, then your license from a +particular copyright holder is reinstated **(a)** provisionally, unless and until the +copyright holder explicitly and finally terminates your license, and **(b)** permanently, +if the copyright holder fails to notify you of the violation by some reasonable means +prior to 60 days after the cessation. + +Moreover, your license from a particular copyright holder is reinstated permanently +if the copyright holder notifies you of the violation by some reasonable means, this +is the first time you have received notice of violation of this License (for any +work) from that copyright holder, and you cure the violation prior to 30 days after +your receipt of the notice. + +Termination of your rights under this section does not terminate the licenses of +parties who have received copies or rights from you under this License. If your +rights have been terminated and not permanently reinstated, you do not qualify to +receive new licenses for the same material under section 10. + +### 9. Acceptance Not Required for Having Copies + +You are not required to accept this License in order to receive or run a copy of the +Program. Ancillary propagation of a covered work occurring solely as a consequence of +using peer-to-peer transmission to receive a copy likewise does not require +acceptance. However, nothing other than this License grants you permission to +propagate or modify any covered work. These actions infringe copyright if you do not +accept this License. Therefore, by modifying or propagating a covered work, you +indicate your acceptance of this License to do so. + +### 10. Automatic Licensing of Downstream Recipients + +Each time you convey a covered work, the recipient automatically receives a license +from the original licensors, to run, modify and propagate that work, subject to this +License. You are not responsible for enforcing compliance by third parties with this +License. + +An “entity transaction” is a transaction transferring control of an +organization, or substantially all assets of one, or subdividing an organization, or +merging organizations. If propagation of a covered work results from an entity +transaction, each party to that transaction who receives a copy of the work also +receives whatever licenses to the work the party's predecessor in interest had or +could give under the previous paragraph, plus a right to possession of the +Corresponding Source of the work from the predecessor in interest, if the predecessor +has it or can get it with reasonable efforts. + +You may not impose any further restrictions on the exercise of the rights granted or +affirmed under this License. For example, you may not impose a license fee, royalty, +or other charge for exercise of rights granted under this License, and you may not +initiate litigation (including a cross-claim or counterclaim in a lawsuit) alleging +that any patent claim is infringed by making, using, selling, offering for sale, or +importing the Program or any portion of it. + +### 11. Patents + +A “contributor” is a copyright holder who authorizes use under this +License of the Program or a work on which the Program is based. The work thus +licensed is called the contributor's “contributor version”. + +A contributor's “essential patent claims” are all patent claims owned or +controlled by the contributor, whether already acquired or hereafter acquired, that +would be infringed by some manner, permitted by this License, of making, using, or +selling its contributor version, but do not include claims that would be infringed +only as a consequence of further modification of the contributor version. For +purposes of this definition, “control” includes the right to grant patent +sublicenses in a manner consistent with the requirements of this License. + +Each contributor grants you a non-exclusive, worldwide, royalty-free patent license +under the contributor's essential patent claims, to make, use, sell, offer for sale, +import and otherwise run, modify and propagate the contents of its contributor +version. + +In the following three paragraphs, a “patent license” is any express +agreement or commitment, however denominated, not to enforce a patent (such as an +express permission to practice a patent or covenant not to sue for patent +infringement). To “grant” such a patent license to a party means to make +such an agreement or commitment not to enforce a patent against the party. + +If you convey a covered work, knowingly relying on a patent license, and the +Corresponding Source of the work is not available for anyone to copy, free of charge +and under the terms of this License, through a publicly available network server or +other readily accessible means, then you must either **(1)** cause the Corresponding +Source to be so available, or **(2)** arrange to deprive yourself of the benefit of the +patent license for this particular work, or **(3)** arrange, in a manner consistent with +the requirements of this License, to extend the patent license to downstream +recipients. “Knowingly relying” means you have actual knowledge that, but +for the patent license, your conveying the covered work in a country, or your +recipient's use of the covered work in a country, would infringe one or more +identifiable patents in that country that you have reason to believe are valid. + +If, pursuant to or in connection with a single transaction or arrangement, you +convey, or propagate by procuring conveyance of, a covered work, and grant a patent +license to some of the parties receiving the covered work authorizing them to use, +propagate, modify or convey a specific copy of the covered work, then the patent +license you grant is automatically extended to all recipients of the covered work and +works based on it. + +A patent license is “discriminatory” if it does not include within the +scope of its coverage, prohibits the exercise of, or is conditioned on the +non-exercise of one or more of the rights that are specifically granted under this +License. You may not convey a covered work if you are a party to an arrangement with +a third party that is in the business of distributing software, under which you make +payment to the third party based on the extent of your activity of conveying the +work, and under which the third party grants, to any of the parties who would receive +the covered work from you, a discriminatory patent license **(a)** in connection with +copies of the covered work conveyed by you (or copies made from those copies), or **(b)** +primarily for and in connection with specific products or compilations that contain +the covered work, unless you entered into that arrangement, or that patent license +was granted, prior to 28 March 2007. + +Nothing in this License shall be construed as excluding or limiting any implied +license or other defenses to infringement that may otherwise be available to you +under applicable patent law. + +### 12. No Surrender of Others' Freedom + +If conditions are imposed on you (whether by court order, agreement or otherwise) +that contradict the conditions of this License, they do not excuse you from the +conditions of this License. If you cannot convey a covered work so as to satisfy +simultaneously your obligations under this License and any other pertinent +obligations, then as a consequence you may not convey it at all. For example, if you +agree to terms that obligate you to collect a royalty for further conveying from +those to whom you convey the Program, the only way you could satisfy both those terms +and this License would be to refrain entirely from conveying the Program. + +### 13. Use with the GNU Affero General Public License + +Notwithstanding any other provision of this License, you have permission to link or +combine any covered work with a work licensed under version 3 of the GNU Affero +General Public License into a single combined work, and to convey the resulting work. +The terms of this License will continue to apply to the part which is the covered +work, but the special requirements of the GNU Affero General Public License, section +13, concerning interaction through a network will apply to the combination as such. + +### 14. Revised Versions of this License + +The Free Software Foundation may publish revised and/or new versions of the GNU +General Public License from time to time. Such new versions will be similar in spirit +to the present version, but may differ in detail to address new problems or concerns. + +Each version is given a distinguishing version number. If the Program specifies that +a certain numbered version of the GNU General Public License “or any later +version” applies to it, you have the option of following the terms and +conditions either of that numbered version or of any later version published by the +Free Software Foundation. If the Program does not specify a version number of the GNU +General Public License, you may choose any version ever published by the Free +Software Foundation. + +If the Program specifies that a proxy can decide which future versions of the GNU +General Public License can be used, that proxy's public statement of acceptance of a +version permanently authorizes you to choose that version for the Program. + +Later license versions may give you additional or different permissions. However, no +additional obligations are imposed on any author or copyright holder as a result of +your choosing to follow a later version. + +### 15. Disclaimer of Warranty + +THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. +EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES +PROVIDE THE PROGRAM “AS IS” WITHOUT WARRANTY OF ANY KIND, EITHER +EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF +MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE +QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE PROGRAM PROVE +DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. + +### 16. Limitation of Liability + +IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL ANY +COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS THE PROGRAM AS +PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, +INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE +PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE +OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE +WITH ANY OTHER PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE +POSSIBILITY OF SUCH DAMAGES. + +### 17. Interpretation of Sections 15 and 16 + +If the disclaimer of warranty and limitation of liability provided above cannot be +given local legal effect according to their terms, reviewing courts shall apply local +law that most closely approximates an absolute waiver of all civil liability in +connection with the Program, unless a warranty or assumption of liability accompanies +a copy of the Program in return for a fee. + +_END OF TERMS AND CONDITIONS_ + +## How to Apply These Terms to Your New Programs + +If you develop a new program, and you want it to be of the greatest possible use to +the public, the best way to achieve this is to make it free software which everyone +can redistribute and change under these terms. + +To do so, attach the following notices to the program. It is safest to attach them +to the start of each source file to most effectively state the exclusion of warranty; +and each file should have at least the “copyright” line and a pointer to +where the full notice is found. + + + Copyright (C) + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . + +Also add information on how to contact you by electronic and paper mail. + +If the program does terminal interaction, make it output a short notice like this +when it starts in an interactive mode: + + Copyright (C) + This program comes with ABSOLUTELY NO WARRANTY; for details type 'show w'. + This is free software, and you are welcome to redistribute it + under certain conditions; type 'show c' for details. + +The hypothetical commands `show w` and `show c` should show the appropriate parts of +the General Public License. Of course, your program's commands might be different; +for a GUI interface, you would use an “about box”. + +You should also get your employer (if you work as a programmer) or school, if any, to +sign a “copyright disclaimer” for the program, if necessary. For more +information on this, and how to apply and follow the GNU GPL, see +<>. + +The GNU General Public License does not permit incorporating your program into +proprietary programs. If your program is a subroutine library, you may consider it +more useful to permit linking proprietary applications with the library. If this is +what you want to do, use the GNU Lesser General Public License instead of this +License. But first, please read +<>. diff --git a/R/create_patterns.R b/R/create_patterns.R index 24d5dca..4313a0b 100644 --- a/R/create_patterns.R +++ b/R/create_patterns.R @@ -3,7 +3,7 @@ #' #' @description Create temporal patterns from objects of class twdtwTimeSeries. #' -#' @param x an object of class \code{\link[dtwSat]{twdtwTimeSeries}}. +#' @param x an object of class \code{\link[base]{data.frame}}. #' #' @param from A character or \code{\link[base]{Dates}} object in the format #' "yyyy-mm-dd". If not provided it is equal to the smallest date of the @@ -26,7 +26,7 @@ #' @param ... other arguments to pass to the function \code{\link[mgcv]{gam}} in the #' package \pkg{mgcv}. #' -#' @return an object of class \code{\link[dtwSat]{twdtwTimeSeries}} +#' @return an object of class \code{\link[base]{data.frame}} #' #' #' @details The hidden assumption is that the temporal pattern is a cycle the repeats itself @@ -34,17 +34,6 @@ #' with each other, keeping their respective sequence of days of the year. The function fits a #' Generalized Additive Model (GAM) to the aligned set of samples. #' -#' @seealso -#' \code{\link[dtwSat]{twdtwMatches-class}}, -#' \code{\link[dtwSat]{twdtwTimeSeries-class}}, -#' \code{\link[dtwSat]{getTimeSeries}}, and -#' \code{\link[dtwSat]{twdtwApply}} -#' -#' @references -#' \insertRef{Maus:2019}{dtwSat} -#' -#' \insertRef{Maus:2016}{dtwSat} -#' #' @export create_pattern = function(x, from, to, freq, attr, formula, ...){ @@ -62,7 +51,7 @@ create_pattern = function(x, from, to, freq, attr, formula, ...){ # Shift dates to match the same period df = do.call("rbind", lapply(as.list(x), function(x){ - res = shiftDates(x, year=as.numeric(format(to, "%Y"))) + res = shift_dates(x, year=as.numeric(format(to, "%Y"))) res = window(res, start = from, end = to) res = data.frame(time=index(res), res) names(res) = c("time", names(x)) diff --git a/R/data.R b/R/data.R deleted file mode 100644 index 629d191..0000000 --- a/R/data.R +++ /dev/null @@ -1,132 +0,0 @@ -#' @title Data: patterns time series -#' @author Victor Maus, \email{vwmaus1@@gmail.com} -#' -#' @description This dataset has a list of patterns with the phenological cycle of: Soybean, -#' Cotton, and Maize. These time series are based on the MODIS product -#' MOD13Q1 250 m 16 days \insertCite{Didan:2015}{dtwSat}. The patterns were built -#' from ground truth samples of each -#' crop using Generalized Additive Models (GAM), see \link[dtwSat]{createPatterns}. -#' -#' @docType data -#' @format A named \code{list} of three \link[zoo]{zoo} objects, ''Soybean'', ''Cotton'', -#' and ''Maize'', whose indices are \code{\link[base]{Dates}} in the format ''yyyy-mm-dd''. -#' Each node has 6 attributes: ''ndvi'', ''evi'', ''red'', ''nir'', ''blue'', -#' and ''mir''. -#' -#' @seealso -#' \link[dtwSat]{MOD13Q1.ts}, -#' \link[dtwSat]{MOD13Q1.ts.list}, and -#' \link[dtwSat]{createPatterns}. -#' -#' @seealso For details about MOD13Q1 see \insertCite{Didan:2015}{dtwSat}. -#' -#' @references -#' \insertAllCited{} -#' -#' \insertRef{Maus:2019}{dtwSat} -#' -#' \insertRef{Maus:2016}{dtwSat} - -#' -"MOD13Q1.patterns.list" - - -#' @title Data: An example of satellite time series -#' @author Victor Maus, \email{vwmaus1@@gmail.com} -#' -#' @description This dataset has a time series based on the -#' MODIS product MOD13Q1 250 m 16 days \insertCite{Didan:2015}{dtwSat}. -#' It is an irregularly sampled time series -#' using the real date of each pixel from ''2009-08-05'' to ''2013-07-31''. -#' -#' @docType data -#' @format A \link[zoo]{zoo} object, whose indices are \code{\link[base]{Dates}} -#' in the format ''yyyy-mm-dd''. Each node has 6 attributes: ''ndvi'', -#' ''evi'', ''red'', ''nir'', ''blue'', and ''mir''. -#' -#' @seealso -#' \link[dtwSat]{MOD13Q1.ts.list}, -#' \link[dtwSat]{MOD13Q1.patterns.list}. -#' -#' -#' @seealso For details about MOD13Q1 see \insertCite{Didan:2015}{dtwSat}. -#' -#' @references -#' \insertAllCited{} -#' -#' \insertRef{Maus:2019}{dtwSat} -#' -#' \insertRef{Maus:2016}{dtwSat} - -#' -"MOD13Q1.ts" - -#' @title Data: Labels of the satellite time series in MOD13Q1.ts -#' @author Victor Maus, \email{vwmaus1@@gmail.com} -#' -#' @description These labels are based on field work. -#' -#' @docType data -#' @format An object of class \link[base]{data.frame}, whose attributes are: -#' the label of the crop class ''label'', the start of the crop period ''from'', -#' and the end of the crop period ''to''. The dates are in the format ''yyyy-mm-dd''. -#' -#' @seealso -#' \link[dtwSat]{MOD13Q1.ts}. -#' -"MOD13Q1.ts.labels" - -#' @title Data: A list of satellite time series -#' @author Victor Maus, \email{vwmaus1@@gmail.com} -#' -#' @description This dataset has a list of time series based on the -#' MODIS product MOD13Q1 250 m 16 days \insertCite{Didan:2015}{dtwSat}. -#' It is an irregularly sampled time series -#' using the real date of each pixel from ''2009-08-05'' to ''2013-07-31''. -#' -#' @docType data -#' @format A \link[zoo]{zoo} object, whose indices are \code{\link[base]{Dates}} -#' in the format ''yyyy-mm-dd''. Each node has 6 attributes: ''ndvi'', -#' ''evi'', ''red'', ''nir'', ''blue'', and ''mir''. -#' -#' @seealso -#' \link[dtwSat]{MOD13Q1.ts}, and -#' \link[dtwSat]{MOD13Q1.patterns.list}. -#' -#' -#' @seealso For details about MOD13Q1 see \insertCite{Didan:2015}{dtwSat}. -#' -#' @references -#' \insertAllCited{} -#' -#' \insertRef{Maus:2019}{dtwSat} -#' -#' \insertRef{Maus:2016}{dtwSat} - -#' -"MOD13Q1.ts.list" - -#' @title Data: Pattern time series -#' @author Victor Maus, \email{vwmaus1@@gmail.com} -#' -#' @description This dataset has a list of patterns with the phenological cycle of: Water, -#' Cotton-Fallow, Forest, Low vegetation, Pasture, Soybean-Cotton, Soybean-Maize, Soybean-Millet, -#' Soybean-Sunflower, and Wetland. These time series are based on the MODIS product -#' MOD13Q1 250 m 16 days \insertCite{Didan:2015}{dtwSat}. -#' The patterns were built from ground truth samples of each -#' crop using Generalized Additive Models (GAM), see \link[dtwSat]{createPatterns}. -#' -#' @docType data -#' @format A \link[dtwSat]{twdtwTimeSeries} object. -#' -#' @seealso For details about MOD13Q1 see \insertCite{Didan:2015}{dtwSat}. -#' -#' @references -#' \insertAllCited{} -#' -#' \insertRef{Maus:2019}{dtwSat} -#' -#' \insertRef{Maus:2016}{dtwSat} -#' -"MOD13Q1.MT.yearly.patterns" - diff --git a/R/miscellaneous.R b/R/miscellaneous.R index eaa21f9..8e07ffd 100644 --- a/R/miscellaneous.R +++ b/R/miscellaneous.R @@ -8,16 +8,8 @@ #' @param doy A vector with the day of the year. #' It must have the same length as \code{year}. #' -#' @docType methods -#' #' @return A \code{\link[base]{Dates}} object. #' -#' @seealso \link[dtwSat]{shiftDates} -#' -#' @references -#' \insertRef{Maus:2019}{dtwSat} -#' -#' \insertRef{Maus:2016}{dtwSat} #' #' @export get_dates_from_doy = function(year, doy){ @@ -35,18 +27,12 @@ get_dates_from_doy = function(year, doy){ #' @description This function shifts the dates of the time series to a #' given base year. #' -#' @param object \code{\link[dtwSat]{twdtwTimeSeries}} objects, -#' \code{\link[zoo]{zoo}} objects or a list of \code{\link[zoo]{zoo}} objects. +#' @param object \code{\link[base]{data.frame}} objects. #' #' @param year the base year to shift the time series to. #' #' @return An object of the same class as the input \code{object}. #' -#' @references -#' \insertRef{Maus:2019}{dtwSat} -#' -#' \insertRef{Maus:2016}{dtwSat} -#' #' @export shift_dates = function(x, year){ labels = as.character(labels(x)) diff --git a/R/plot_patterns.R b/R/plot_patterns.R index 5c8860d..8321ac8 100644 --- a/R/plot_patterns.R +++ b/R/plot_patterns.R @@ -3,8 +3,7 @@ #' #' @description Method for plotting the temporal patterns. #' -#' @param x An object of class \code{\link[dtwSat]{twdtwTimeSeries}}, -#' \code{\link[zoo]{zoo}}, or list of \code{\link[zoo]{zoo}}. +#' @param x An object of class \code{\link[base]{data.frame}}. #' @param labels A vector with labels of the time series. If not declared #' the function will plot all time series. #' @param year An integer. The base year to shift the dates of the time series to. @@ -15,15 +14,6 @@ #' #' @return A \link[ggplot2]{ggplot} object. #' -#' @seealso -#' \code{\link[dtwSat]{twdtwTimeSeries-class}} and -#' \code{\link[dtwSat]{plotTimeSeries}} -#' -#' @references -#' \insertRef{Maus:2019}{dtwSat} -#' -#' \insertRef{Maus:2016}{dtwSat} -#' #' @export plot_patterns = function(x, labels=NULL, attr, year=2005){ diff --git a/data/.gitignore b/data/.gitignore deleted file mode 100644 index 4b02b56..0000000 --- a/data/.gitignore +++ /dev/null @@ -1,2 +0,0 @@ -mod13q1 -mod13q1.db diff --git a/data/MOD13Q1.MT.yearly.patterns.RData b/data/MOD13Q1.MT.yearly.patterns.RData deleted file mode 100644 index 372833d63a72b4ef20b2affeb24736c8dc95c0ff..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 24051 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