Science Score: 49.0%

This score indicates how likely this project is to be science-related based on various indicators:

  • CITATION.cff file
  • codemeta.json file
    Found codemeta.json file
  • .zenodo.json file
    Found .zenodo.json file
  • DOI references
    Found 4 DOI reference(s) in README
  • Academic publication links
  • Committers with academic emails
    3 of 9 committers (33.3%) from academic institutions
  • Institutional organization owner
  • JOSS paper metadata
  • Scientific vocabulary similarity
    Low similarity (20.1%) to scientific vocabulary

Keywords

compute-estimates fia fia-database fia-datamart forest-inventory forest-variables inventories r space-time spatial
Last synced: 6 months ago · JSON representation

Repository

rFIA

Basic Info
  • Host: GitHub
  • Owner: doserjef
  • Language: R
  • Default Branch: master
  • Homepage:
  • Size: 106 MB
Statistics
  • Stars: 54
  • Watchers: 10
  • Forks: 24
  • Open Issues: 9
  • Releases: 0
Topics
compute-estimates fia fia-database fia-datamart forest-inventory forest-variables inventories r space-time spatial
Created over 6 years ago · Last pushed 7 months ago
Metadata Files
Readme Changelog

README.Rmd

---
output: github_document
---



```{r, include=FALSE, echo=FALSE,message=FALSE}
knitr::opts_chunk$set(
  collapse = TRUE,
  comment = "#>",
  fig.path = "man/figures/README-",
  out.width = "100%")
```
# rFIA: Unlocking the FIA Database in R 

[![CRAN](https://www.r-pkg.org/badges/version/rFIA)](https://CRAN.R-project.org/package=rFIA)
[![Codecov test coverage](https://codecov.io/gh/doserjef/rFIA-deleted/branch/master/graph/badge.svg)](https://app.codecov.io/gh/doserjef/rFIA-deleted?branch=master)

## Overview

The goal of `rFIA` is to increase the accessibility and use of the USFS Forest Inventory and Analysis (FIA) Database by providing a user-friendly, open source platform to easily query and analyze FIA Data. Designed to accommodate a wide range of potential user objectives, `rFIA` simplifies the estimation of forest variables from the FIA Database and allows all R users (experts and newcomers alike) to unlock the flexibility and potential inherent to the Enhanced FIA design.

Specifically, `rFIA` improves accessibility to the spatio-temporal estimation capacity of the FIA Database by producing space-time indexed summaries of forest variables within user-defined population boundaries. Direct integration with other popular R packages (e.g., dplyr, sp, and sf) facilitates efficient space-time query and data summary, and supports common data representations and API design. The package implements design-based estimation procedures outlined by Bechtold & Patterson (2005), and has been validated against estimates and sampling errors produced by EVALIDator. 

For more information and example usage of `rFIA`, check out the numerous vignettes and example use cases in the [Articles](https://doserlab.com/files/rFIA/articles/) page on our website. To report a bug or suggest additions to `rFIA`, please use our [active issues](https://github.com/doserjef/rFIA/issues) page on GitHub, or contact [Jeff Doser](https://doserlab.com/) (maintainer). 

_**To cite**_ `rFIA`, please refer to the publication in [Environmental Modeling and Software](https://doi.org/10.1016/j.envsoft.2020.104664) (doi: https://doi.org/10.1016/j.envsoft.2020.104664).

## Functionality

|`rFIA` Function  | Description                                                          |
|---------------- |----------------------------------------------------------------------|
|`area()`         | Estimate land area in various classes                                |
|`areaChange()`   | Estimate annual change in land area in various classes               |
|`biomass()`      | Estimate biomass and carbon stocks of standing trees                 |
|`carbon()`       | Estimate carbon stocks by IPCC forest carbon pools                   |
|`customPSE()`    | Estimate custom variables                                            |
|`clipFIA()`      | Spatial & temporal queries for FIA data                              |
|`diversity()`    | Estimate diversity indices (e.g. species diversity)                  |
|`dwm()`          | Estimate volume, biomass, and carbon stocks of down woody material   |
|`fsi()`          | Estimate forest stability index for live tree populations            |
|`getDesignInfo()`| Summarize attributes of FIA's post-stratified inventories            |
|`getFIA()`       | Download FIA data, load into R, and optionally save to disk          |
|`growMort()`     | Estimate recruitment, mortality, and harvest rates                   |
|`intersectFIA()` | Join attributes of a spatial polygon(s) to FIA's PLOT table          |
|`invasive()`     | Estimate areal coverage of invasive species                          |
|`plotFIA()`      | Produce static & animated plots of FIA summaries                     |
|`readFIA()`      | Load FIA database into R environment from disk                       |
|`seedling()`     | Estimate seedling abundance (TPA)                                    |
|`standStruct()`  | Estimate forest structural stage distributions                       |
|`tpa()`          | Estimate abundance of standing trees (TPA & BAA)                     |
|`vitalRates()`   | Estimate live tree growth rates                                      |
|`volume()`       | Estimate merchantable volume of standing trees                       |
|`writeFIA()`     | Write in-memory FIA Database to disk                                 |

## Installation

You can install the released version of `rFIA` from [CRAN](https://CRAN.R-project.org) with:

```{r, eval = FALSE}
install.packages("rFIA")
```

Currently, you can install the development version from GitHub:

```{r, eval = FALSE}
devtools::install_github('doserjef/rFIA')
```

## Example Usage

### _Download FIA Data and Load into R_

The first step to using `rFIA` is to download subsets of the FIA Database. The easiest way to accomplish this is using `getFIA()`. Using one line of code, you can download state subsets of the FIA Database, load data into your R environment, and optionally save those data to a local directory for future use!

```{r eval = FALSE}
# Download the state FIA data from Connecticut (requires an internet connection)
# All data acquired from FIA Datamart: https://apps.fs.usda.gov/fia/datamart/datamart.html
ct <- getFIA(states = 'CT', dir = '/path/to/save/data')
```

By default, `getFIA()` only loads the portions of the database required to produce summaries with other `rFIA` functions (`common = TRUE`). This conserves memory on your machine and speeds download time. If you would like to download all available tables for a state, simple specify `common = FALSE` in the call to `getFIA()`.

**But what if I want to load multiple states worth of FIA data into R?** No problem! Simply specify multiple state abbreviations in the `states` argument of `getFIA()` (e.g. `states = c('MI', 'IN', 'WI', 'IL'`)), and all state subsets will be downloaded and merged into a single `FIA.Database` object. This will allow you to use other `rFIA()` functions to produce estimates within polygons which straddle state boundaries!

Note: given the massive size of the full FIA Database, users are cautioned to only download the subsets containing their region of interest.

**If you have previously downloaded FIA data and would simply like to load the data into R from a local directory, use `readFIA()`:**
```{r eval = FALSE}
# Load FIA Data from a local directory
db <- readFIA('/path/to/your/directory/')
```

----

### _Compute Estimates of Forest Variables_

Now that you have loaded your FIA data into R, it's time to put it to work. Let's explore the basic functionality of `rFIA` with `tpa()`, a function to compute tree abundance estimates (trees per acre (TPA) and basal area per acre (BAA)) from FIA data, and `fiaRI`, a subset of the FIA Database for Rhode Island including inventories from 2013-2018. 

**Estimate the abundance of live trees in Rhode Island:**
```{r warning= FALSE, message=FALSE, fig.width = .5, fig.height=.5}
library(rFIA)
# Load the Rhode Island subset of the FIADB (included w/ rFIA)
# NOTE: This object can be produced using getFIA and/or readFIA
data("fiaRI")

# Only estimates for the most recent inventory year
fiaRI_MR <- clipFIA(fiaRI, mostRecent = TRUE) 
tpaRI_MR <- tpa(fiaRI_MR)
head(tpaRI_MR)

# All Inventory Years Available (i.e., returns a time series)
tpaRI <- tpa(fiaRI)
head(tpaRI)
```

**What if I want to group estimates by species? How about by size class?**
```{r warning= FALSE, message=FALSE, height=4.5}
# Group estimates by species
tpaRI_species <- tpa(fiaRI_MR, bySpecies = TRUE)
head(tpaRI_species, n = 3)

# Group estimates by size class
# NOTE: Default 2-inch size classes, but you can make your own using makeClasses()
tpaRI_sizeClass <- tpa(fiaRI_MR, bySizeClass = TRUE)
head(tpaRI_sizeClass, n = 3)

# Group by species and size class, and plot the distribution 
# for the most recent inventory year
tpaRI_spsc <- tpa(fiaRI_MR, bySpecies = TRUE, bySizeClass = TRUE)
plotFIA(tpaRI_spsc, BAA, grp = COMMON_NAME, x = sizeClass,
        plot.title = 'Size-class distributions of BAA by species', 
        x.lab = 'Size Class (inches)', text.size = .75,
        n.max = 5) # Only want the top 5 species, try n.max = -5 for bottom 5

```

**What if I want estimates for a specific type of tree (ex. greater than 12-inches DBH and in a canopy dominant or subdominant position) in a specific area (ex. growing on mesic sites), and I want to group my estimates by some variable other than species or size class (ex. ownership group)?** 

Easy! Each of these specifications are described in the FIA Database, and all `rFIA` functions can leverage these data to easily implement complex queries!

``` {r warning = FALSE, message = FALSE}
# grpBy specifies what to group estimates by (just like species and size class above)
# treeDomain describes the trees of interest, in terms of FIA variables 
# areaDomain, just like above, describes the land area of interest
tpaRI_own <- tpa(fiaRI_MR, 
                     grpBy = OWNGRPCD, 
                     treeDomain = DIA > 12 & CCLCD %in% c(1,2),
                     areaDomain = PHYSCLCD %in% c(20:29))
head(tpaRI_own)
```

**What if I want to produce estimates within my own population boundaries (within user-defined spatial zones/polygons)?** 

This is where things get really exciting. 
``` {r warning = FALSE, message = FALSE}
# Load the county boundaries for Rhode Island. You can load your own spatial 
# data using functions in sf
data('countiesRI')

# polys specifies the polygons (zones) where you are interested in producing estimates.
# returnSpatial = TRUE indicates that the resulting estimates will be joined with the 
# polygons we specified, thus allowing us to visualize the estimates across space
tpaRI_counties <- tpa(fiaRI_MR, polys = countiesRI, returnSpatial = TRUE)

plotFIA(tpaRI_counties, BAA) # Plotting method for spatial FIA summaries, also try 'TPA' or 'TPA_PERC'
```

**We produced a really cool time series earlier, how would I marry the spatial and temporal capacity of `rFIA` to produce estimates across user-defined polygons and through time?** 

Easy! Just hand `tpa()` the full FIA.Database object you produced with `readFIA()` (not the most recent subset produced with `clipFIA()`). For stunning space-time visualizations, hand the output of `tpa()` to `plotFIA()`. To save the animation as a .gif file, simpy specify `fileName` (name of output file) and `savePath` (directory to save file, combined with `fileName`). 
```{r warning = FALSE, message=FALSE, eval = FALSE}
# Using the full FIA data set, all available inventories
tpaRI_st <- tpa(fiaRI, polys = countiesRI, returnSpatial = TRUE)

# Animate the output
library(gganimate)
plotFIA(tpaRI_st, TPA, animate = TRUE, legend.title = 'Abundance (TPA)', 
        legend.height = .8)
```

Owner

  • Name: Jeff Doser
  • Login: doserjef
  • Kind: user
  • Company: Michigan State University

GitHub Events

Total
  • Issues event: 14
  • Watch event: 3
  • Delete event: 3
  • Issue comment event: 15
  • Push event: 47
  • Pull request event: 2
  • Fork event: 1
  • Create event: 3
Last Year
  • Issues event: 14
  • Watch event: 3
  • Delete event: 3
  • Issue comment event: 15
  • Push event: 47
  • Pull request event: 2
  • Fork event: 1
  • Create event: 3

Committers

Last synced: 6 months ago

All Time
  • Total Commits: 427
  • Total Committers: 9
  • Avg Commits per committer: 47.444
  • Development Distribution Score (DDS): 0.089
Past Year
  • Commits: 22
  • Committers: 1
  • Avg Commits per committer: 22.0
  • Development Distribution Score (DDS): 0.0
Top Committers
Name Email Commits
Hunter s****u@m****u 389
Jeff d****f@m****u 22
Jacob Fraser j****7@g****m 5
David Diaz d****z@v****t 4
Grayson White g****3@g****m 2
Marek Petrik m****k@c****u 2
markfairbanks m****s@g****m 1
badgley b****y 1
Whalen w****d 1
Committer Domains (Top 20 + Academic)

Issues and Pull Requests

Last synced: 6 months ago

All Time
  • Total issues: 47
  • Total pull requests: 10
  • Average time to close issues: 10 months
  • Average time to close pull requests: 6 months
  • Total issue authors: 35
  • Total pull request authors: 7
  • Average comments per issue: 2.02
  • Average comments per pull request: 1.6
  • Merged pull requests: 10
  • Bot issues: 0
  • Bot pull requests: 0
Past Year
  • Issues: 4
  • Pull requests: 0
  • Average time to close issues: 3 months
  • Average time to close pull requests: N/A
  • Issue authors: 4
  • Pull request authors: 0
  • Average comments per issue: 1.25
  • Average comments per pull request: 0
  • Merged pull requests: 0
  • Bot issues: 0
  • Bot pull requests: 0
Top Authors
Issue Authors
  • hunter-stanke (4)
  • jamisbruening (3)
  • hadley (3)
  • djj4tree (3)
  • lwrogers-uw (2)
  • jgrn307 (2)
  • danfosterfire (2)
  • KatieMurenbeeld (1)
  • GaryBoba (1)
  • ssesnie (1)
  • lagoodal (1)
  • ryanmismith (1)
  • eartherin (1)
  • Ikurahodiok (1)
  • doserjef (1)
Pull Request Authors
  • graysonwhite (2)
  • jacobf37 (2)
  • d-diaz (2)
  • markfairbanks (1)
  • whalend (1)
  • marekpetrik (1)
  • badgley (1)
Top Labels
Issue Labels
bug (5) enhancement (3) question (1)
Pull Request Labels

Packages

  • Total packages: 1
  • Total downloads:
    • cran 666 last-month
  • Total dependent packages: 0
  • Total dependent repositories: 0
  • Total versions: 12
  • Total maintainers: 1
cran.r-project.org: rFIA

Estimation of Forest Variables using the FIA Database

  • Versions: 12
  • Dependent Packages: 0
  • Dependent Repositories: 0
  • Downloads: 666 Last month
Rankings
Forks count: 5.0%
Stargazers count: 7.6%
Average: 19.5%
Dependent packages count: 29.8%
Dependent repos count: 35.5%
Maintainers (1)
Last synced: 6 months ago

Dependencies

DESCRIPTION cran
  • R >= 3.1.0 depends
  • bit64 * imports
  • data.table * imports
  • dplyr >= 1.0.0 imports
  • dtplyr >= 1.0.0 imports
  • ggplot2 * imports
  • methods * imports
  • parallel * imports
  • rlang * imports
  • sf * imports
  • stringr * imports
  • tidyr >= 1.0.0 imports
  • tidyselect >= 1.0.0 imports
  • R2jags * suggests
  • coda * suggests
  • gganimate * suggests
  • knitr * suggests
  • rmarkdown * suggests