Dechow F-Score for Misstatement Risk
Install and import#
npm install fintech-algorithmsimport { dechowFScoreForMisstatementRisk } from "fintech-algorithms/fundamental-analysis-and-valuation/quality-and-distress/dechow-f-score-for-misstatement-risk";Signature#
dechowFScoreForMisstatementRisk(data)Computes the Dechow et al. 2011 Model 1 misstatement logit from three consecutive accounting periods and divides the fitted probability by the unconditional misstatement rate to give the F-Score.
Parameters#
| Name | Type | Notes |
|---|---|---|
data | { current: { total_assets: number; cash: number; investments_and_advances: number; investments_at_equity: number; total_liabilities: number; preferred_stock: number; receivables: number; inventory: number; net_ppe: number; sales: number; net_income: number }; prior: { total_assets: number; cash: number; investments_and_advances: number; investments_at_equity: number; total_liabilities: number; preferred_stock: number; receivables: number; inventory: number; net_ppe: number; sales: number; net_income: number }; prior2: { total_assets: number; cash: number; investments_and_advances: number; investments_at_equity: number; total_liabilities: number; preferred_stock: number; receivables: number; inventory: number; net_ppe: number; sales: number; net_income: number }; issued_equity_or_long_term_debt: boolean } | Three nested period records plus one flag. current and prior are read for every variable; prior2 supplies the second lag needed for the prior-year cash sales and prior-year average assets. Within each record, net operating assets are built from total_assets, cash, investments_and_advances, investments_at_equity, total_liabilities and preferred_stock, while receivables, inventory, net_ppe, sales and net_income feed the remaining terms. issued_equity_or_long_term_debt must be a boolean and becomes the 0 or 1 issuance indicator. |
Returns#
{ state: string; method: string; variables: { rsst_accruals: number; change_receivables: number; change_inventory: number; soft_assets: number; change_cash_sales: number; change_roa: number; actual_issuance: number }; logit: number; misstatement_probability: number; f_score: number; band: string; unconditional_probability: number }
variables holds the seven predictors. logit applies the intercept -7.893 with coefficients 0.790, 2.518, 1.191, 1.979, 0.171, -0.932 and 1.029 in that order. misstatement_probability is the logistic transform of the logit, unconditional_probability is 0.0037 and f_score is the probability divided by it. band is at-or-below-baseline at 1 or below, above-baseline below 1.85, substantial below 2.45 and high-screen at or above 2.45. method is dechow-et-al-2011-model-1 and state is calculated.
Errors#
- When data is not a plain object, or current, prior or prior2 is missing or not a plain object — throws TypeError
- When issued_equity_or_long_term_debt is not a boolean — throws TypeError
- When any numeric field read is missing or not a finite number — throws TypeError
- When total_assets in any of the three period records is zero or negative — throws RangeError
- When prior-year cash sales compute to zero — throws RangeError
Complexity: time O(1),
space O(1).
Worked example#
executed Captured by running this function on the input its own test provides. Real output of real code — but not asserted against a published figure.
Input#
{
"current": {
"total_assets": 1000,
"cash": 100,
"net_ppe": 400,
"investments_and_advances": 20,
"investments_at_equity": 0,
"total_liabilities": 550,
"preferred_stock": 0,
"receivables": 150,
"inventory": 180,
"sales": 1200,
"net_income": 80
},
"prior": {
"total_assets": 900,
"cash": 90,
"net_ppe": 380,
"investments_and_advances": 20,
"investments_at_equity": 0,
"total_liabilities": 500,
"preferred_stock": 0,
"receivables": 120,
"inventory": 160,
"sales": 1050,
"net_income": 60
},
"prior2": {
"total_assets": 820,
"cash": 80,
"net_ppe": 350,
"investments_and_advances": 18,
"investments_at_equity": 0,
"total_liabilities": 450,
"preferred_stock": 0,
"receivables": 105,
"inventory": 145,
"sales": 950,
"net_income": 50
},
"issued_equity_or_long_term_debt": false
}Call#
dechowFScoreForMisstatementRisk(data)Returns#
object with 8 fields: state, method, variables, logit, misstatement_probability, f_score, band, unconditional_probability
{
"state": "calculated",
"method": "dechow-et-al-2011-model-1",
"variables": {
"rsst_accruals": 0.042105263157894736,
"change_receivables": 0.031578947368421054,
"change_inventory": 0.021052631578947368,
"soft_assets": 0.5,
"change_cash_sales": 0.13043478260869557,
"change_roa": 0.014443084455324356,
"actual_issuance": 0
},
"logit": -6.756803975307326,
"misstatement_probability": 0.001161589167261127,
"f_score": 0.313943018178683,
"band": "at-or-below-baseline",
"unconditional_probability": 0.0037
}Other exports#
This module also exports
calculate, altmanZScore, piotroskiFScore, beneishMScore, sloanAccrualMeasure, ohlsonOScore, zmijewskiXScore, springateSScore, tafflerZScore, fulmerHScore, groverGScore, dechowDichevAccrualQuality, modifiedJonesDiscretionaryAccrualModel. Every module additionally exports run as an alias of its
primary function, and a meta object carrying its catalog id, domain, family,
shape and article URL.
Diagrams#
How it works#
This page states the contract — how to call it correctly. The article explains the concept: why it works, and where it breaks.
References#
- Predicting Material Accounting Misstatements — Patricia M. Dechow, Weili Ge, Chad R. Larson, and Richard G. Sloan
- Accounting and Auditing Enforcement Releases — U.S. Securities and Exchange Commission
- Beginners' Guide to Financial Statements — U.S. Securities and Exchange Commission
- Evidence boundary