Compares total liabilities to unrestricted net assets.
Formula:
dmr = total_liabilities / unrestricted_net_assetsDefinitional Range
Same as get_debt_equity_ratio(): bounded below at zero when both
numerator and denominator are positive; unbounded above; negative when unrestricted
net assets are negative.
Benchmarks and rules of thumb
Values above 3.0-5.0 are commonly flagged as high leverage in the nonprofit vulnerability literature. See
get_debt_equity_ratio()for fuller benchmark guidance.
Calculated For: 990 + 990EZ filers.
Usage
get_debt_netassets_ratio( df,
liabilities = c( "F9_10_LIAB_TOT_EOY", "F9_01_NAFB_LIAB_TOT_EOY" ),
net_assets = "F9_10_NAFB_UNRESTRICT_EOY",
winsorize = 0.98 ,
range = "np",
sanitize = TRUE,
summarize = FALSE )Arguments
- df
A
data.framecontaining the fields required for computing the metric.- liabilities
Total liabilities, EOY. Accepts one or two column names; if two are provided they are coalesced with the 990 value taking priority over 990EZ.
- net_assets
Unrestricted net assets, EOY.
- 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
"np". 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:
- `debt_netassets` - debt to net assets ratio (raw)
- `debt_netassets_w` - winsorized version
- `debt_netassets_z` - standardized z-score (based on winsorized values)
- `debt_netassets_p` - percentile rank (1-100)Details
Primary uses and key insights
The debt to net assets ratio compares total liabilities to unrestricted net assets,
similar to get_debt_equity_ratio(). The key distinction is in scope:
this function accepts both 990 and 990EZ filers (PZ scope) because it can use the
Part I liabilities field as a fallback for 990EZ filers, whereas get_debt_equity_ratio()
requires the Part X unrestricted net assets breakdown which is only on the full 990.
The practical use case for this function is cross-sectional analyses that include
both 990 and 990EZ filers. For full-990-only datasets, get_debt_equity_ratio()
provides a more precise measure.
Formula variations and their sources
See get_debt_equity_ratio() for a full discussion of formula variations.
This implementation uses F9_10_NAFB_UNRESTRICT_EOY as the denominator
(unrestricted net assets, Part X line 27B) and falls back to the Part I summary
liabilities field for the numerator when needed. The Part X unrestricted net assets
field is not available on 990EZ, so 990EZ filers will have NA for this ratio.
Examples
library( fiscal )
data( dat10k )
d <- get_debt_netassets_ratio( df = dat10k )
#> :: Net assets equal to zero :: 1,661 case(s) replaced with NaN
head( d[ , c( "debt_netassets", "debt_netassets_w", "debt_netassets_z", "debt_netassets_p" ) ] )
#> debt_netassets debt_netassets_w debt_netassets_z debt_netassets_p
#> <num> <num> <num> <int>
#> 1: NA NA NA NA
#> 2: NaN NaN NA NA
#> 3: 0.05232291 0.05232291 0.05821479 53
#> 4: NA NA NA NA
#> 5: 0.92405358 0.92405358 1.12609439 89
#> 6: NA NA NA NA