Measures the size of an organization's asset base relative to its annual revenue.
Formula:
arr = total_assets / total_revenueDefinitional Range
Bounded below at zero; unbounded above. The ratio is undefined when revenue is zero. Typical operating nonprofits show values in the [0.5, 5.0] range. Endowed organizations and capital-intensive nonprofits may show values of 10 or higher.
Benchmarks and rules of thumb
No universal benchmark; most meaningful for within-subsector comparisons.
Below 1.0: Annual revenue exceeds total assets – common for lean service organizations with minimal physical assets.
Above 10: Typically indicates a capital-heavy asset base or a small revenue base relative to accumulated assets.
Calculated For: 990 + 990EZ filers.
Usage
get_assets_revenue_ratio( df,
total_assets = "F9_10_ASSET_TOT_EOY",
total_revenue = c( "F9_08_REV_TOT_TOT", "F9_01_REV_TOT_CY" ),
winsorize = 0.98 ,
range = "zp",
sanitize = TRUE,
summarize = FALSE )Arguments
- df
A
data.framecontaining the fields required for computing the metric.- total_assets
Total assets, EOY.
- total_revenue
Total revenue. Accepts one or two column names; if two are provided they are coalesced with the 990 value taking priority over 990EZ.
- winsorize
The winsorization value (between 0 and 1), defaults to 0.98, which winsorizes at the 1st and 99th percentiles.
- range
Character string specifying the theoretical range of the ratio, used to set winsorization bounds. Default
"zp". Options:"np"(negative to positive),"zp"(zero to positive),"zo"(zero to one),"nz"(negative to zero), or a custom"lo;hi"pair (e.g."0;10").- sanitize
Logical (default
TRUE). IfTRUE, NA values in the financial input columns are imputed to zero before the ratio is computed, respecting form scope: Part X and VIII/IX fields (990 only) are imputed only for 990 filers; Part I summary fields (990 + 990EZ) are imputed for all filers. The returned dataframe always contains the original unmodified input columns.- summarize
Logical. If
TRUE, prints asummary()of the results and plots density curves for all four output columns (raw, winsorized, z-score, percentile). Defaults toFALSE.
Value
Object of class data.frame: the original dataframe appended with four
new columns:
- `assets_rev` - asset revenue ratio (raw)
- `assets_rev_w` - winsorized version
- `assets_rev_z` - standardized z-score (based on winsorized values)
- `assets_rev_p` - percentile rank (1-100)Details
Primary uses and key insights
The asset revenue ratio measures how many dollars of assets are held per dollar of annual revenue. It is an asset intensity measure: capital-intensive organizations (hospitals, universities, housing providers with large real estate portfolios) show high ratios; lean operating nonprofits show low ratios. It can also be interpreted as an approximate measure of how long the organization could theoretically operate on its asset base - though this is not a direct liquidity measure.
A related interpretation is efficiency: a lower ratio may indicate more efficient use of assets to generate revenue, though this is not universally true for nonprofits where asset accumulation may reflect reserve-building rather than operational inefficiency.
Formula variations and their sources
Total assets EOY / total revenue. The inverse (revenue / assets) is sometimes called the asset turnover ratio and is more common in commercial analysis. For nonprofits, the assets-to-revenue direction is more intuitive because it expresses asset intensity in terms of revenue multiples. Some studies use average assets ((BOY + EOY)/2) in the denominator to account for mid-year asset changes, but the EOY value is used here for consistency and data availability.
Examples
library( fiscal )
data( dat10k )
d <- get_assets_revenue_ratio( df = dat10k )
#> :: Total revenue equal to zero :: 200 case(s) replaced with NaN
head( d[ , c( "assets_rev", "assets_rev_w", "assets_rev_z", "assets_rev_p" ) ] )
#> assets_rev assets_rev_w assets_rev_z assets_rev_p
#> <num> <num> <num> <int>
#> 1: 2.0113642 2.0113642 0.4226489 64
#> 2: 0.2998503 0.2998503 -0.8496652 13
#> 3: 1.8613909 1.8613909 0.3397683 62
#> 4: 0.1477007 0.1477007 -0.9967334 7
#> 5: 13.2410366 13.2410366 2.7449843 94
#> 6: 1.5215781 1.5215781 0.1345067 56