Net surplus or deficit as a share of total assets.
Formula:
roa = revenues_less_expenses / total_assetsDefinitional Range
ROA is unbounded in both directions. A ratio of zero means expenses exactly equalled revenues. Positive values indicate surplus years; negative values indicate deficit years. For nonprofits, where perpetual surpluses raise concerns about mission prioritization and perpetual deficits signal sustainability risk, the meaningful range is approximately [-0.20, 0.20] for most organizations in most years. Values outside this range are not impossible but typically reflect unusual circumstances (large asset disposals, one-time gifts, major capital campaigns, or accounting restatements) rather than stable operating performance.
Values can be distorted by very small total asset bases (newly formed organizations) or by organizations whose assets consist almost entirely of illiquid fixed property, making the denominator a poor proxy for the operational resource base.
Benchmarks and rules of thumb
Near zero: Normal for nonprofits operating close to break-even by design.
0.02-0.07 (2-7%): Generally considered healthy – building modest reserves without appearing to hoard resources.
Sustained below -0.05: Common threshold for classifying an organization as at risk (Greenlee & Trussel 2000, Keating et al. 2005).
Asset structure matters: capital-intensive organizations will mechanically produce low ROA even when financially healthy.
Calculated For: 990 + 990EZ filers.
Usage
get_return_assets_ratio( df,
revenues_less_expenses = "F9_01_EXP_REV_LESS_EXP_CY",
total_assets = c( "F9_10_ASSET_TOT_EOY", "F9_01_NAFB_ASSET_TOT_EOY" ),
winsorize = 0.98 ,
range = "np",
sanitize = TRUE,
summarize = FALSE )Arguments
- df
A
data.framecontaining the fields required for computing the metric.- revenues_less_expenses
Revenues less expenses (net surplus or deficit) for the current year. Accepts one or two column names; if two are provided they are coalesced with the 990 value taking priority over 990EZ.
- total_assets
Total 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:
- `return_assets` - return on assets (raw)
- `return_assets_w` - winsorized version
- `return_assets_z` - standardized z-score (based on winsorized values)
- `return_assets_p` - percentile rank (1-100)Details
Primary uses and key insights
Return on assets (ROA) measures how effectively an organization uses its entire asset base to generate a financial surplus. In the nonprofit context this is sometimes called the return on investment ratio, though "investment" here means the total asset base rather than financial securities. A positive ROA indicates the organization ended the year with more resources than it spent; a negative ROA indicates a deficit year.
ROA is most useful as a longitudinal indicator - watching whether an organization is becoming more or less efficient at generating surpluses per dollar of assets over time - and for cross-sectional comparisons within subsectors where asset structures are similar. It is frequently used as a dependent variable in financial vulnerability models and as a component of composite fiscal health scores.
Formula variations and their sources
In commercial accounting, ROA is typically computed as net income divided by average total assets (the mean of beginning- and end-of-year values), to avoid the distortion of large mid-year asset changes. The nonprofit literature generally uses end-of-year assets as the denominator (Greenlee & Trussel 2000, Keating et al. 2005) because beginning-of-year balance sheet data is not reliably available on 990 filings prior to recent years, and because the analytical focus is on the stock of resources at the time of reporting rather than a flow average.
The numerator also differs from the commercial definition. Commercial ROA uses net
income after taxes. For nonprofits, the equivalent is revenues less expenses
(F9_01_EXP_REV_LESS_EXP_CY, Part I line 19), which is the IRS-reported
summary figure for the change in net assets before other adjustments. Some studies
use the Part XI reconciliation value instead, but that field is 990-only and has
higher rates of missing data. The Part I summary field is available on both 990 and
990EZ forms and is used here for broader coverage.
Why this formula was chosen
End-of-year total assets in the denominator is the most common operationalization in
the nonprofit empirical literature and is the most reproducible given 990 data
availability. The Part I revenues-less-expenses numerator was chosen over the Part XI
reconciliation figure because it covers 990EZ filers, has lower rates of missingness,
and is the value most analysts expect when referencing the "net income" line on the
annual filing. The result is closely related to get_surplus_margin_ratio()
(which scales the same numerator by total revenue rather than total assets), and
to get_return_netassets_ratio() (which scales by beginning net assets).
Canonical citations
Greenlee, J.S. & Trussel, J.M. (2000). Predicting the financial vulnerability of charitable organizations. Nonprofit Management and Leadership, 11(2), 199-210. - One of the earliest systematic applications of ROA to nonprofit financial health prediction using 990 data.
Keating, E.K., Fischer, M., Gordon, T.P. & Greenlee, J. (2005). Assessing financial vulnerability in the nonprofit sector. Harvard Business School Working Paper 04-016. - Provides comparative analysis of ROA alongside other fiscal health indicators.
Tuckman, H.P. & Chang, C.F. (1991). A methodology for measuring the financial vulnerability of charitable nonprofit organizations. Nonprofit and Voluntary Sector Quarterly, 20(4), 445-460. - Foundational paper; ROA variants appear as components of composite vulnerability scores in subsequent applications.
Wicker, P., Feiler, S. & Breuer, C. (2013). Organizational mission and financial vulnerability: A financial health analysis of German nonprofit sport clubs. VOLUNTAS: International Journal of Voluntary and Nonprofit Organizations, 24(4), 991-1013. - Applies ROA in a cross-national nonprofit context; demonstrates subsector variation.
Examples
library( fiscal )
data( dat10k )
d <- get_return_assets_ratio( df = dat10k )
#> :: Total assets equal to zero :: 268 case(s) replaced with NaN
head( d[ , c( "return_assets", "return_assets_w", "return_assets_z", "return_assets_p" ) ] )
#> return_assets return_assets_w return_assets_z return_assets_p
#> <num> <num> <num> <int>
#> 1: 0.37039271 0.37039271 1.12913623 85
#> 2: 0.22926872 0.22926872 0.76908985 77
#> 3: 0.04191611 0.04191611 -0.08206219 46
#> 4: 0.67870302 0.67870302 1.75381216 94
#> 5: -0.01240729 -0.01240729 -0.60406180 28
#> 6: 0.05830085 0.05830085 0.03177880 51