Donation/Grant Dependence Ratio
Source:R/get-donations-revenue-ratio.R
get_donations_revenue_ratio.RdMeasures reliance on contributions and fundraising as a share of total revenue.
Formula:
dgdr = donation_revenue / total_revenue
donation_revenue = contributions + fundraising_revenueDefinitional Range
Bounded [0, 1]. Values near 1.0 characterize traditional charitable organizations with minimal earned income; values near 0 characterize fee-based service providers.
Benchmarks and rules of thumb
Values above 0.70-0.80 warrant monitoring of donor concentration and retention.
Organizations above 0.90 have almost no earned income buffer if philanthropic support declines.
Calculated For: 990 + 990EZ filers.
Usage
get_donations_revenue_ratio( df,
contributions = "F9_08_REV_CONTR_TOT",
fundraising_revenue = "F9_08_REV_OTH_FUNDR_NET_TOT",
total_revenue = "F9_08_REV_TOT_TOT",
numerator = NULL, denominator = NULL, winsorize = 0.98 ,
range = "zo",
sanitize = TRUE,
summarize = FALSE )Arguments
- df
A
data.framecontaining the fields required for computing the metric.- contributions
Total contributions, EOY.
- fundraising_revenue
Net fundraising event revenue.
- total_revenue
Total revenue.
- numerator
Optional. A pre-aggregated column name for donation revenue, bypassing
contributionsandfundraising_revenue. Cannot be combined with those arguments.- denominator
Optional. A pre-aggregated column name for the denominator. Cannot be combined with
total_revenue.- 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
"zo". 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:
- `donations_rev` - donation/grant dependence ratio (raw)
- `donations_rev_w` - winsorized version
- `donations_rev_z` - standardized z-score (based on winsorized values)
- `donations_rev_p` - percentile rank (1-100)Details
Primary uses and key insights
The donations and grant dependence ratio measures the combined share of total revenue from contributions (individual donations, foundation grants, corporate giving, federated campaigns) and net fundraising event income. It captures the overall dependence on philanthropic and voluntary support.
A high ratio indicates the organization relies heavily on the goodwill of donors and the fundraising environment rather than earned or contractual income. This creates vulnerability to donor fatigue, economic downturns (when charitable giving declines), and changes in donor priorities.
Formula variations and their sources
(Total contributions + net fundraising event revenue) / total revenue (Part VIII
lines 1h + 8c / line 12A). Government grants are included in total contributions
(line 1h) in this formulation. For a pure private philanthropy measure that excludes
government grants, combine this ratio with get_grants_govt_ratio().
Examples
library( fiscal )
data( dat10k )
d <- get_donations_revenue_ratio( df = dat10k )
#> :: Total revenue equal to zero :: 74 case(s) replaced with NaN
head( d[ , c( "donations_rev", "donations_rev_w", "donations_rev_z", "donations_rev_p" ) ] )
#> donations_rev donations_rev_w donations_rev_z donations_rev_p
#> <num> <num> <num> <int>
#> 1: NA NA NA NA
#> 2: 0.9999857 0.9999857 1.1394010 89
#> 3: 0.9678987 0.9678987 0.5973001 73
#> 4: NA NA NA NA
#> 5: 0.0000000 0.0000000 -2.7225063 1
#> 6: NA NA NA NA