Intensity analysis of land change by interval, category, and transition

Sam Khallaghi

2019-03-25

Data

This tutorial illustrates the concepts by using three dummy maps of land categories at the years 2005, 2010, and 2012. Each map consist of nine pixels representing three categories: Water, Trees and Impervious.

The maps are available in “rst” format and included in the package. The intensity.analysis package can read all supported raster formats through RGDAL library. The first step is to read the raster files and put them in a list.

# Read the raster files from example data.
raster_2005 <- raster(system.file("external/RASTER_2005.RST", package="intensity.analysis"))
raster_2010 <- raster(system.file("external/RASTER_2010.RST", package="intensity.analysis"))
raster_2012 <- raster(system.file("external/RASTER_2012.RST", package="intensity.analysis"))
# Make a list of raster objects.
raster.layers <- list(raster_2005, raster_2010, raster_2012)

Next, using the multicrosstab function, we overlay the 2005 map with the 2010 map and then the 2010 map with the 2012 map to produce a crosstabulation table for each time interval. The output of the function is a list containing crosstabulation tables in which the rows are the categories of the initial time and the columns are the categories of the final time of each interval. The multicrosstab function needs two more arguments namely time points and categories, both as character vectors. The raster layer list and time points vector must have the years in the same chronological order. The names in the categories vector must be equivalent to the ID of categories in the raster attribute table of the categorical maps.

# character vector of time points.
time.points <- c("2005","2010","2012")

# character vector of land categories.
categories <- c("Water","Trees","Impervious")

# Calling crosstabulation function.
crosstabulation <- multicrosstab(raster.layers, time.points, categories)
crosstabulation
#> [[1]]
#>            Water Trees Impervious
#> Water          2     2          1
#> Trees          0     0          2
#> Impervious     1     1          0
#> 
#> [[2]]
#>            Water Trees Impervious
#> Water          1     1          1
#> Trees          2     1          0
#> Impervious     1     2          0

We now proceed to the three level intensity analysis using crosstabulation tables for each consecutive pair of time points.

Interval level

Interval level analysis shows the size of change and the speed of change during each time interval. Analysis denotes the speed of change during each interval as either slow or fast.

Execution of the IIA function, generates proper graphs that show the “Change Size” and “Change Intensity” for all time intervals.

# Calling IIA(Interval Intensity Analysis) function.
IIA.output <- IIA(crosstabulation, time.points)
#> Coordinate system already present. Adding new coordinate system, which will replace the existing one.

The package also produces numerical output for “Change Size”, “Uniform Intensity of Change”, “Uniform Change all Intervals”, “Interval behavior” for each interval.

#> $Change.Size
#> [1] 7 7
#> 
#> $Uniform.Intensity.of.Change
#> [1] 0.1555556 0.3888889
#> 
#> $Uniform.Change.all.Intervals
#> [1] 0.2222222
#> 
#> $Interval.Behavior
#> $Interval.Behavior[[1]]
#> [1] "Slow"
#> 
#> $Interval.Behavior[[2]]
#> [1] "Fast"

The IIA2csv function reads the output of the IIA function and a filename string as arguments then makes a CSV report of the interval level intensity analysis and saves it in a user specified location. In case only the name of the file is provided, then the csv file will be stored in the working directory.

# Set the filename argument to the directory you want to store the csv results.
filename <- file.path(normalizePath(tempdir(), winslash = "/"), "IIA.csv")
IIA2csv(IIA.output,time.points, filename)

Category level

THe category level computes the size of annual change for each category in the form of its annual gross loss and annual gross gain during each time interval. The package also computes the Annual Loss Intensity by computing the size of each gross annual loss divided by the size of the category at the initial time point of the interval. The package computes the Annual Gain Intensity by computing the size of each gross annual gain divided by the size of the category at the final time point of the interval. Comparing these intensities with uniform change in the study area reveals the land categories that are relatively dormant versus active in terms of loss and gain during a given time interval and provides the means to explore the stability of the pattern across time intervals.

Execution of the CIA function, generates graphs that show the “Annual size” and “Annual intensity” of loss and gain for each category during each time interval. If the input data are raster maps, then # of elements in the figures means the number of pixels.

# Calling CIA(Category Intensity Analysis) function.
CIA.output <- CIA(crosstabulation, time.points, categories)
#> Coordinate system already present. Adding new coordinate system, which will replace the existing one.

#> Coordinate system already present. Adding new coordinate system, which will replace the existing one.

The package returns also numerical values for “Annual Gross Loss”, “Annual Gross Gain”, “Annual Loss Intensity”, “Annual Gain Intensity”, “Uniform Category Intensity”, “Annual Loss Intensity Behavior” and “Annual Gain Intensity Behavior”.

#> $Annual.Gross.Loss
#> $Annual.Gross.Loss[[1]]
#>      Water      Trees Impervious 
#>        0.6        0.4        0.4 
#> 
#> $Annual.Gross.Loss[[2]]
#>      Water      Trees Impervious 
#>        1.0        1.0        1.5 
#> 
#> 
#> $Annual.Gross.Gain
#> $Annual.Gross.Gain[[1]]
#>      Water      Trees Impervious 
#>        0.2        0.6        0.6 
#> 
#> $Annual.Gross.Gain[[2]]
#>      Water      Trees Impervious 
#>        1.5        1.5        0.5 
#> 
#> 
#> $Annual.Loss.Intensity
#> $Annual.Loss.Intensity[[1]]
#>      Water      Trees Impervious 
#>       0.12       0.20       0.20 
#> 
#> $Annual.Loss.Intensity[[2]]
#>      Water      Trees Impervious 
#>  0.3333333  0.3333333  0.5000000 
#> 
#> 
#> $Annual.Gain.Intensity
#> $Annual.Gain.Intensity[[1]]
#>      Water      Trees Impervious 
#> 0.06666667 0.20000000 0.20000000 
#> 
#> $Annual.Gain.Intensity[[2]]
#>      Water      Trees Impervious 
#>      0.375      0.375      0.500 
#> 
#> 
#> $Uniform.Category.Intensity
#> [1] 0.1555556 0.3888889
#> 
#> $Loss.Behavior
#> $Loss.Behavior[[1]]
#>      Water      Trees Impervious 
#>  "Dormant"   "Active"   "Active" 
#> 
#> $Loss.Behavior[[2]]
#>      Water      Trees Impervious 
#>  "Dormant"  "Dormant"   "Active" 
#> 
#> 
#> $Gain.Behavior
#> $Gain.Behavior[[1]]
#>      Water      Trees Impervious 
#>  "Dormant"   "Active"   "Active" 
#> 
#> $Gain.Behavior[[2]]
#>      Water      Trees Impervious 
#>  "Dormant"  "Dormant"   "Active"

The CIA2csv function reads the output of CIA function and a filename string as arguments and makes a CSV report of the category level intensity analysis and saves it in a user specified location. In case only the name of the file is provided, then the csv file will be stored in the working directory.

# Set the filename argument to the directory you want to store the csv results.
filename <- file.path(normalizePath(tempdir(), winslash = "/"), "CIA.csv")
CIA2csv(CIA.output,time.points, categories, filename)

Transition level

The transition level computes the size and intensity of each transition from one category to another category during each time interval. The package produces a pair of graphs for each category’s gross gain. The first graph shows the size of the annual transition. The second figure shows the intensity of the annual transition, which is the size of the annual transition divided by the initial size of the losing category. Comparison of each intensity to its corresponding uniform intensity indicates whether the gaining category avoids or targets each particular losing category. Users can then see whether the patterns are stable across time intervals.

The TIA function, generates graphs to show the “Annual Transition Size” and “Annual Transition Intensity” for gain of each category during each time interval.

# Calling TIA(Transition Intensity Analysis) function.
TIA.output <- TIA(crosstabulation, time.points, categories)
#> Coordinate system already present. Adding new coordinate system, which will replace the existing one.

#> Coordinate system already present. Adding new coordinate system, which will replace the existing one.

#> Coordinate system already present. Adding new coordinate system, which will replace the existing one.

#> Coordinate system already present. Adding new coordinate system, which will replace the existing one.

#> Coordinate system already present. Adding new coordinate system, which will replace the existing one.

#> Coordinate system already present. Adding new coordinate system, which will replace the existing one.

The package produces “Annual Transition Size”, “Transition Intensity”, “Uniform Transition” and “Transition Behavior” for the gross gain of each category during each time interval.

#> $Annual.Transition.Size
#> $Annual.Transition.Size[[1]]
#>            Transition Size for Gain of Category  Water
#> Water                                               NA
#> Trees                                              0.0
#> Impervious                                         0.2
#>            Transition Size for Gain of Category  Trees
#> Water                                              0.4
#> Trees                                               NA
#> Impervious                                         0.2
#>            Transition Size for Gain of Category  Impervious
#> Water                                                   0.2
#> Trees                                                   0.4
#> Impervious                                               NA
#> 
#> $Annual.Transition.Size[[2]]
#>            Transition Size for Gain of Category  Water
#> Water                                               NA
#> Trees                                              1.0
#> Impervious                                         0.5
#>            Transition Size for Gain of Category  Trees
#> Water                                              0.5
#> Trees                                               NA
#> Impervious                                         1.0
#>            Transition Size for Gain of Category  Impervious
#> Water                                                   0.5
#> Trees                                                   0.0
#> Impervious                                               NA
#> 
#> 
#> $Annual.Transition.Intensity
#> $Annual.Transition.Intensity[[1]]
#>            Water Trees Impervious
#> Water         NA  0.08       0.04
#> Trees        0.0    NA       0.20
#> Impervious   0.1  0.10         NA
#> 
#> $Annual.Transition.Intensity[[2]]
#>                Water     Trees Impervious
#> Water             NA 0.1666667  0.1666667
#> Trees      0.3333333        NA  0.0000000
#> Impervious 0.1666667 0.3333333         NA
#> 
#> 
#> $Uniform.Transition
#> $Uniform.Transition[[1]]
#>      Water      Trees Impervious 
#> 0.05000000 0.08571429 0.08571429 
#> 
#> $Uniform.Transition[[2]]
#>      Water      Trees Impervious 
#> 0.25000000 0.25000000 0.08333333 
#> 
#> 
#> $Transition.Behavior.for.Gain
#> $Transition.Behavior.for.Gain[[1]]
#>            Transition Behavior for Gain of Category  Water
#> Water      NA                                             
#> Trees      "Avoid"                                        
#> Impervious "Target"                                       
#>            Transition Behavior for Gain of Category  Trees
#> Water      "Avoid"                                        
#> Trees      NA                                             
#> Impervious "Target"                                       
#>            Transition Behavior for Gain of Category  Impervious
#> Water      "Avoid"                                             
#> Trees      "Target"                                            
#> Impervious NA                                                  
#> 
#> $Transition.Behavior.for.Gain[[2]]
#>            Transition Behavior for Gain of Category  Water
#> Water      NA                                             
#> Trees      "Target"                                       
#> Impervious "Avoid"                                        
#>            Transition Behavior for Gain of Category  Trees
#> Water      "Avoid"                                        
#> Trees      NA                                             
#> Impervious "Target"                                       
#>            Transition Behavior for Gain of Category  Impervious
#> Water      "Target"                                            
#> Trees      "Avoid"                                             
#> Impervious NA

The TIA2csv function reads the output of the TIA function and a filename string as arguments then makes a CSV report of the Transition level Intensity Analysis and saves it in a user specified location. In case only the name of the file is provided, then the csv file will be stored in the working directory.

# Set the filename argument to the directory you want to store the csv results.
filename <- file.path(normalizePath(tempdir(), winslash = "/"), "TIA.csv")
TIA2csv(TIA.output,time.points,categories, filename)

References

Aldwaik,Safaa Zakaria and Robert Gilmore Pontius Jr. (2012). Intensity analysis to unify measurements of size and stationarity of land changes by interval, category, and transition. Landscape and Urban Planning. 106, 103-114.

Pontius Jr, Robert Gilmore, Yan Gao, Nicholas Giner, Takashi Kohyama, Mitsuru Osaki and Kazuyo Hirose. (2013). Design and Interpretation of Intensity Analysis Illustrated by Land Change in Central Kalimantan, Indonesia. Land. 2(3), 351-369.