2 fireSense_dataPrepFit Module

made-with-Markdown

2.0.0.1 Authors:

Ian Eddy [aut, cre], Alex M Chubaty [ctb]

2.1 Module Overview

Prepare data required by fireSense_IginitionFit, fireSense_EscapeFit, and fireSense_SpreadFit modules.

2.1.1 Module summary

This module uses historical fire, vegetation, and climate raster data to generate data used to fit the three processes captured by fireSense (Marchal et al. 2017b, a; 2019): fire ignition, fire escape (the probability that an ignition results in a fire greater than the cell resolution), and fire spread. The landscape data is collected in two snapshots: 2001 and 2011, and the vegetation composition and biomass in these years is assumed to have influenced fires during two periods, from 2002-2011 and 2012-2021, respectively. Unlike the vegetation data, the climate data is assumed to be seasonal or annual, and is matched to the year each fire occurred. The same climate variable(s) must be used to model fire ignition and escape, but can vary for spread.

2.1.1.0.1 Fuel classes:

This module can optionally estimate fuel classes for both forested and non-forested areas. The non-forested mechanism is simpler: it combines landcover classes based on having a similar historical propensity to burn as estimated using a GLM, reducing an arbitrary amount of classes to a target amount (by default, two). For example, bryoids and non-treed wetland might be combined in one class, with shrubland and grassland in another.

The estimation of forested fuel classes is more complex. The module will initially treat each species as a separate fuel class and then attempt to reduce the number of fuel classes to a target amount. It uses a GLM to estimate the relationship between the biomass of each species, where present in pixel, to the likelihood of the likelihood of the pixel burning. For each species, the model fitting data is subset by removing pixels where the species is not present. Additionally, each species will have an a priori fuel class. The default fuel classes are an interpretation of the FBP classes and can be viewed via LandR::sppEquivalencies_CA$FuelClass.

Individual tree species are grouped into fuel classes according to the following logic: first, the abundance of each species is assessed, calculated as the proportion of the landscape where a given species represents more than 10% of the biomass in a pixel. “Rare” species (those with abundance < 5%) are combined if another species is present with the same fuel class. If there are two or more options, they are grouped in order of abundance, from least to most. It is possible the resulting number of fuel classes will be fewer than the target amount if multiple species were “rare”. If the resulting number of unique fuel classes is greater than the target amount, the next least abundant species will be combined. However, for non-rare species to be combined, they must also have the same coefficient sign, or a non-significant sign. If there are more than one species with a similar fuel class and coefficient sign, they are grouped based on abundance, from least to most. By default, the module will aim for five forested fuel classes, two non-forested fuel classes, and youngAge (described below), for a total of eight.

::: {.example #of semi-automated fuel classes} 7 species were initially present on the landscape; 2 must be combined to achieve the target 5 in this case, Betu_pap and Popu_tre were combined due to their low abundance (above10PctRelB) Pice_gla and Pice_eng were combined due as Abie_las was the most abundant. Pice_mar and Pinu_con were not combined as there were no other species with similar FuelClass values

species coef sign FuelClass Abundance newFuelClass
Pice_mar -0.01320 negative BlkSprc 0.066 Pice_mar
Pinu_con 0.00154 positive LdJkPine 0.625 Pinu_con
Betu_pap -0.00170 negative PopBrch 0.051 Bt_pa.Pp_tr
Pice_eng -0.01910 negative SprcFrLrch 0.095 Pc_en.Pc_gl
Popu_tre -0.02100 negative PopBrch 0.223 Bt_pa.Pp_tr
Pice_gla -0.00920 negative SprcFrLrch 0.352 Pc_en.Pc_gl
Abie_las -0.00630 negative SprcFrLrch 0.560 Abie_las

:::

2.1.1.0.2 Special cases: youngAge, missingLCC, and treed wetland

fireSense uses a youngAge class to distinguish areas that have recently burned (by default within the past 15 years), and updates the landscape snapshots accordingly. For example, if a conifer pixel burned in 2009, subsequent observations of the same pixel are converted to youngAge, with prior observations unchanged. Additionally, the 2011-2011 landscape snapshot is adjusted to ensure areas are correctly classified if they burned prior to 2001 within the period relevant to the youngAge class. By default, both forested and non-forested classes will convert to youngAge following fire, however a user can disable this behaviour in the latter class via the parameter nonForestCanBeYoungAge.

A related consideration is whether treed wetland (a land cover class in the NTEMS land cover product used by default) should be treated as a variant of forested landcover or non-forest cover. This decision determines whether the biomass of the tree species in treed wetland is included as a covariate in the fireSense models, the same as non-wetland forest species, or whether treed wetland is instead considered as a land cover class, similar to shrubland and grassland, for example. If wetland tree species are distinct from non-wetland species, then the decision may have less consequence. The object nonForestedLCCGroups takes precedence when determining fuel classes; if the land cover value for non-treed wetland is included here, then it will be counted as non-forest regardless of whether it appears the parameter forestedLCCclasses. This approach allows treed wetland to be simulated in forest simulation models (i.e., with LandR) without it being explicitly treated as forest in fireSense. If treed wetland is absent from both nonForestedLCCGroups and forestedLCCclasses, then it is considered non-flammable land cover, as with any other land cover class.

If fireSense_dataPrepFit is to estimate fuel classes, it will also do so for a special class termed missingLCC. This class encompasses pixels that have a forested land cover class but are absent in the objects cohortData2011 and cohortData2001. The most frequent reason for the exclusion of forest pixels in LandR is that there was no tree species data for the pixel. Therefore, with no available species biomass, these pixels are treated as non-forest land cover, and must be assigned to one of the groups in nonForestedLCCGroups.

Finally, for fuel classes that are modelled with biomass instead of presence/absence, the log of biomass is used, after converting all instances of zero biomass for a fuelclass to one log below the minimum observed level (by default, 100 $g/m2).

2.1.2 Module inputs and parameters

Table 2.1 shows the full list of module inputs.

Table 2.1: Table 2.2: List of (ref:fireSense_dataPrepFit) input objects and their description.
objectName objectClass desc sourceURL
climateVariablesForFire list A list detailing which climate variables in sim$historicalClimateRasters to use for which fire processes (ignition and spread). If the list is length one, both processes will use the same variables. The default is to use ‘MDC’. NA
cohortData2001 data.table Table that defines the cohorts by pixelGroup in 2001 NA
cohortData2011 data.table Table that defines the cohorts by pixelGroup in 2011 NA
spreadFirePoints list named list of spatial points for each fire year with each point denoting an ignition location. NA
firePolys list List of sf polygon objects representing annual fire polygons.List must be named with followign convention: year&lt;numeric year&gt; NA
firePolysForAge list list of fire polygons used to classify timeSinceDisturbance in nonforest LCC NA
historicalFireRaster SpatRaster a raster with values representing fire year 1985-2020 https://opendata.nfis.org/downloads/forest_change/CA_Forest_Fire_1985-2020.zip
historicalClimateRasters list length-one list of containing a raster stack of historical climate list named after the variable and raster layers named as year&lt;numeric year&gt; NA
ignitionFirePoints sf list of sf polygon objects representing annual ignition locations. This includes all fires regardless of size. It should have the same CRS as sim$rasterToMatch NA
missingLCCgroup character NA if a pixel is forested but is absent from cohortData, it will be grouped in this class. It can be estimated if P(sim)$estimateFuelClasses is TRUE. If supplied, it must be one of the names in sim$nonForestedLCCGroups
nonForestedLCCGroups list a named list of non-forested landcover groups, e.g. list(‘wetland’ = c(19, 23, 32)) These will become fuel covariates, and the groups will be estimated if P(sim)$estimateFuelClasses is TRUE NA
pixelGroupMap2001 SpatRaster defines the pixelGroups for cohortData table in 2001 NA
pixelGroupMap2011 SpatRaster defines the pixelGroups for cohortData table in 2011 NA
rasterToMatch SpatRaster template raster for study area. Assumes some buffering of core area to limit edge effect of fire. NA
rstLCC2001 SpatRaster Raster of land cover - will use Biomass_borealDataPrep to generate if missing. NA
rstLCC2011 SpatRaster Raster of land cover - will use Biomass_borealDataPrep to generate if missing. NA
sppEquiv data.table table of LandR species equivalencies NA
standAgeMap2001 SpatRaster map of stand age in 2001 used to create cohortData2001 NA
standAgeMap2011 SpatRaster map of stand age in 2011 used to create cohortData2011 NA
studyArea sf study area that determines spatial boundaries of all data. Should be buffered to accomodate edge effects NA
studyAreaReporting sf (optional) study area used for reporting purposes, specifically whether fires inside the studyAreaReporting polygon are being removed for also falling partially outside the studyArea polygon, indicating the buffered studyArea shoudl be expanded. NA

Provide a summary of user-visible parameters (Table 2.3)

Table 2.3: Table 2.4: List of fireSense_dataPrepFit parameters and their description.
paramName paramClass default min max paramDesc
areaMultiplier numeric,…. ::, fire…. NA NA Either a scalar that will buffer areaMultiplier fireSize or a quoted function of fireSize. See ?fireSenseUtils::bufferToArea.
bufferForFireRaster numeric 1000 0 NA The distance that determine whether separate patches of burned pixels originated from the same fire. Only relevant when useRasterizedFireForSpread = TRUE. This param is separate from minBufferSize, which is used to determine the minimum sample of burned and unburned pixels to include in each fire.
cutoffForYoungAge numeric 15 NA NA Age at and below which pixels are considered ‘young’ (young &lt;- age &lt;= cutoffForYoungAge)
estimateFuelClasses logical TRUE NA NA estimate fuel classes from combination of data and P(sim)\(fuelClassCol? </td> </tr> <tr> <td style="text-align:left;"> fireYears </td> <td style="text-align:left;"> integer </td> <td style="text-align:left;"> 2002, 20.... </td> <td style="text-align:left;"> NA </td> <td style="text-align:left;"> NA </td> <td style="text-align:left;"> A numeric vector indicating which years should be extracted from the fire databases to use for fitting. Should not include years prior to 2002, to ensure correct intialization from data. </td> </tr> <tr> <td style="text-align:left;"> forestedLCC </td> <td style="text-align:left;"> numeric </td> <td style="text-align:left;"> 81, 210,.... </td> <td style="text-align:left;"> NA </td> <td style="text-align:left;"> NA </td> <td style="text-align:left;"> Forested land cover classes - these differ from non-forest because the biomass and composition of fuels are taken into account by fireSense, while non-forest classes are treated categorically </td> </tr> <tr> <td style="text-align:left;"> igAggFactor </td> <td style="text-align:left;"> numeric </td> <td style="text-align:left;"> 40 </td> <td style="text-align:left;"> 1 </td> <td style="text-align:left;"> NA </td> <td style="text-align:left;"> aggregation factor for rasters during ignition prep. </td> </tr> <tr> <td style="text-align:left;"> fuelClassCol </td> <td style="text-align:left;"> character </td> <td style="text-align:left;"> FuelClass </td> <td style="text-align:left;"> NA </td> <td style="text-align:left;"> NA </td> <td style="text-align:left;"> the column in `sppEquiv` that defines unique fuel classes. A column named `FuelClass` exists in the `LandR::sppEquivalencies_CA` and will be used by default. To change the `FuelClass` classifications, add a column to that table, or to `sim\)sppEquivand then modify thisfuelClassColparameter </td> </tr> <tr> <td style="text-align:left;"> minBufferSize </td> <td style="text-align:left;"> numeric </td> <td style="text-align:left;"> 5000 </td> <td style="text-align:left;"> NA </td> <td style="text-align:left;"> NA </td> <td style="text-align:left;"> Minimum number of cells in buffer and nonbuffer. This is imposed after the multiplier on thebufferToAreafn </td> </tr> <tr> <td style="text-align:left;"> nonflammableLCC </td> <td style="text-align:left;"> numeric </td> <td style="text-align:left;"> 20, 31, .... </td> <td style="text-align:left;"> NA </td> <td style="text-align:left;"> NA </td> <td style="text-align:left;"> non-flammable LCC in rstLCC layers - defaulting to water, snow/ice, rock, barren land. </td> </tr> <tr> <td style="text-align:left;"> nonForestCanBeYoungAge </td> <td style="text-align:left;"> logical </td> <td style="text-align:left;"> TRUE </td> <td style="text-align:left;"> NA </td> <td style="text-align:left;"> NA </td> <td style="text-align:left;"> if TRUE, burned non-forest will be treated asyoungAge. Recommended to be TRUE as burned forest is often classified as non-forest </td> </tr> <tr> <td style="text-align:left;"> sppEquivCol </td> <td style="text-align:left;"> character </td> <td style="text-align:left;"> LandR </td> <td style="text-align:left;"> NA </td> <td style="text-align:left;"> NA </td> <td style="text-align:left;"> column name insppEquivobject that defines unique species incohortData</td> </tr> <tr> <td style="text-align:left;"> targetFuelClasses </td> <td style="text-align:left;"> numeric </td> <td style="text-align:left;"> 5 </td> <td style="text-align:left;"> 1 </td> <td style="text-align:left;"> 7 </td> <td style="text-align:left;"> the target number of unique fuel classes when using semi-automated approach </td> </tr> <tr> <td style="text-align:left;"> useCentroids </td> <td style="text-align:left;"> logical </td> <td style="text-align:left;"> TRUE </td> <td style="text-align:left;"> NA </td> <td style="text-align:left;"> NA </td> <td style="text-align:left;"> Should fire ignitions start at thesim\(firePolygons` centroids or at the ignition points in `sim\)firePoints? </td> </tr> <tr> <td style="text-align:left;"> useRasterizedFireForSpread </td> <td style="text-align:left;"> logical </td> <td style="text-align:left;"> FALSE </td> <td style="text-align:left;"> NA </td> <td style="text-align:left;"> NA </td> <td style="text-align:left;"> Should rasterized fire be used in place of a vectorized fire dataset? This method attributes burned pixels to specific fires, only examines the latest fire in a pixel, and may be subject to temporal error. is therefore more appropriate in areas with low rates of fire, or where the NFDB dataset may be incomplete (e.g., northern Ontario). </td> </tr> <tr> <td style="text-align:left;"> whichModulesToPrepare </td> <td style="text-align:left;"> character </td> <td style="text-align:left;"> fireSens.... </td> <td style="text-align:left;"> NA </td> <td style="text-align:left;"> NA </td> <td style="text-align:left;"> Which fireSense fit modules to prep? defaults to all 3 </td> </tr> <tr> <td style="text-align:left;"> .plotInitialTime </td> <td style="text-align:left;"> numeric </td> <td style="text-align:left;"> NA </td> <td style="text-align:left;"> NA </td> <td style="text-align:left;"> NA </td> <td style="text-align:left;"> Describes the simulation time at which the first plot event should occur. </td> </tr> <tr> <td style="text-align:left;"> .plotInterval </td> <td style="text-align:left;"> numeric </td> <td style="text-align:left;"> NA </td> <td style="text-align:left;"> NA </td> <td style="text-align:left;"> NA </td> <td style="text-align:left;"> Describes the simulation time interval between plot events. </td> </tr> <tr> <td style="text-align:left;"> .saveInitialTime </td> <td style="text-align:left;"> numeric </td> <td style="text-align:left;"> NA </td> <td style="text-align:left;"> NA </td> <td style="text-align:left;"> NA </td> <td style="text-align:left;"> Describes the simulation time at which the first save event should occur. </td> </tr> <tr> <td style="text-align:left;"> .saveInterval </td> <td style="text-align:left;"> numeric </td> <td style="text-align:left;"> NA </td> <td style="text-align:left;"> NA </td> <td style="text-align:left;"> NA </td> <td style="text-align:left;"> This describes the simulation time interval between save events. </td> </tr> <tr> <td style="text-align:left;"> .studyAreaName </td> <td style="text-align:left;"> character </td> <td style="text-align:left;"> </td> <td style="text-align:left;"> NA </td> <td style="text-align:left;"> NA </td> <td style="text-align:left;">studyArea` name that will be appended to file-backed rasters
.useCache logical FALSE NA NA Should this entire module be run with caching activated? This is intended for data-type modules, where stochasticity and time are not relevant

2.1.3 Events

2.1.3.0.1 init

During this event, objects are created and prepared if they are used by all three fire processes, such as the flammableMap, landcoverDT, and nonForest_timeSinceDisturbance for each fire period. This is also when fuel class estimation occurs.

2.1.3.0.2 prepIgnitionFitData

This event prepares ignition data. The pixels of the individual landscape snapshots of 2002-2011 and 2012-2020 are converted to voxels by aggregating the fuel class rasters according to the parameter P(sim)$igAggFactor and calculating the mean cover or biomass within. Ignitions are summed within voxels for every year, such that the data will ultimately contain one row for each voxel and year, with the number of ignitions, the mean annual climate within that voxel, and the mean amount of each fuel class (whether biomass or cover) as additional columns. Because the probability estimates of the fitted model can only be interpreted at the resolution of the fitted data, a template form of the aggregated raster is output as sim$ignitionFitRTM, and contains the attribute nonNAs, the number of pixels in the aggregated raster with non-NA data.

2.1.3.0.3 prepEscapeFitData

This rather simple event adds an “escapes” column to the data table prepared by prepIgnitionFitData, where an escape is an ignition that resulted in a fire greater than the resolution of the flammableMap raster (which is not the area of the voxel). It also builds the formula object if it hasn’t been supplied, and performs some minor data quality control (e.g., ensuring that fire escapes do not outnumber ignitions in any voxel).

2.1.3.0.4 prepSpreadFitData

The data used to fit the fire spread model differs from that of ignition and escape in several ways. First, the Fire Spread data includes fires with anthropogenic origins, whereas by default the Ignition dataset only includes those of natural origin. Second, it utilizes a spatial subset of the landscape by buffering the fire polygons and extracting the climate and landscape data within. This massively reduces the spread dataset by removing pixels that are of no interest to the model calibration, i.e., due to lack of observed fires. The size of the buffer is dependent upon the parameter P(sim)$areaMultiplier.

Second, each fire must contain a corresponding point of ignition that is located inside the fire polygon in a flammable pixel. This object is called spreadFirePoints to differentiate it from the similar object used by the Ignition process. The latter is different in that it contains fires of all sizes (i.e., smaller than the resolution of sim$rasterToMatch), does not have a corresponding polygon object, and is limited to fires of natural origin. If spreadFirePoints is not supplied, the default behaviour is to calculate it from the centroids of the Fire Spread data and select the nearest flammable pixel inside the fire polygon in the event the centroid does not satisfy both of these criteria.

Lastly, the youngAge category is calculated for each year individually. For example, by default if in 2001 a pixel was estimated as 12 years removed from the last disturbance in 2001, if the same pixel fell inside a fire buffer from 2006, it would no longer be youngAge, as 12 + (2006-2001) would exceed the parameter P(sim)$youngeAgeThreshold. Similar adjustments are made for pixels that were initially non-youngAge, burned in an earlier year, and then re-appear in the buffer of later fires. By contrast, the Ignition Fire data does not annually resolve the `youngAge class.

As in prepareIgnitionFit and prepareEscapeFit, the model formula object will be created if it hasn’t been supplied by a user. Lastly, to reduce object size to a bare minimum for the sake of the lengthy optimization procedure employed in spreadFit, the data is organized into the annually-varying and non-annual components. The former include the climate variables and youngAge class, and are organized into a list of data.tables, named by year, containing the aforementioned covariates, whether the pixel was burned or in the buffer, the fire ID to which it belongs, and the year of the fire. The non-annual components are sorted into a list of two data.tables, one for each fire period, the names of which include every year (e.g sim$nonAnnual_SpreadFitCovariates$Year2001_Year2002_Year2003...).

2.1.4 Module outputs

Description of the module outputs (Table 2.5).

Table 2.5: Table 2.6: List of fireSense_dataPrepFit outputs and their description.
objectName objectClass desc
fireBufferedListDT list list of data.tables with fire id, pixelID, and buffer status
fuelClassTable data.table table with assigned fuel class of each tree species, after running assessFuelClasses
spreadFirePolys list list of sf polygon objects representing annual fires
fireSense_annualSpreadFitCovariates list list of tables with climate covariates, youngAge, burn status, polyID, and pixelID
fireSense_escapeCovariates data.table ignition covariates with added column of escapes
fireSense_escapeFormula character formula for escape, using fuel classes and landcover, as character
fireSense_ignitionCovariates data.table table of aggregated ignition covariates with annual ignitions
fireSense_ignitionFormula character formula for ignition, using climate and vegetation covariates, as character
fireSense_nonAnnualSpreadFitCovariates list list of two tables with vegetation covariates, burn status, polyID, and pixelID
fireSense_spreadFormula character formula for spread, using climate and vegetation covariates, as character
ignitionFitRTM SpatRaster A (template) raster with information with regards to the spatial resolution and geographical extent of fireSense_ignitionCovariates. Used to pass this information onto fireSense_ignitionFitted Needs to have number of non-NA cells as attribute (attributes(ignitionFitRTM)$nonNAs).
landcoverDT2001 data.table data.table with pixelID and relevant landcover classes for flammable pixels in 2001
landcoverDT2011 data.table data.table with pixelID and relevant landcover classes for flammable pixels in 2011
missingLCCgroup character if estimating fuel classes, the nonforest class to assign forested pixels absent from sim$cohortData
nonForestedLCCgroups list a named list of non-forested landcover groups forming distinct fuel classes e.g. list(‘wetland’ = c(19, 23, 32))
nonForest_timeSinceDisturbance2001 SpatRaster time since burn for non-forested pixels in 2001
nonForest_timeSinceDisturbance2011 SpatRaster time since burn for non-forested pixels in 2011
flammableRTM2001 SpatRaster binary raster of flammable landcover for 2001
flammableRTM2011 SpatRaster binary raster of flammable landcover for 2011
spreadFirePoints list Named list of sf polygon objects representing annual fire centroids. This only includes fires that escaped (e.g. size &gt; res(flammableRTM).

2.1.6 Getting help

Contact the authors for help.

https://github.com/PredictiveEcology/fireSense_dataPrepFit/issues

2.2 References