# Regress Desk > Paste a data table and a patsy formula and get an ordinary least squares fit computed in the browser exactly as statsmodels computes it, then a plain reading of what the model does and does not support, or a statsmodels script that reproduces the fit and applies the fixes. https://regress-desk.skillsafe.ai/ ## What it does - Free, in the browser, nothing uploaded: reads CSV, TSV, semicolon- or pipe-separated tables with a header row (up to 100,000 rows, 60 columns; currency signs, thousands separators, percent signs, accounting negatives, decimal commas in semicolon tables and dash/dot/#DIV/0! cells are cleaned first, and every cleaning is reported); cells that pandas.read_csv treats as missing (empty, NA, NaN, null, None, N/A ...) are missing here too. - Formulas as in smf.ols: numeric columns, C(group) (text columns are read as categories automatically), np.log(x), I(x ** 2), two-way numeric interactions a:b, Q("column name"), "- 1" to drop the intercept, np.log(y) as the outcome. - statsmodels conventions: patsy treatment coding with the first sorted level as reference (full coding when the intercept is dropped), patsy term order (categoricals first), rows with a missing value in a used column dropped, least squares by Householder QR. - Reports what statsmodels' summary() reports - coefficients, standard errors, t, P>|t|, 95% intervals, R-squared, adjusted R-squared, F and its p, log-likelihood, AIC, BIC, Omnibus, Jarque-Bera, skew, kurtosis, Durbin-Watson, condition number - plus HC3 robust standard errors (z statistics, as cov_type="HC3"), variance_inflation_factor, the robust (Koenker) Breusch-Pagan test, and OLSInfluence leverage, externally studentized residuals and Cook's distance. - Checked against statsmodels 0.14.6 on 1,000 random models (one to four numeric predictors, categoricals, logs, squares, interactions, missing cells, no-intercept fits): identical term names, observation counts and degrees of freedom; every statistic within 2e-5 relative (within 6e-8 when the design is well conditioned). - Grades each term's evidence (clear, fragile, none) and six assumption checks (constant variance, normal residuals, independence, collinearity, influence, outcome type), and flags heteroskedasticity, HC3 changing a 5% call, non-normal residuals, autocorrelation, VIF above 5, a large condition number, influential rows and rows with leverage 1, 0/1 and count outcomes, thin data, rare categorical levels, no intercept, a weak F-test, near-perfect fits, dropped rows, a formula with no predictors and a table longer than the row limit (only the first rows read). - Residuals-against-fitted plot; coefficient, residual/influence and Markdown exports; a statsmodels-style text summary. - Free reproduction: a data.csv of the table as fitted (cleaned numbers, comma-separated) and a fixed statsmodels script that refits FORMULA from it and checks every coefficient against the browser's values. - Free comparison loop: pin a fit as the baseline, edit the formula, and see the coefficients side by side, adjusted R-squared, AIC and BIC, and the nested-model F-test when one formula contains the other on the same rows. ## Paid lanes (model gpt-terra, signed-in users) - task "interpret": verdict (sound, fixable, respecify), a reading of every term with the browser's evidence grade, what each assumption check means for this fit, the user's claims judged against the fit, and what the fit cannot show. - task "script": the fixes (HC3, rows to inspect, a collinear term, a log transform, logit/Poisson for 0/1 or count outcomes) and one complete statsmodels script that fits the same FORMULA, checks every coefficient against an EXPECTED dict of the browser's values, prints VIF, Breusch-Pagan and Cook's distance, then applies the fixes. - Every reply is reconciled in the browser: flags answered once, verdict no looser than the browser's read, evidence grades and assumption statuses unchanged, every number in the prose present in the browser's facts or the user's notes, and for scripts the formula, the EXPECTED values, the allowed imports, HC3 when heteroskedasticity is confirmed and dropped rows being ones the browser named. ## Limits - A coefficient is a conditional association among the rows given - not a causal effect, and not a prediction outside each predictor's range. - The model never refits or recomputes a number; the table itself is never sent to a run, only the fit's statistics and the most influential rows. - OLS only. For a 0/1 outcome the page says so and the script lane writes smf.logit; it does not fit it in the browser. ## Pages - App: https://regress-desk.skillsafe.ai/ - API tutorial: https://regress-desk.skillsafe.ai/api.html ## Source Derived from the agent skill @k-dense-ai/statsmodels (https://skillsafe.ai/skill/@k-dense-ai/statsmodels), part of k-dense-ai/scientific-agent-skills by K-Dense Inc. (https://github.com/k-dense-ai/scientific-agent-skills). statsmodels: S. Seabold and J. Perktold, "statsmodels: Econometric and statistical modeling with python", Proceedings of the 9th Python in Science Conference, 2010. The example data are illustrative, not measured.