`climateStability`

is a small set of `R`

-based
tools for generating climate stability estimates based on time slices of
climate data.

First, you give the `deviationThroughTime`

function the
location of a folder containing time slice data (as ASCII rasters) for a
single variable, such as that produced by PaleoView (Fordham, *et
al*. 2017, Ecography), and the time elapsed *between slices*.
It will calculate the average standard deviation over time for each
cell. Note that `deviationThroughTime`

will use *all*
the raster files in the given folder in order, so be careful that it
only contains the files from which you want to calculate stability. You
may want to also verify that `R`

loads the files in the
correct order. That is, verify that your files are named in such a way
that they are in order when read in.

The function accommodates datasets with even temporal intervals, as well as uneven intervals. First, here is an example with a dataset in which 1,000 years has elapsed between each raster layer.

```
# deviationThroughTime using even time slices
<- deviationThroughTime(variableDirectory = "inst/extdata/precipfiles/",
precipDeviation timeSlicePeriod = 1000)
<- deviationThroughTime(variableDirectory = "inst/extdata/tempfiles/",
temperatureDeviation timeSlicePeriod = 1000)
```

Here is an example with a dataset for which there are uneven time
intervals between rasters (every 1,000 years between 1kybp to 5 kybp,
and then rasters for 10kybp, 15kybp, and 21kybp). In this case,
`timeSlicePeriod`

can take a vector specifying the time
elapsed between slices. NOTE: make sure the time interval vector is in
the *same order* as your time slices. There should be one fewer
`timeSlicePeriod`

items than the number of climate slice
files.

```
# deviationThroughTime using uneven time slices
<- deviationThroughTime(variableDirectory = "inst/extdata/precipfilesUneven/",
unevenPrecipDeviation timeSlicePeriod = c(1000, 1000, 1000, 1000, 5000, 5000, 6000))
<- deviationThroughTime(variableDirectory = "inst/extdata/tempfilesUneven/",
unevenTemperatureDeviation timeSlicePeriod = c(1000, 1000, 1000, 1000, 5000, 5000, 6000))
```

You have been provided with two pre-calculated deviation-through-time
estimates from Owens and Guralnick. Submitted, Biodiversity Informatics.
These were calculated from 100-year climate means for 20 1,000-year time
slices from 21 kbp to 1 kbp using data from the TRaCE 21k climate
experiment, run in the CCSM 3.0 climate model. These layers will be used
to illustrate the remaining `climateStability`

package
functions.

Letâ€™s load them into the `R`

environment.

`<- terra::rast(system.file("inst/extdata/precipDeviation.asc", package = "climateStability")) precipDeviation `

`## Error: [rast] filename is empty. Provide a valid filename`

`<- terra::rast(system.file("inst/extdata/temperatureDeviation.asc", package = "climateStability")) temperatureDeviation `

`## Error: [rast] filename is empty. Provide a valid filename`

The next step is scaling the deviation through time estimate from 0 to 1, and then take the inverse of the result. This how you estimate stability for a given climate variable, per Owens and Guralnick, 2019. Biodiversity Informatics.

`<- stabilityCalc(precipDeviation) precipStability `

`## Error in is(rasterForCalculation, "SpatRaster"): object 'precipDeviation' not found`

`<- stabilityCalc(temperatureDeviation) tempStability `

`## Error in is(rasterForCalculation, "SpatRaster"): object 'temperatureDeviation' not found`

Finally, to estimate climatic stability, multiply the individual climate variable stability estimates together.

`<- rescale0to1(precipStability * tempStability) climateStability `

`## Error in is(rasterForCalculation, "SpatRaster"): object 'precipStability' not found`

These data can be visualized either as rasters or as line graphs showing the relationship between latitude and stability.

This is what climate the stability rasters look like.

`plot(precipStability, main = "Relative Precipitation Stability")`

`## Error in h(simpleError(msg, call)): error in evaluating the argument 'x' in selecting a method for function 'plot': object 'precipStability' not found`

`plot(rangeBuilder::gshhs, add = T)`

`## Error in polypath(x = mcrds[, 1], y = mcrds[, 2], border = border, col = col, : plot.new has not been called yet`

`plot(tempStability, main = "Relative Temperature Stability")`

`## Error in h(simpleError(msg, call)): error in evaluating the argument 'x' in selecting a method for function 'plot': object 'tempStability' not found`

`plot(rangeBuilder::gshhs, add = T)`

`## Error in polypath(x = mcrds[, 1], y = mcrds[, 2], border = border, col = col, : plot.new has not been called yet`

`plot(climateStability, main = "Overall Relative Climate Stability")`

`## Error in h(simpleError(msg, call)): error in evaluating the argument 'x' in selecting a method for function 'plot': object 'climateStability' not found`

`plot(rangeBuilder::gshhs, add = T)`

`## Error in polypath(x = mcrds[, 1], y = mcrds[, 2], border = border, col = col, : plot.new has not been called yet`

The `climateStability`

package comes with a useful tool
for calculating mean stability per line of latitude,
`latitudinalMean`

. This can then be used to plot climate
stability for a given variable as a response to latitude.

```
#Calculate mean values at rasters
plot(latitudinalMean(precipStability), main = "Precipitation Stability by Latitude",
ylab = "Relative Stability", type = "l")
```

`## Error in h(simpleError(msg, call)): error in evaluating the argument 'x' in selecting a method for function 'plot': object 'precipStability' not found`

```
plot(latitudinalMean(tempStability), main = "Temperature Stability by Latitude",
ylab = "Relative Stability", type = "l")
```

`## Error in h(simpleError(msg, call)): error in evaluating the argument 'x' in selecting a method for function 'plot': object 'tempStability' not found`

```
plot(latitudinalMean(climateStability), main = "Climate Stability by Latitude",
ylab = "Relative Stability", type = "l")
```

`## Error in h(simpleError(msg, call)): error in evaluating the argument 'x' in selecting a method for function 'plot': object 'climateStability' not found`

Additionally, `climateStability`

can calculate mean
stability versus the absolute value of the latitudinal mean using the
function `absLatitudinalMean`

.

```
#Calculate mean values at rasters
plot(absLatitudinalMean(precipStability), main = "Precipitation Stability by Absolute Latitude",
ylab = "Relative Stability", type = "l")
```

`## Error in h(simpleError(msg, call)): error in evaluating the argument 'x' in selecting a method for function 'plot': object 'precipStability' not found`

```
plot(absLatitudinalMean(tempStability), main = "Temperature Stability by Absolute Latitude",
ylab = "Relative Stability", type = "l")
```

`## Error in h(simpleError(msg, call)): error in evaluating the argument 'x' in selecting a method for function 'plot': object 'tempStability' not found`

```
plot(absLatitudinalMean(climateStability), main = "Climate Stability by Absolute Latitude",
ylab = "Relative Stability", type = "l")
```

`## Error in h(simpleError(msg, call)): error in evaluating the argument 'x' in selecting a method for function 'plot': object 'climateStability' not found`