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.
Begin with what you want to learn, not whichever test looks interesting.
Statistics are produced by a versioned analysis kernel, not invented by a language model.
Inputs, transformations, parameters and limitations remain inspectable.
AI can organise and explain evidence. It does not make investment decisions.
FIVE-MINUTE START
Your first analysis
- 1Open Analysis Studio
The Studio is the default Analytics view and contains every app in one workspace.
- 2Choose an analysis app
Select the app whose question matches yours. Avoid choosing a method only because you recognise its name.
- 3Load or select data
Upload CSV/XLSX, paste a table, or load a public series. Text and option apps use their own specialised inputs.
- 4Describe your question
Plain English is enough. Mention the variables, comparison, time horizon or evidence set you care about.
- 5Review and run the method
Edit steps and parameters before approval. Then inspect results, robustness and limitations.
- 6Pin or export
Save useful findings to the Notebook or export a plan and analysis record.
INSIDE THE STUDIO
A simple research IDE
Ask → edit → run
Your question becomes an editable methodology. Column choices and parameters stay visible.
- 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.
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.
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.
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
HOW AI HELPS
AI is the interface, not the calculator
- 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
- 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.
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.
In your AI tool's connector settings, add a custom connector and paste https://signaldesk.co.in/api/mcp as the server URL.
Your tool discovers the login flow automatically and opens Signal Desk's sign-in page.
Sign in with your Signal Desk account, review what the connector can do, and click Allow. You're back in your AI tool, connected.
Paste or describe your data — it profiles column types, missing values and outliers before touching anything.
The AI asks how you want missing values, duplicates and outliers handled — nothing is decided for you.
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.
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
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
Choosing a model: ask yourself, in order
- 1Is 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.
- 2Do 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.
- 3If panel: does the Hausman test reject?
Rejects → fixed effects. Doesn't reject → random effects (more efficient, and predictable).
- 4Do 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.
- 5Is 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.
READING RESULTS
Read the evidence in the right order
How many observations were usable? Are ordering, grouping and missingness credible?
How large is the measured relationship, difference, exposure or risk?
What do the interval, p-value or confidence label say about sampling uncertainty?
Do residuals, stationarity, robustness or sensitivity checks weaken the result?
What can this method and dataset not establish?
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.
Machine-readable methodology, app, steps and parameters.
Human-readable methods and results for reports or review.
Saved findings with your own interpretation and provenance.
The transformed table used by the analysis.
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.
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.
