FinGraph Manual · DrAIStudio

FinGraph — the complete researcher's manual

FinGraph turns one table of firm financial data into networks, clusters, machine-learning predictions, and a fully tested research model — free, and entirely in your browser. This guide explains every control, shows how to read every output, gives worked examples, and provides paste-ready sentences for writing up your results.

Open FinGraph →

Diagrams below are schematic illustrations of each panel. Nothing you upload leaves your computer — every calculation runs locally in your browser, so your data stays private.

What FinGraph does

FinGraph is built for panel data: each row is a firm observed in a year (a “firm-year”), and each column is a financial variable — a balance-sheet line item, an income-statement figure, or a ratio. From that single table it offers five families of analysis, all sharing the same data and settings.

The core idea, animated — correlated financial variables drift together into colour-coded co-movement clusters, unrelated ones stay apart.
Load dataCSV / Excel Networks & clusters Ratio network Predict performance Research model Interpret (AI)plain-language read-out Download reportone HTML file → PDF Expand anychart ⤢
Figure 1 — the FinGraph workflow: one data table feeds every analysis; results can be interpreted by AI, expanded to full screen, and exported as a single report.

The five families are: (1) association networks that map how variables co-move; (2) ratio networks over auto-derived financial ratios; (3) clustering with per-cluster finance analysis; (4) machine-learning prediction of a performance target; and (5) a research-model builder for hypothesis testing with regression, moderation and mediation.

Who it is for

FinGraph suits accounting, finance and management researchers, graduate students, and instructors who work with company financial panels (CSMAR, Compustat, Orbis, hand-collected data, or teaching datasets). No coding or statistics software is required, but the outputs are rigorous enough to report in a paper: significance tests, standardised coefficients, VIF, out-of-sample validation, bootstrap confidence intervals, and reproducible method statements.

Quick start (3 steps)

  1. Load your data. On the tool page, drag a CSV or Excel file onto the drop zone, or click ✨ Try a sample to explore with demo data first.
  2. Check the columns. In Configure, confirm FinGraph identified the right Firm ID, Firm name and Period/Year columns. Every other numeric column becomes an analysis variable.
  3. Run an analysis. Build a network, or scroll to Predict firm performance or Research model builder and press the run button. Every result can be interpreted, expanded and exported.
First time? Load the sample, build a common-size variable network, press Name clusters (AI), then open the Research model builder and press Auto-find predictors. In two minutes you will have seen most of what FinGraph does.

Choosing an analysis

Match your question to the right tool:

Your questionUse
Which financial variables move together? What is the structure of the balance sheet?Association network (§1) + Clusters (§3)
How do liquidity / leverage / profitability ratios relate?Ratio network (§2)
Which firms are structurally similar (peer groups)?Firm network (§4)
Can I forecast a performance measure? What drives it?Predict performance (§5)
Does variable X affect performance, controlling for Y? (hypothesis test)Research model (§6)
Which of many candidate predictors are significant?Auto-find predictors (§7)
Does the effect of X depend on another variable W?Moderation (§8)
Does X affect Y through a mechanism M?Mediation (§9)

Preparing your data

FinGraph expects a “long” panel — one row per firm-year:

Firm IDYearTotal AssetsCurrent Assets… 00000120198.04e83.10e8… 00000120208.71e83.35e8… 00000220191.22e96.40e8… 00000220201.30e96.62e8…
Figure 2 — the expected shape: rows are firm-year observations, columns are financial variables.

File requirements

The Configure step

After loading, FinGraph auto-detects the ID / name / period columns. Verify them — if a column is mis-detected, pick the right one from the dropdowns. In Variables in the network you can keep All numeric columns or the Top 30 by coverage (coverage = how many rows have a value).

Multi-row headers are handled automatically. CSMAR, Datastream and similar exports stack extra header rows under row 1 — a field-description row (“Ending Date of Statistics”) and a unit row (“No Unit”). FinGraph keeps row 1 as the header and drops the description/unit rows, so only real firm-year records load. It also reads accounting-style numbers: scientific notation (8.042E8), parentheses negatives (1,234), thousands separators, % and currency symbols.

Reshape / query your data with SQL

The load screen has an optional 🛢️ Reshape / query your data with SQL panel (it appears after a file loads). Use it to select, filter, rename, aggregate or pivot your table into exactly the firm-year rows you want — everything runs in your browser; nothing is uploaded.

Examples.
SELECT * FROM ? WHERE [Accper] LIKE '20%' — keep years 2000+.
SELECT [Stkcd],[Accper],[A001000000] AS TotalAssets,[A002000000] AS TotalLiab FROM ? — pick and rename.
SELECT [Stkcd],[Accper], SUM(num([A001101000])) AS Cash FROM ? GROUP BY [Stkcd],[Accper] — collapse to one row per firm-year.
The result feeds every analysis. Running a query replaces the working dataset, and the network, heatmap, dashboard, prediction, regression and causal panels all re-run on it automatically. Use ↺ Restore original to go back to the file you loaded.

Standardize variables (at the start)

The Configure step has a Standardize variables control that rescales every numeric variable once, up front, and feeds the standardized values into every analysis (network, heatmap, dashboard, prediction, regression, causal designs). Choose the method your field prefers:

MethodFormulaUse when
Z-score(x − mean) ⁄ SD → mean 0, SD 1The default for putting variables on a common scale; required for many ML models and for firm-similarity distances.
Min–max(x − min) ⁄ (max − min) → [0, 1]You want a bounded 0–1 range (e.g. for neural nets).
Robust(x − median) ⁄ IQRData have outliers — the median/IQR are not distorted by extremes.
Logsign(x)·ln(1+|x|)Highly skewed monetary variables; compresses long tails (handles zeros and negatives).
Rank → percentilerank ⁄ (n−1) → [0, 1]You want a fully non-parametric, outlier-proof scale (ordering only).
Z-score by yearstandardize within each yearCross-sectional studies — removes market-wide, year-specific levels (industry/year-adjusted).
Z-score within firmstandardize within each firmYou care about a firm’s deviations from its own norm (like firm fixed effects).
Two useful facts. (1) Z-score and min–max are linear, so they do not change Pearson correlations — the network and heatmap look identical, but ML, firm-similarity and the timeline charts change. Robust, log and rank do reshape distributions and will change correlations. (2) Leave standardization on None when you want distress scores (Altman, Ohlson…) or common-size ratios, which are defined on raw monetary values. Switch back to None any time to restore the original data.

Selecting specific years

Below standardization, the Years in the analysis list has a checkbox per year in your data. Tick the years you want and the whole tool — the data-overview dashboard, network, heatmap, predictions, regression and causal designs — is restricted to those firm-years. Use All to reset or Latest to jump to the most recent year. This is the global filter; the network card also has a year slider that animates through the selected years one at a time. Standardization is computed within the selected years, so “z-score” means relative to the sample you kept.

Transforms explained

Raw balance-sheet levels are dominated by firm size, so big firms have big everything and every variable looks correlated (a “size hairball”). A transform removes that. Choose based on your question:

TransformWhat it doesUse when
Raw levelsThe values as-is.Rarely — only if variables are already scale-free.
Common-size (÷ total assets)Each item as a share of total assets.You care about balance-sheet composition. Best default.
Within-firm (demean)Subtracts each firm’s own average, leaving only over-time deviations.You care about within-firm change and want to remove stable firm differences (like fixed effects).
Year-over-year growthPercentage change from the previous year.You study dynamics / growth; also makes non-stationary levels comparable.
Rule of thumb: for structure and composition use common-size; for change over time use within-firm or growth. In the ratio network, ratios are already scale-free, so common-size is treated as raw.

Missing values & outliers

Data overview dashboard

Between Configure and the network, the Data overview card gives you an at-a-glance exploratory picture of your panel — the kind of descriptive dashboard you would otherwise build by hand — so you can sanity-check the sample and see how each variable behaves over time before modelling.

What it shows

Controls

ControlEffect
Colour / group byThe categorical column that colours the lines and bars (industry, sector, exchange…). Auto-detected; choose “None” for a single overall line.
Line = firms’ Mean / Median per yearHow each line is summarised across firms within a year. Median is more robust to outliers (falls back to mean on very large samples).
Standardise each panel (z-score)Rescales each panel to mean 0, SD 1 so you compare the shape of trends across variables with very different units.
Panels / Grid columnsHow many variables to show and the grid width (default 6 columns).
Reading it. With colour by = industry and the featured variable set to your key item (say total assets or ROA), the featured chart shows how that item’s industry averages diverge over time, while the grid lets you scan all variables at once for trends, breaks, or data problems (a flat line at zero usually means a missing/blank variable). Export the featured chart and the counts chart as PNGs, or download a summary CSV of group × year × variable means for your appendix.

1 · Association network

What it answers: which financial variables move together across firms, and how they group. Strongly correlated variables sit closer, are joined by thicker links, and cluster by colour; negative correlations are dashed red.

Recv Inv Cash Fixed CIP Intang Working-capital cluster Fixed-asset cluster — positive-- negative
Figure 3 — variables that co-move cluster together; teal links are positive correlations, dashed red are negative.

Steps

  1. Keep the Variable network tab selected.
  2. Choose a Transform (common-size is a good default) and a Correlation method (Pearson for linear, Spearman for rank/robust).
  3. Set Minimum |correlation| and Max variables, then press ⚙ Build network.
  4. Open Advanced — filtration & model to choose how edges are kept and whether to use partial correlations (see the control table below).
  5. Tune Community resolution and Colour nodes by; toggle hulls, rings and density for readability.
  6. Press 🏷️ Name clusters (AI) and 🧠 Interpret network (AI) for labels and a written read-out.

Every control explained

ControlWhat it does
TransformRemoves the firm-size effect (see §Transforms).
Size control (partial)Partials out a size variable (e.g. total assets) from every correlation.
Correlation methodPearson (linear) or Spearman (rank — robust to outliers and non-linearity).
Minimum |correlation|Threshold for keeping an edge (when Edge selection = threshold).
Edge selectionThreshold · FDR (keeps edges surviving a Benjamini–Hochberg false-discovery test) · MST (minimum-spanning-tree backbone) · Disparity (statistical backbone filter).
Partial-correlation (GGM)Edges show conditional dependence — the relationship between two variables after removing the influence of all others. Turns co-movement into a cleaner dependency map.
Community resolutionHigher = more, smaller clusters; lower = fewer, larger clusters.
Colour nodes byCluster, or a centrality: betweenness (bridges), eigenvector (influence), closeness (reach), degree (connections).
Min. pairs per edgeRequires at least this many complete firm-year pairs before an edge is drawn (guards against spurious links).

Reading the output

The stats bar reports nodes, edges, density, number of clusters, and modularity Q (clustering quality — higher is cleaner). The insight panel lists the strongest correlations, cluster membership, and pivotal variables (high betweenness — they bridge clusters, marked ◆). A variable that bridges two clusters is often an integrator (e.g. total current assets linking working-capital items).

Worked example

On a common-size CSMAR balance sheet, FinGraph typically recovers a working-capital cluster (receivables, inventory, prepayments, cash), a fixed-asset cluster (net fixed assets, construction-in-progress, investment property), and an intangibles cluster (intangibles, goodwill, deferred tax). Cash often shows a negative edge to working-capital items — a liquidity trade-off — drawn as a dashed red link. Modularity Q around 0.4–0.6 indicates well-separated clusters.

How to report it

“Common-size balance-sheet variables were mapped as a correlation network (Pearson, |r| ≥ .30, Benjamini–Hochberg FDR q = .05). Louvain community detection (resolution = 1.0) recovered three clusters (modularity Q = 0.52): working capital, fixed assets, and intangibles.”
Use ⬇ Methods + settings to copy the exact parameters.

1b · Correlation heatmap & lower-triangle matrix

What it answers: the same correlations as the network, shown as a colour matrix — the familiar correlation table you put in a paper. It appears in the Correlation heatmap card below the network and redraws whenever you build a variable or ratio network. Blue = positive, red = negative, white ≈ 0.

ControlEffect
ShowLower triangle (the classic publication figure), full matrix, or upper triangle.
DiagonalHide the 1.0 diagonal or show it.
Order variablesBy cluster (groups co-moving variables into blocks along the diagonal), as selected, or alphabetical.
MatrixZero-order correlations (r), or the partial / GGM edge matrix when the partial-correlation network is on.
Show values / starsPrint each coefficient in the cell, with significance stars (* .05, ** .01, *** .001).
Reading it. Ordering by cluster makes blocks of high correlation appear as coloured squares along the diagonal — a quick visual of the same communities the network finds. Deep-red off-diagonal cells flag strong negative relationships (e.g. cash vs working-capital items).

Exports: a 300-DPI PNG, a lower-triangle CSV formatted as an APA correlation table (numbered variables, blank upper half, 1s on the diagonal, stars included), and a full-matrix CSV.

How to report it

“Table 2 reports the correlation matrix. Cash holdings correlate negatively with inventory (r = −.42, p < .01) and receivables (r = −.31, p < .05), consistent with a working-capital trade-off.”

2 · Ratio network

What it answers: how the standard financial ratios relate to one another — the way analysts actually think. FinGraph auto-derives up to 20 ratios from your columns and networks those.

FamilyRatios derived (when inputs are present)
LiquidityCurrent, Quick, Cash, Working-capital ÷ assets
Leverage / solvencyDebt-to-assets, Debt-to-equity, Equity ratio, Long-term-debt ÷ assets, Current ÷ total liabilities, Equity multiplier
Asset structureCapital intensity, Intangible intensity, Current-asset ratio, Non-current-asset ratio
EfficiencyInventory ÷ current assets, Receivables ÷ current assets, Asset turnover*
Profitability*ROA, ROE, Net profit margin

* Turnover and profitability ratios appear only when income-statement items (revenue, net income) are in your file — the ratio set adapts to your data.

  1. Click the Ratio network tab.
  2. Press ⚙ Build network. Ratios that co-move cluster into families (liquidity, leverage, profitability…).
  3. Use the same clusters, exports and AI interpretation as the variable network.

Worked example

On demo data the ratio network separates cleanly into a liquidity cluster (current, quick, cash, working-capital/assets), a leverage cluster (debt-to-assets, debt-to-equity, equity multiplier), an asset-structure cluster (capital & intangible intensity), and a profitability cluster (ROA, ROE, margin) — a textbook recovery of the ratio taxonomy directly from the data.

3 · Clusters & per-cluster finance analysis

What it answers: what each cluster means in finance terms. After any variable or ratio network, the Cluster finance analysis panel turns each cluster into a finance object.

  1. Build a network, then scroll to Cluster finance analysis and pick a cluster from the dropdown.
  2. Read the member table: each item’s share of total assets, mean and SD, and its PC1 loading (how strongly it defines the cluster).
  3. Note the cluster’s cohesion (average internal |r|), its total weight (% of assets), its hub (most connected member), and the composite-index equation — the first principal component, a single index you can compute per firm-year to summarise the cluster.
  4. Press 🧠 Interpret this cluster (AI) for the economic meaning, the ratios it maps to, and a testable hypothesis.

Reading the output

Worked example

A working-capital cluster might show Total Current Assets 40% of assets, Inventories 12%, Receivables 11%; cohesion 0.90; PC1 explaining 92% with loadings ≈ 0.45 each. The composite index Factor = 0.46·z(Inventories) + 0.46·z(Receivables) + … is a ready-made “working-capital intensity” variable you can use as a predictor elsewhere.

4 · Firm (peer) network

What it answers: which firms are structurally similar. Each firm is reduced to its average standardised financial profile; firms with similar profiles are linked and cluster into peer groups.

  1. Click the Firm network tab and press ⚙ Build network.
  2. Read the peer-group clusters; the cluster panel shows what makes each group distinctive (variables higher and lower than the overall average).
Use this to find comparable firms for benchmarking, or to check whether firms from the same industry actually cluster together on financial structure.

Comparing peer groups & analysing one cluster

After building the firm network (and optionally naming the clusters with AI), the cluster panel gives you two extra tools:

  1. 📊 Compare peer groups (ANOVA) — runs a one-way ANOVA across the clusters for every variable and reports, for each, the F-statistic, p-value, η² (the share of variance explained by cluster membership — an effect size), and the per-cluster means. It tells you exactly how the peer groups differ statistically and which variables separate them most.
  2. → Use this peer group in the research model — sets the model's firm sample to the selected cluster's firms, so every analysis lower down the page (research model, moderation/mediation, prediction, and the causal designs) runs on just that peer group. Combine it with the same tool on another cluster to compare results across groups.

5 · Predict firm performance (machine learning)

What it answers: can a performance measure be predicted from the other variables, how accurately, and what drives it? Results report out-of-sample accuracy on a held-out test set — the honest test of a predictive model.

Actual vs predicted (test set) Actual Test R² 62% · out-of-sample Neural network · train 400 / test 176 Top drivers (permutation importance):Leverage ▲ · Size ▲ · Liquidity ▼
Figure 4 — the prediction dashboard: an out-of-sample fit, an actual-vs-predicted plot, and a ranking of what drives the target.

Steps

  1. Choose a Target — what to predict. Options include derived growth measures (asset/revenue/equity YoY), any ratio (ROA, ROE…), or any raw item.
  2. Pick the Task: Regression (predict the value) or Classification (high vs low performer, split at the median).
  3. Choose the Predictors (ratios, raw items, or both) and the Model (see the model table below).
  4. Set the Horizon: Same period (explain) or Next period t+1 (forecast — year-t features predict the target at t+1).
  5. Keep Split by firm ticked (holds out whole firms so the test can’t “cheat” by seeing the same firm in training and test), set the test %, then press ⚙ Train & evaluate.

Which model?

ModelBest for
Linear (OLS)A transparent baseline; standardised coefficients tell you direction and size.
RidgeMany correlated predictors — shrinks coefficients for stability.
Neural network (MLP)Non-linear relationships and interactions the linear model misses; read permutation importance for drivers.

Reading the output

Watch the gap. If Train R² ≫ Test R², the model over-fits — prefer a simpler model or more data. And beware “too-perfect” fits: predicting a ratio from its own components is circular. The meaningful test is a genuine target such as next-year asset growth.

How to report it

“A neural-network model predicted next-year ROA from 14 financial ratios (firm-level 70/30 split). Out-of-sample R² = .48 (RMSE = .031). Permutation importance ranked leverage, asset turnover and liquidity as the strongest drivers.”

6 · Research model (multiple regression)

What it answers: does variable X relate to an outcome, controlling for other variables? This is the core hypothesis-testing tool: specify a model, test it, and get publication-ready statistics.

Leverage Liquidity Firm size ·ctrl Firm performanceR² = 41% β=.32*** β=-.18** β=.05 ns
Figure 5 — the research-model diagram: solid teal = significant positive, solid red = significant negative, grey dashed = non-significant. Controls are shaded.

Steps

  1. Pick the Outcome (dependent variable) — e.g. ROA, or asset growth.
  2. Optionally restrict the sample: open Firms — all and tick the firms to include (filter / All / None), or — after building the Firm network — pick a whole peer-group cluster from the dropdown to select all its firms at once. The header shows “N of M”. Use this for subsamples (an industry, a size band, a peer group).
  3. Tick your Predictors and any Control variables. Controls are entered but reported separately, so your hypothesis variables stay in focus.
  4. Choose the Horizon (same period, or next-period t+1 for a predictive test).
  5. Press ⚙ Test model.
  6. Read the diagram, statistics table, fit cards and hypothesis tests; press 🧠 Interpret (AI) or ⬇ Download full report.

Reading the statistics table

ColumnHow to read it
BUnstandardised slope: the change in the outcome for a one-unit change in the predictor (in the outcome’s own units).
SEStandard error of B — the uncertainty. Smaller relative to B = more precise.
βStandardised slope (SD units): compare β across predictors to see which matters most. |β| ≈ .10 small, .30 medium, .50 large.
t, pt = B/SE; p is its significance. Stars: *** p<.001, ** p<.01, * p<.05, † p<.10.
95% CIPlausible range for B. If it excludes 0, the effect is significant at 5%.
VIFMulticollinearity. <5 fine, 5–10 caution, >10 (red) problematic — consider dropping one of the overlapping predictors.

Reading the fit & hypotheses

R² / Adjusted R² is how much of the outcome the model explains; the F-test asks whether the model as a whole beats no predictors (a tiny p means yes). Each hypothesis line states whether a predictor is supported (significant, with its direction) or not supported.

Worked example

Outcome = ROA; predictors = Debt-to-assets and Asset turnover; control = firm size. Suppose Debt-to-assets B = −0.041, β = −0.22, t = −3.8, p < .001, VIF 1.3 → “higher leverage is associated with lower ROA, supported.” Asset turnover β = .35, p < .001 → supported. Model R² = .29, F(3, 496) = 68.2, p < .001. You would report leverage and turnover as significant correlates of profitability, explaining 29% of its variance.

How to report it

“We regressed ROA on leverage and asset turnover, controlling for firm size (N = 500). The model was significant, F(3, 496) = 68.2, p < .001, R² = .29. Leverage was negatively associated with ROA (β = −.22, p < .001) and asset turnover positively (β = .35, p < .001). All VIFs < 2.”

6b · Panel methods, robust inference & scores from the literature

Because financial data are firm-year panels, top accounting and finance journals rarely use plain OLS. The research-model card now offers the field-standard toolkit, added after a review of methods used in The Accounting Review, Journal of Accounting Research, Journal of Finance and the Review of Financial Studies.

Estimator — fixed effects

The Estimator selector controls unobserved heterogeneity via the within transformation:

EstimatorWhat it removes / when to use
Pooled OLSNo controls for panel structure — a baseline only.
Firm fixed effectsAbsorbs time-invariant firm traits (industry, business model); identifies effects from within-firm change. Reports the within-R².
Year fixed effectsAbsorbs common shocks (cycles, regulation) shared by all firms in a year.
Two-way (firm + year) FEBoth at once — the modal specification in empirical accounting.
Fama–MacBethRuns a cross-sectional regression each year and averages the coefficients; reports Fama–MacBeth t-statistics. Common in asset pricing.

Standard errors

OLS standard errors are biased in panels because residuals correlate within firm (Petersen 2009). The Standard errors selector offers Classical, Robust (HC1) for heteroskedasticity, and Clustered by firm — the expected default in accounting and corporate finance. The estimator line under the fit cards records your choice and the number of clusters.

Winsorise

The Winsorise selector caps each variable's tails at the 1st/99th (or 2.5/97.5, 5/95) percentiles before estimation — the near-universal fix for the heavy tails of financial ratios.

Descriptives (Table 1 & Table 2)

The 📋 Descriptives button produces the two tables every empirical paper opens with: Table 1 (N, mean, SD, min, P25, median, P75, max for the outcome and predictors) and Table 2 (a starred correlation matrix). Both are included in the downloadable report.

Distress, quality & manipulation scores

When your data include the required income-statement / cash-flow items, FinGraph auto-derives the classic score models as variables you can use as an outcome, predictor or control:

ScoreMeasuresNeeds (beyond balance sheet)
Altman Z / Z″Bankruptcy riskRetained earnings, EBIT (Z also needs sales & market value)
Ohlson OBankruptcy probabilityNet income (+ prior year)
Piotroski F (0–9)Fundamental strengthNet income, operating cash flow, sales (+ prior year)
Beneish MEarnings-manipulation riskSales, COGS, receivables, depreciation, SG&A (+ prior year)

If the inputs are missing, the score simply does not appear — the set adapts to your data. Scores that need a prior year use the panel's lag automatically.

Difference-in-differences (event study)

The Difference-in-differences panel estimates the causal-style effect of an event (a policy, reform or shock) on a treated group versus a control group. Pick a treatment-group indicator (a 0/1 column marking treated firms) and an event year; FinGraph forms Treated, Post and Treated × Post and estimates Y = β₀ + β₁·Treated + β₂·Post + β₃·(Treated×Post) + controls with firm-clustered SEs. The DiD estimate is β₃. You also get a 2×2 means table (treated/control × pre/post) whose difference-of-differences equals β₃, and a treated-vs-control trend chart with the event marked — use it to check the crucial parallel-trends assumption (the two lines should track each other before the event).

DiD is only credible if pre-event trends are parallel and the event is plausibly exogenous to the treated firms. Inspect the trend chart, and treat a significant DiD with non-parallel pre-trends as unreliable.

Causal designs — IV, PSM, RD, event study

The Causal designs panel adds four more identification strategies. Each needs a design input you supply; all report an estimate with inference and (where useful) a diagnostic chart.

DesignYou provideEstimate & diagnostic
Instrumental variables (2SLS)An endogenous regressor X and an instrument Z (plus controls)The 2SLS effect of X, and a first-stage F (F < 10 flags a weak instrument). Assumes the instrument affects Y only through X (untestable exclusion restriction).
Propensity-score matchingA 0/1 treatment column; covariates = ticked controlsThe ATT from nearest-neighbour matching on the estimated propensity, plus a propensity-overlap chart and common-support range. Assumes selection on observables.
Regression discontinuityA running variable, a cutoff, and a bandwidthThe jump at the cutoff from local-linear fits, with a binned scatter + fitted-lines chart. Assumes no precise manipulation of the running variable.
Event study (staggered DiD)A per-firm adoption-year column (blank = never-treated)Dynamic treatment effects by year-relative-to-adoption (t−1 = reference), with a coefficient plot. Choose Callaway–Sant'Anna (default — group-time ATT(g,t) aggregated to an event study, robust to heterogeneous timing, with a never-/not-yet-treated comparison and firm-bootstrap CIs) or plain two-way FE. Pre-period coefficients near zero support parallel trends; the overall ATT summarises the post-treatment effect.
These designs identify causal effects only under their assumptions (valid/strong instrument; overlap and no hidden confounders; no manipulation at the cutoff; parallel trends). FinGraph computes and visualises them but cannot verify the assumptions — argue them from theory and design. The event study is a two-way-FE specification; with very heterogeneous treatment timing, read it as descriptive dynamics (see Goodman-Bacon; Callaway–Sant'Anna).

Worked example

Regress ROA on leverage with firm and year fixed effects, firm-clustered SEs and 1% winsorisation: set Estimator = Two-way FE, Standard errors = Clustered by firm, Winsorise = 1%, then Test model. The estimator line reads “Two-way (firm+year) FE · firm-clustered SE (G = 320 firms) · winsorised at 1%”, and the reported β now reflects within-firm, within-year variation with honest standard errors.

How to report it

“We estimate the model with firm and year fixed effects and standard errors clustered by firm (Petersen 2009). Continuous variables are winsorised at the 1st and 99th percentiles. The within-R² is .24; leverage is negative and significant (β = −.18, p < .01).”

7 · Auto-find predictors

What it answers: out of many candidate variables, which significantly relate to the outcome? 🔎 Auto-find predictors enters all available predictors and reports which are significant.

  1. Set the Outcome (and any controls / firm selection). You do not need to tick predictors — Auto-find uses them all.
  2. Press 🔎 Auto-find predictors. FinGraph then:
    • fits the full model (every predictor together) and makes it the active model — significant predictors appear solid in the diagram, non-significant grey dashed;
    • runs a univariate screen — each predictor tested one at a time with the controls — and reports its p-value alone versus in the full model;
    • searches predictor combinations (best-subsets when feasible, else forward stepwise) and recommends a parsimonious model, ranked by adjusted R² and BIC.
  3. To adopt a recommendation, tick those predictors and press ⚙ Test model.

p “alone” vs p “full” — why both?

A predictor can be significant alone but not in the full model (its effect was shared with correlated predictors), or vice-versa. Comparing the two columns reveals which relationships are robust to controlling for everything else. Predictors significant in both are the strongest candidates.

Data-dredging caution. Testing many predictors and models inflates false positives. Treat anything the search flags as an exploratory hypothesis to confirm with theory or fresh data — not a confirmed effect. Prefer the parsimonious (BIC) model and check VIF on the full model.

8 · Moderation (interaction)

What it answers: does the effect of X on Y depend on a third variable W? A significant X × W interaction means yes.

X W X × W Y
Figure 6 — moderation: the interaction term X × W tests whether W changes the strength of X → Y.
  1. Set the Outcome (Y) at the top of the card.
  2. Open Moderation / Mediation, choose Moderation, pick X (predictor) and W (moderator), and press ▶ Run test.
  3. Read the interaction row: a significant X × W term (p < .05) means W moderates the X → Y effect.
  4. Read the simple slopes and the plot: the X → Y line is drawn at low (−1 SD), mean, and high (+1 SD) W. Diverging lines = moderation.
X and W are mean-centred before forming the product, which reduces artificial collinearity and makes the main effects interpretable at the average of the other variable.

Worked example

Does firm size (W) change how leverage (X) affects growth (Y)? If X × W is β = .14, p = .006, and the simple slopes are +0.02 at low size but +0.20 at high size, then leverage helps growth much more in large firms — a significant, size-dependent effect.

How to report it

“The leverage × size interaction was significant (β = .14, p = .006). Simple-slope analysis showed leverage predicted growth more strongly at high firm size (+1 SD, b = .20) than at low size (−1 SD, b = .02).”

9 · Mediation

What it answers: does X affect Y through a mechanism M? Mediation decomposes the total effect into a direct path and an indirect path X→M→Y.

X M Y a b c′ (direct) · indirect = a×b
Figure 7 — mediation: a (X→M), b (M→Y), c′ (direct X→Y). The indirect effect is a×b; total c = c′ + a×b.
  1. Set the Outcome (Y). Open Moderation / Mediation and switch the test to Mediation — the second box becomes the mediator M.
  2. Pick X and M and press ▶ Run test.
  3. Read the paths: a (X→M), b (M→Y controlling X), c (total X→Y) and c′ (direct). The indirect effect is a×b.
  4. Check the tests: the Sobel z/p and — more importantly — the bootstrap 95% CI (800 resamples). If the CI excludes 0, the indirect effect is significant.
  5. Read the verdict: full mediation (indirect significant, direct not), partial (both significant), or none.
The bootstrap CI is the modern standard and is more reliable than the Sobel test, especially in smaller samples — trust it when the two disagree.

Worked example

Does intangible intensity (X) affect the current-asset ratio (Y) through non-current structure (M)? Suppose a = −.44***, b = −1.02***, c = −.36***, c′ = −.80***, indirect a×b = .45, Sobel z = 11.6, bootstrap CI [.36, .54]. The CI excludes 0 and c′ remains significant → partial mediation: part of X’s effect runs through M, part is direct.

How to report it

“Mediation analysis (bias-corrected bootstrap, 800 resamples) showed a significant indirect effect of X on Y through M (ab = .45, 95% CI [.36, .54]). The direct effect remained significant (c′ = −.80, p < .001), indicating partial mediation.”
Mediation and moderation on cross-sectional data describe statistical patterns consistent with a mechanism — they do not prove causation. Strengthen causal claims with theory, lagged designs (use the t+1 horizon), or exogenous shocks.

10 · Exports & the full report

Interpreting significance & effect sizes

Two questions matter for every result: is it significant? (unlikely to be chance) and is it large? (does it matter).

Statistics glossary

TermMeaning (and formula where useful)
R² / Adjusted R²Variance in the outcome explained by the model. Adjusted R² penalises extra predictors, so use it to compare models. In prediction, the held-out test R² is what counts.
B / βB = raw slope (outcome units per predictor unit). β = standardised slope (SD units), comparable across predictors.
SE, t, pStandard error, t = B/SE, and its two-tailed p-value. Stars: *** <.001, ** <.01, * <.05, † <.10.
95% CI≈ B ± 1.96·SE. Excludes 0 ⇒ significant at 5%.
F-testWhole-model test: F = (R²/k) / ((1−R²)/(n−k−1)). Small p ⇒ the model beats no predictors.
VIFVariance inflation factor = 1/(1−R²ⱼ), where R²ⱼ regresses predictor j on the others. >10 ⇒ severe multicollinearity.
AUCArea under the ROC curve (classification): 0.5 chance, 1.0 perfect ranking of high vs low performers.
RMSE / MAETypical prediction error (root-mean-square / mean-absolute), in the target’s units. Lower is better.
BICBayesian information criterion = n·ln(RSS/n) + k·ln(n). Rewards fit, penalises complexity; lower is better. Used to choose a parsimonious model.
Sobel testTests a mediation indirect effect: z = ab / √(b²·SEₐ² + a²·SE_b²).
Bootstrap CIResamples the data many times to build an empirical confidence interval — the preferred mediation test.
FDR (Benjamini–Hochberg)Controls the expected proportion of false edges/effects when many tests are run.
Partial correlation / GGMCorrelation between two variables after removing all others — conditional dependence.
Fixed effectsAbsorb group-level means (firm and/or year) via the within transformation, removing unobserved group heterogeneity. FE models report the within-R².
Clustered SEStandard errors allowing residuals to correlate within a group (firm). The default in panel finance/accounting (Petersen 2009).
Fama–MacBethEstimate a cross-sectional regression each period and average; the t-stat is the time-series SD of the estimates.
WinsoriseCap a variable's extreme tails (e.g. at the 1st/99th percentiles) to limit outlier influence.
Altman Z / Ohlson OBankruptcy-risk scores from financial-statement ratios. Piotroski F (0–9) scores fundamental strength; Beneish M flags earnings-manipulation risk.
Modularity QNetwork clustering quality; higher = clearer, more separated communities.
CentralityDegree (connections), betweenness (bridging), eigenvector (influence), closeness (reach).
PC1 / composite indexFirst principal component — the single factor best summarising a cluster; its loadings give the index formula.

Reporting templates

Copy, then fill in your numbers (or use the tool’s Methods + settings and Download full report):

Network

“Common-size financial variables were mapped as a [Pearson/Spearman] correlation network with a [threshold/FDR/MST/disparity] edge criterion. Louvain community detection (resolution = R) yielded C clusters (modularity Q = __).”

Regression

“[Outcome] was regressed on [predictors], controlling for [controls] (N = __). The model was significant, F(k, df) = __, p __, R² = __ (adj. R² = __). [Predictor] was [positively/negatively] associated with [outcome] (β = __, p __). VIFs were below __.”

Moderation

“The [X] × [W] interaction was [significant/non-significant] (β = __, p __). Simple slopes indicated [X] predicted [Y] more strongly at [high/low] [W].”

Mediation

“A bootstrap mediation analysis (800 resamples) showed [a significant/no] indirect effect of [X] on [Y] via [M] (ab = __, 95% CI [__ , __]). The direct effect was [significant/ns] (c′ = __), indicating [full/partial/no] mediation.”

Prediction

“A [linear/ridge/neural-network] model predicted [target] from [features] using a firm-level [70/30] split. Out-of-sample [R² = __ / accuracy = __, AUC = __]. The strongest [drivers/coefficients] were [list].”

An example end-to-end workflow

  1. Load a CSMAR-style balance-sheet export (or the built-in sample).
  2. Explore structure: build a common-size variable network, press Name clusters (AI), and read the per-cluster finance analysis.
  3. Ratios: switch to the ratio network to see liquidity / leverage / profitability families.
  4. Form a question: e.g. “Does leverage predict next-year asset growth, controlling for size?”
  5. Test it: in the research model builder, set outcome = Asset growth (YoY), predictor = Debt-to-assets, control = Total Assets, horizon = next period; press Test model.
  6. Explore drivers: run Auto-find predictors to see all significant correlates; check p-alone vs p-full and the parsimonious model.
  7. Mechanism & boundary: test mediation (does liquidity carry the effect?) and moderation (does size change it?).
  8. Predict: train a neural network to forecast next-year growth and compare its out-of-sample accuracy to the regression.
  9. Report: press Download full report, print to PDF, and paste the method statement into your paper.

Troubleshooting & FAQ

“No standard ratios could be derived.”Your file lacks the balance-sheet items FinGraph needs (current assets/liabilities, equity, etc.), or their labels weren’t recognised. Include a Total Assets column and standard items, or use the variable network instead.
“Too few complete rows.”Your predictors have missing values, so listwise deletion left too small a sample. Untick sparse predictors, add more firms, or pick better-covered variables (Top 30 by coverage).
Everything is correlated / one giant cluster.You are probably on Raw levels — the size effect dominates. Switch the Transform to common-size, within-firm, or growth.
My model’s R² is suspiciously high (~99%).You are likely predicting a variable from its own components (e.g. a ratio from its numerator and denominator). Choose a genuinely separate target such as next-year growth, and use the t+1 horizon.
A predictor is significant alone but not in the full model.Its effect was shared with a correlated predictor. Check the p-alone vs p-full columns in Auto-find and the VIFs; keep the theoretically justified variable.
The page didn’t update after a new version.Refresh the browser (add ?v=today to the URL to bypass caching). Your data stays loaded within a session.
Is my data uploaded anywhere?No. All computation runs in your browser; files never leave your computer. The optional AI “Interpret” buttons send only summary labels/statistics (never your raw data) to generate the write-up.
Can I handle a very large file (hundreds of MB)?CSV loads fastest; large Excel files stream but may be slow. Export a subset (one year, or selected firms/variables) for interactive work.

Good practice

Open FinGraph and try it →

FinGraph · DrAIStudio — free, browser-based analysis of secondary financial data. Pairs with DataForge, VizCraft and Dr.AIStat.