ANALYTICS LAB · DOCUMENTATION

From a research question
to a defensible result.

Learn how to use the Analysis Studio, choose the right app, inspect assumptions and preserve a reproducible evidence trail.

Read the quick startOpen the Studio
analysis-plan.json
question "Does revenue predict profit?"app Causality & Time Seriesmethod Stationarity → Granger → Stabilityengine analysis-kernel-v2
Result readyMethod, assumptions and caveats preserved
01

OVERVIEW

What the Analytics Lab is

The Analytics Lab is an analysis environment, not an automated opinion generator. You choose the question, data and method. The platform calculates, checks and explains the result.

01Human question

Begin with what you want to learn, not whichever test looks interesting.

02Deterministic calculation

Statistics are produced by a versioned analysis kernel, not invented by a language model.

03Visible assumptions

Inputs, transformations, parameters and limitations remain inspectable.

04User conclusion

AI can organise and explain evidence. It does not make investment decisions.

02

FIVE-MINUTE START

Your first analysis

  1. 1
    Open Analysis Studio

    The Studio is the default Analytics view and contains every app in one workspace.

  2. 2
    Choose an analysis app

    Select the app whose question matches yours. Avoid choosing a method only because you recognise its name.

  3. 3
    Load or select data

    Upload CSV/XLSX, paste a table, or load a public series. Text and option apps use their own specialised inputs.

  4. 4
    Describe your question

    Plain English is enough. Mention the variables, comparison, time horizon or evidence set you care about.

  5. 5
    Review and run the method

    Edit steps and parameters before approval. Then inspect results, robustness and limitations.

  6. 6
    Pin or export

    Save useful findings to the Notebook or export a plan and analysis record.

03

INSIDE THE STUDIO

A simple research IDE

Analysis kernel readyPrivate browser execution
ANALYSIS APPSChoose a method familySwitch without losing dataOpen specialised canvases
WORKSPACE

Ask → edit → run

Your question becomes an editable methodology. Column choices and parameters stay visible.

RESULTSMetricsInterpretationRobustnessLimitations
Analysis Studio
The guided, question-first environment that can launch every app.
Apps
Focused workspaces for running one family of methods in depth.
Playground
A chat and workflow surface for chaining supported methods across datasets.
Notebook
Persistent browser-local research memory for findings and your own notes.
04

DATA AND CLEANING

Get the data trustworthy first

The same dataset workspace is shared across quantitative apps. Original data is preserved; approved cleaning actions form a reversible pipeline.

Load→Inspect→Clean→Profile→Analyse

Before running a method

  • Confirm units, frequency and time ordering.
  • Inspect missing values and duplicate rows.
  • Check whether numbers were imported as text.
  • Decide whether an outlier is an error, an event or a valid observation.
  • For joined series, verify keys and frequency alignment.
05

ANALYSIS APPS

Choose by question, not by complexity

📋

Summary & Distribution

Understand one variable before testing it.

Input
One numeric column
Output
Centre, spread, shape, normality and missingness
🔗

Regression & Correlation

Measure how two variables move together.

Input
Two or more numeric columns (a cluster, weight or 0/1 outcome column for some methods)
Output
Pearson, Spearman, OLS with Newey–West errors, multiple and ridge regression, wild cluster bootstrap, weighted regression, logit and probit, quantile regression, Fama–MacBeth premia
⚖️

Group Comparison

Compare two independent groups or paired measurements.

Input
Outcome + group, or two paired columns; outcome + treated group + period for difference-in-differences
Output
Effect size, parametric and rank-based tests, equivalence (TOST), power and minimum detectable effect, difference-in-differences with a parallel-trends test
⏱️

Causality & Time Series

Study ordered observations and predictive timing.

Input
One or two ordered series
Output
Stationarity, autocorrelation, Granger, cointegration, VAR and impulse responses, break-date scan, panel unit-root tests, ARIMA forecasts tested out of sample
💰

Risk & Portfolio

Measure historical risk and benchmark exposure.

Input
Prices or returns; optional benchmark or event markers
Output
Volatility, drawdown, VaR, CVaR, beta, alpha, rolling exposure, event studies and a GARCH volatility model
📉

Technical Analysis

Describe historical price behaviour.

Input
One ordered price series
Output
RSI, MACD and Bollinger bands
🗞️

Qualitative & Research

Organise evidence from documents and text.

Input
News, filings, calls or interview text
Output
Codes, themes, tone screens, quotations and evidence records
🧮

Derivatives & Options

Inspect theoretical option values and payoff structures.

Input
Contract and model assumptions
Output
Black–Scholes value, Greeks and payoff diagrams
06

HOW AI HELPS

AI is the interface, not the calculator

AI can
  • Translate a question into editable analysis steps
  • Explain method choices and terminology
  • Identify metadata and data-quality concerns
  • Summarise computed results and caveats
  • Organise text evidence and themes
AI cannot
  • Invent or privately recompute statistics
  • Change data without approval
  • Present association as real-world causation
  • Recommend buying, selling or holding
  • Provide targets, allocations or rebalancing instructions

When a question is clear, structured rules select a compatible tool without an AI call. AI is reserved for ambiguity, planning and explanation. Calculations always run through the common analysis kernel or a specialised deterministic canvas.

07

CONNECT CLAUDE OR CHATGPT

Run the same analysis kernel from your own AI tool

Instead of working inside the Studio, you can point an MCP-capable AI client — Claude Desktop, claude.ai, or another MCP client — at Signal Desk's analysis server and work through the same upload → clean → analyse steps in conversation. It runs the identical deterministic kernel the Studio uses, not a separate or looser calculation path.

1Add the connector

In your AI tool's connector settings, add a custom connector and paste https://signaldesk.co.in/api/mcp as the server URL.

2Click Connect

Your tool discovers the login flow automatically and opens Signal Desk's sign-in page.

3Log in and allow

Sign in with your Signal Desk account, review what the connector can do, and click Allow. You're back in your AI tool, connected.

4Upload & profile

Paste or describe your data — it profiles column types, missing values and outliers before touching anything.

5Clean, one step at a time

The AI asks how you want missing values, duplicates and outliers handled — nothing is decided for you.

6Analyse & save

Run one named method at a time on columns you chose; save the finding back to your account once you're satisfied.

Older or simpler MCP clients that don't support login-based connectors can still use a personal access token from /extension as a static Authorization: Bearer header instead.

Every dataset uploaded this way is a real, persistent workbook — the same idea as a Python script or an Excel file, not just something addressed by an API call. See its current data, full cleaning history and any saved findings any time at /analytics/workbook, independent of the chat that built it.

08

BUILDING & SAVING MODELS

From a one-off result to a model you can keep

Everything in section 07 — the MCP connector — can also do something a plain "run this test" tool can't: fit a regression model, save it permanently, reopen it next week, and score brand-new rows with it. This section teaches that capability the way an econometrics course would — one running example, building in complexity from a straight line to instrumented panel data.

The running example

Suppose you're a research analyst with an annual panel of six Indian banks — two public-sector, two private, two foreign — from FY2014 to FY2025. For each bank-year you have net interest margin (nim_nii_avg_assets), the non-performing asset ratio (net_npa_ratio), bank size (ln_total_assets, log of total assets), and capital adequacy (crar). Your question: does asset quality erode profitability, once you account for size and capital? Every example below answers a version of that same question, so you can see exactly what changes — and why — as the method gets more sophisticated.

Two ways to ask: run_analysis vs. build_model

run_analysis (section 07, step 6)
A one-off calculation. You get an answer and can save the write-up as a "finding," but the fitted coefficients themselves aren't kept as a reusable object — running it again refits from scratch.
build_model (this section)
Fits once, then persists the coefficients under a model ID. You can list your saved models later, reopen one to see exactly how it was specified, and — for most kinds — feed it a brand-new row to get a prediction, without refitting anything.

The six kinds, at a glance

Think of these as six lenses on the same question, roughly in the order a course would teach them.

📈

Linear (OLS)

The starting point for any relationship between numbers — how much does the outcome move when a predictor does?

Needs
An outcome column and one or more numeric predictor columns
Returns
Coefficients, standard errors, R², an F-test, VIF, and heteroskedasticity/normality/functional-form diagnostics
🧲

Ridge

For when two or more predictors are so similar the model can't tell their effects apart cleanly (high VIF).

Needs
Same as linear, but needs at least two predictors
Returns
Coefficients shrunk toward each other, the chosen penalty (λ), and how much each one moved from its OLS value
🏢

Fixed effects

For panel data — the same entities observed repeatedly — when you want to strip out everything permanent about each one.

Needs
Outcome + predictors + a date column + an entity column
Returns
Within-entity coefficients, plus a Hausman test telling you whether random effects would have been valid instead
🎲

Random effects

The more efficient sibling of fixed effects — valid only when entity differences are unrelated to your predictors.

Needs
Same as fixed effects
Returns
GLS coefficients including an Intercept (fixed effects has none), plus the same Hausman test
🪝

IV — 2SLS

For when a predictor is suspected endogenous — tangled up with the very thing you're trying to explain.

Needs
Outcome, the suspect (endogenous) predictor, and at least one instrument for it
Returns
Instrumented coefficients, a weak-instrument check, an endogeneity test, and an overidentification test if you have spare instruments
🧪

IV — GMM

The more efficient sibling of 2SLS when you have more instruments than the bare minimum.

Needs
Same as IV — 2SLS
Returns
The same diagnostics as 2SLS, computed via the Generalized Method of Moments instead

Worked examples

Open each one for the question it answers, what you'd ask for, and how to read what comes back.

1. Linear (OLS) — does NPA ratio predict margin at all?

Ask for: a linear model with outcome nim_nii_avg_assets and predictors net_npa_ratio, ln_total_assets, crar. Since your six banks are observed repeatedly, also pass an entity column (bank) as clusterColumn — otherwise the model wrongly assumes every bank-year is an independent observation, when in fact a bank's own errors are correlated across its own years.

Read it as: the coefficient on net_npa_ratio is the estimated change in margin per one-unit rise in the NPA ratio, holding size and capital fixed. Check the clustered p-value, not the plain OLS one, once you've clustered. Then check maxVif — above 10 means size and capital are too entangled to trust their individual coefficients — and the new residualDiagnostics: a Breusch-Pagan/White rejection means your standard errors (even the clustered ones) may still understate uncertainty; a RESET rejection means the true relationship probably isn't a straight line.

2. Ridge — my predictors are fighting each other

When you'd reach for this: the linear model above came back with VIF over 10 on ln_total_assets and crar — larger banks in your sample also happen to hold more capital, so the model can't cleanly separate "size effect" from "capital effect." Dropping one throws away real information; ridge keeps both but shrinks each coefficient toward zero in proportion to how collinear it is.

Read it as: compare each predictor's shrinkagePct. A predictor that barely shrank wasn't actually the collinear one; a predictor that shrank heavily was. There are no classical p-values here — ridge trades a small, known bias for a large reduction in variance, so judge it by shrinkage and by how much the sign and rough size of each coefficient held up, not by significance stars.

3. Fixed effects — strip out everything permanent about each bank

Why you'd want this instead of clustering: clustering (example 1) fixes the standard errors but still assumes each bank's average margin, once size and capital are accounted for, is the same. That's a strong assumption — maybe one public-sector bank is just permanently less efficient for reasons your data can't see. Fixed effects removes that: it estimates the relationship using only each bank's deviations from its own average over time.

Ask for: kind fixed_effects, with dateColumn: "fiscal_year" and idColumns: ["bank"] — a panel model has to know both which period and which entity each row belongs to.

Read it as: there's no Intercept — each bank's permanent level is absorbed, not reported — so this can't score a brand-new row (see "Predicting," below). The Hausman test alongside it answers a different question: was fixed effects even necessary? If it doesn't reject, your bank-specific differences probably aren't correlated with NPA/size/capital, and random effects (example 4) would have given you a more efficient (lower-variance) estimate for free.

4. Random effects — when the Hausman test says you didn't need fixed effects

Ask for: kind random_effects, same columns as example 3. It runs both estimators internally and reports one Hausman test either way, so you can build this first and let the test tell you which coefficients to actually trust.

Read it as: if Hausman rejects (p < .05), trust the fixed_effects coefficients instead — random effects is inconsistent whenever entity differences correlate with your predictors, which is exactly what rejection means. If it doesn't reject, random effects is valid and more efficient, and — unlike fixed effects — it does report an Intercept, so it can be used with predict_with_model.

5. IV / 2SLS — what if NPA ratio isn't really exogenous?

The problem this solves: every model above assumes net_npa_ratio is exogenous — that it isn't itself a symptom of the same hidden cause as low margins. That's often false: a bank might report more NPAs precisely because it's already struggling for unrelated reasons (reverse causality), or some unmeasured management-quality factor could drive both. If so, every coefficient above is biased, no matter how many controls you add.

Ask for: kind iv2sls, endogenousColumns: ["net_npa_ratio"], and an instrument — a variable correlated with NPA ratio but with no direct effect on margin except through it. (A real instrument takes domain judgment; this is illustrative, not a recommendation: something like a regional stress indicator that affects asset quality but doesn't directly touch margin-setting.) crar can serve as an exogenous control alongside it via predictorColumns.

Read it as, in this order: first weakInstruments — a partial F-statistic under 10 (the Stock-Yogo rule of thumb) means your instrument barely moves the endogenous variable, and everything downstream is unreliable. Then endogeneityTest (Wu-Hausman) — if it doesn't reject, plain OLS wasn't actually biased here, and it's more precise; use it instead. Only if both pass should you trust the IV coefficient over the olsCoefficient shown alongside it. If you supplied more instruments than endogenous regressors, also check overidentification (Sargan) — a rejection there means at least one instrument is probably invalid.

6. IV / GMM — and combining IV with panel fixed effects

GMM: ask for kind iv_gmm with the same arguments as example 5. It's the more statistically efficient choice specifically when you have more instruments than endogenous regressors (overidentified) — with exactly one instrument for one endogenous regressor, 2SLS and GMM coincide.

Panel IV: if your instrument's validity itself depends on removing permanent bank-level differences — not just because the data happens to have banks in it — add panelEntityEffects: true and idColumns: ["bank"]. This demeans the outcome, controls, endogenous regressor and instrument by bank before running 2SLS/GMM on what's left (the technique statisticians call "within-IV"). Like fixed effects, entity effects are absorbed rather than reported, so this can't be used with predict_with_model either. Reach for it specifically when a plain IV instrument seems correlated with something permanent about the bank — not as a default.

Reading the diagnostics: a glossary

Clustered standard errors
Corrects uncertainty estimates for the fact that a bank's own observations aren't independent of each other across years. Always prefer the clustered p-value over the plain one once you've clustered.
VIF (Variance Inflation Factor)
How much a predictor's standard error is inflated by its correlation with the others. Above 10 is the conventional "don't trust this coefficient alone" threshold.
Hausman test
Fixed vs. random effects, decided by evidence rather than habit. Rejecting means entity effects correlate with your predictors — use fixed effects. Occasionally the test itself breaks down (reported as "inconclusive") when fixed and random effects diverge sharply but the classic formula's own assumption fails — read the note, don't ignore it.
Weak-instrument test
A first-stage partial F-statistic. Below 10, your instrument barely explains the endogenous regressor and IV estimates become unreliable — closer to biased OLS than to the truth.
Endogeneity test (Wu-Hausman / C-statistic)
Was instrumenting even necessary? If it doesn't reject, plain OLS and IV don't meaningfully disagree, and OLS is more precise.
Overidentification (Sargan / J-statistic)
Only computed when you supply more instruments than endogenous regressors. Rejecting suggests at least one instrument is invalid — correlated with the error term after all.
Heteroskedasticity (Breusch-Pagan & White)
Is residual variance constant? Both are reported because Breusch-Pagan only catches patterns linear in your predictors — White additionally catches variance that depends on a predictor squared, which Breusch-Pagan can miss entirely.
Normality (Jarque-Bera)
Are residuals approximately normal? Rejection matters less as your sample grows (by the central limit theorem) but is worth noting in a small panel.
RESET test
Linear models only. Rejection suggests the true relationship isn't a straight line — a predictor might need a log, a square, or an interaction term instead.

Choosing a model: ask yourself, in order

  1. 1
    Is my outcome one number predicted by others, with no repeated entities?

    Start with linear. If predictors are highly collinear (VIF > 10), move to ridge instead of dropping one.

  2. 2
    Do I have the same entities observed repeatedly over time?

    This is panel data. Cluster your standard errors at minimum (pass clusterColumn to linear); consider fixed or random effects if you suspect permanent, unobserved differences between entities.

  3. 3
    If panel: does the Hausman test reject?

    Rejects → fixed effects. Doesn't reject → random effects (more efficient, and predictable).

  4. 4
    Do I suspect a predictor is endogenous — caused by, or jointly caused with, my outcome?

    Reverse causality, omitted variables and measurement error are the three classic reasons. If you have a credible instrument, move to IV — 2SLS or GMM.

  5. 5
    Is that endogenous predictor also entangled with permanent entity differences?

    Add panelEntityEffects to your IV model rather than treating panel and endogeneity as separate problems.

Predicting with a saved model

Once a model is saved, feed it new rows (values for each predictor) and it returns a prediction, using the exact same coefficients — never a re-derived, hand-computed guess.

Does it actually predict, or does it just fit?

A model can explain its own sample well and still fail on data it hasn't seen — the classic overfitting trap. For linear and ridge, pass testFraction (say, 0.2) and the model fits on the remaining 80% of rows, then reports out-of-sample R² on the 20% it never saw. A much lower out-of-sample R² than the in-sample one is the tell that your fit was partly memorising noise, not signal.

09

READING RESULTS

Read the evidence in the right order

1Sample and data quality

How many observations were usable? Are ordering, grouping and missingness credible?

2Effect or magnitude

How large is the measured relationship, difference, exposure or risk?

3Uncertainty

What do the interval, p-value or confidence label say about sampling uncertainty?

4Diagnostics

Do residuals, stationarity, robustness or sensitivity checks weaken the result?

5Limitations

What can this method and dataset not establish?

10

REPRODUCIBILITY

Make every result inspectable later

A defensible analysis record includes the research question, source data, dataset fingerprint, approved cleaning steps, method, selected columns, parameters, engine version, metrics and limitations.

{}Plan JSON

Machine-readable methodology, app, steps and parameters.

MDAnalysis record

Human-readable methods and results for reports or review.

📓Notebook

Saved findings with your own interpretation and provenance.

CSVCleaned data

The transformed table used by the analysis.

11

PRIVACY AND BOUNDARIES

Private by default

Inside the Studio, uploaded datasets, cleaning pipelines, autosaves and Notebook entries stay in the browser and calculations run locally. The one exception is the MCP connector above: since an external AI client needs to read your data back across a conversation, that data is stored under your account on the server until you delete it. The Panel & IV models card (fixed effects, random effects and instrumental variables) also runs in the browser, so those fits never send data anywhere either.

Browser-localUploads, calculations and autosaves
Approval-gatedCleaning and methodology changes
Analysis onlyNo investment recommendations
12

FAQ

Common questions

Do I need to know which statistical test to use?

No. Start with the research question and review the proposed methodology. The descriptions and assumptions remain visible so you can make an informed choice.

Does AI calculate the statistics?

No. Registered quantitative tools execute through the deterministic analysis kernel. AI may explain the results it receives.

Can I use the result as a buy or sell signal?

No. The platform measures data and evidence. It does not recommend transactions, allocations, target prices or investment decisions.

Why did a method refuse to run?

Common causes are insufficient observations, incompatible column types, identical variables, missing time ordering or assumptions that the selected data cannot satisfy.

How do I continue an analysis later?

Use Save project to export the data, cleaning pipeline, lineage and Notebook. Restore that project in a future session.

What's the difference between a "finding" and a saved model?

A finding (section 07) is a write-up of a one-off result — useful as a record, but not something you can hand new data to. A saved model (section 08) keeps the actual fitted coefficients, so you can reopen it, compare it to other specifications, and — for most kinds — score a brand-new row with predict_with_model.

Why can't I predict with my fixed-effects model?

Fixed effects (and panel IV with panelEntityEffects) work by removing each entity's permanent level from the data before fitting — that level is never estimated as a number you could add back in for a new row. Build a random-effects or plain (non-panel) model instead if predicting on new data matters to you.

My weak-instrument test failed — now what?

A partial F-statistic under 10 means your instrument doesn't move the endogenous predictor enough to identify its effect reliably. Look for a stronger instrument rather than trusting the coefficients as reported — a weak instrument can produce estimates further from the truth than plain OLS.

Ready to work with your own question?

Open the Studio and build the method first.

Launch Analysis Studio →