Skip to content

Latest commit

 

History

History
108 lines (73 loc) · 3.57 KB

README.md

File metadata and controls

108 lines (73 loc) · 3.57 KB

rsacc

License: GPL v3

An R package to perform accuracy assessment of remote sensing land-use classifications. The package can auto-detect input types, and then reproject and/or resample data if necessary and adapt calculations for different input combinations.

To install, you will need the devtools package installed:

install.packages("devtools")

You can then install rsacc using:

devtools::install_github("EcoDyn/rsacc")

There are only three functions for now. First, build the confusion matrix between classification and validation datasets. Classification can be given as a raster object (package raster) or a SpatialPolygonsDataFrame (usually imported using raster::shapefile). Validation data can be raster, SpatialPolygonsDataFrame, or SpatialPointsDataFrame.

Example:

library(raster)
library(rsacc)

> # read in classification data
> map_data <- raster("sample_data/LandsatClassification.tif")

> # read in validation data
> val_points <- shapefile("sample_data/site_447_classified_points.shp")

> # Build confusion matrix. 
> # Use reproj=T if projections are different.
> # Since validation data is a Spatial object, we need to specify the class field name

> cmat <- conf_mat(map_data,val_points,reproj=T,val_field="DN")

Map data is a RasterLayer
Reference data is a SpatialPointsDataFrame
Map projection:  +proj=longlat +datum=WGS84 +no_defs +ellps=WGS84 +towgs84=0,0,0
Reference projection:  +proj=utm +zone=23 +south +datum=WGS84 +units=m +no_defs +ellps=WGS84 +towgs84=0,0,0
Reprojecting validation to match map.

> cmat
   mapvals
      1   2   3   4
  1 187   0   0  17
  2   3 177   0   1
  3   3   1   1   5
  4  16   4   0  85
> 

If you are working with Spatial objects, be sure to specify column names where the class labels are stored, using map_field = and val_field = . Also remember to specify nodata values using na_val = , to avoid class mismatches between classification and validation. For now, all datasets need to have the same nodata value.

External confusion matrices can also be used, as long as they are an object of the matrix class and have named rows and columns.

Once you have a confusion matrix, there are two accuracy functions:kia calculates Overall Accuracy, Kappa Index of Agreement, and per-class Omission and Comission errors, and pontius() calculates Quantity, Allocation, Exchange and Shift disagrements according to Pontius & Millones (2011) and Pontius & Santacruz (2014).

> kia(cmat)
$`Overall Accuracy`
                         Accuracy_results
Overall Accuracy                   0.9000
Overall Error                      0.1000
Kappa Index of Agreement           0.8467

$`Class Accuracy`
  Omission.Error Comission.Error
1         0.1053          0.0833
2         0.0275          0.0221
3         0.0000          0.9000
4         0.2130          0.1905

> pontius(cmat)
$`Pontius et al. 2011 Disagreement Metrics:`
                                Value
Overall Agreement               0.900
Overall Disagreement            0.100
Overall Quantity Disagreement   0.018
Overall Allocation Disagreement 0.082

$`Decomposing your Allocation Disagreement as in Pontius and Santacruz 2014:`
                              Value
Overall Exchange Disagreement 0.068
Overall Shift Disagreement    0.014

$`Disagreement Metrics at class level:`
  Classes Quantity Exchange Shift
1       1    0.010    0.064 0.004
2       2    0.002    0.004 0.012
3       3    0.018    0.000 0.000
4       4    0.006    0.068 0.012


>