Days of Operating Cash and Investments
Source:R/get-days-cash-investments.R
get_days_cash_investments.RdMeasures days of operating coverage using liquid and investment assets, net of fixed property obligations.
Formula:
doci = investable_assets / daily_expenses
investable_assets = unrestricted_net_assets + investments
- ( land_buildings_equipment + mortgages_payable )
daily_expenses = ( total_expenses - depreciation ) / 365Definitional Range
Unbounded in both directions. Negative values occur when unrestricted net assets are negative (accumulated deficits exceed equity) or when fixed assets net of debt exceed liquid resources. Values above 365 indicate more than one year of coverage.
Benchmarks and rules of thumb
180-365 days: Considered a solid reserve position for endowed organizations.
A large gap between this metric and
get_days_cash_operations()indicates liquidity concentrated in investments rather than accessible cash.
Calculated For: 990 + 990EZ filers.
Usage
get_days_cash_investments( df,
net_assets = "F9_10_NAFB_UNRESTRICT_EOY",
investments = "F9_10_ASSET_INV_SALE_EOY",
land_buildings = "F9_10_ASSET_LAND_BLDG_NET_EOY",
mortgages_payable = "F9_10_LIAB_MTG_NOTE_EOY",
total_expenses = "F9_09_EXP_TOT_TOT",
depreciation = "F9_09_EXP_DEPREC_TOT",
numerator = NULL, denominator = NULL, winsorize = 0.98 ,
range = "np",
sanitize = TRUE,
summarize = FALSE )Arguments
- df
A
data.framecontaining the fields required for computing the metric.- net_assets
Unrestricted net assets, EOY.
- investments
Investments held for sale or use, EOY.
- land_buildings
Net land, buildings, and equipment, EOY.
- mortgages_payable
Mortgages and notes payable, EOY.
- total_expenses
Total functional expenses.
- depreciation
Depreciation, depletion, and amortization.
- numerator
Optional. A pre-aggregated column for investable assets. Cannot be combined with the individual component arguments.
- denominator
Optional. A pre-aggregated column for annual non-depreciation expenses (the function divides this by 365 internally). Cannot be combined with
total_expensesordepreciation.- 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:
- `days_cash_inv` - days of operating cash and investments (raw)
- `days_cash_inv_w` - winsorized version
- `days_cash_inv_z` - standardized z-score (based on winsorized values)
- `days_cash_inv_p` - percentile rank (1-100)Details
Primary uses and key insights
Days of cash and investments extends get_days_cash_operations() by
incorporating investment assets into the liquidity numerator. It asks: if the
organization could liquidate its unrestricted assets (net of fixed property and
related debt), how many days of operations could it fund? This broader measure
captures organizations that hold significant reserves in investment portfolios
rather than bank accounts.
It is most relevant for endowed organizations, foundations, and mature nonprofits
that hold investment portfolios. For organizations with minimal investments,
get_days_cash_operations() and this metric will be nearly identical.
Formula variations and their sources
The numerator is unrestricted net assets plus investments held for sale, minus
net fixed assets (land/buildings/equipment), plus mortgage notes payable. This
construction approximates the liquid, unrestricted resource base by starting from
unrestricted net assets, adding back investment assets, and removing the illiquid
fixed asset component (net of its associated debt). The denominator uses the same
daily expense base as get_days_cash_operations(): (total expenses -
depreciation) / 365.
This formulation follows Zietlow et al. (2007) and is related to the LUNA measure
(get_liquid_assets_months()).
Why this formula was chosen
By netting out fixed assets and their associated mortgage debt, the formula isolates resources that could realistically be accessed in a financial emergency - the organization cannot liquidate its building overnight, but it can liquidate investment securities. This is more operationally meaningful than simply summing all assets.
Canonical citations
Zietlow, J., Hankin, J.A. & Seidner, A. (2007). Financial Management for Nonprofit Organizations. Wiley.
Calabrese, T.D. (2013). Running on empty: The operating reserves of U.S. nonprofit organizations. Nonprofit Management and Leadership, 23(3), 281-302.
Variables used:
F9_10_NAFB_UNRESTRICT_EOY: Unrestricted net assets, EOY (net_assets)F9_10_ASSET_INV_SALE_EOY: Investments held for sale, EOY (investments)F9_10_ASSET_LAND_BLDG_NET_EOY: Net land, buildings, and equipment (land_buildings)F9_10_LIAB_MTG_NOTE_EOY: Mortgages and notes payable (mortgages_payable)F9_09_EXP_TOT_TOT: Total functional expenses (total_expenses)F9_09_EXP_DEPREC_TOT: Depreciation and amortization (depreciation)
Examples
library( fiscal )
data( dat10k )
d <- get_days_cash_investments( df = dat10k )
#> :: Daily operating expenses equal to zero :: 86 case(s) replaced with NaN
head( d[ , c( "days_cash_inv", "days_cash_inv_w", "days_cash_inv_z", "days_cash_inv_p" ) ] )
#> days_cash_inv days_cash_inv_w days_cash_inv_z days_cash_inv_p
#> <num> <num> <num> <int>
#> 1: NA NA NA NA
#> 2: 0.0000 0.0000 -0.2681201 27
#> 3: 342.7773 342.7773 0.5729522 72
#> 4: NA NA NA NA
#> 5: -10160.4642 -9319.4459 -3.7678912 1
#> 6: NA NA NA NA