UNPKG

als-statistics

Version:

Modular JS statistics toolkit for Node.js and the browser: descriptive stats, correlations (Pearson/Spearman/Kendall), t-tests & ANOVA (Student/Welch), reliability (Cronbach’s alpha), regression (linear/logistic), clustering (DBSCAN/HDBSCAN), and table/co

73 lines (51 loc) 2.92 kB
<title>Analyze — Regression · Usage</title> <description>Stepwise wrapper for linear and logistic regressions. Add moderators (interactions) or candidate mediators by extending steps.</description> <keywords>linear regression, logistic regression, stepwise, interaction, moderator, mediator</keywords> # Regression — practical usage The `Regression` wrapper builds a **sequence of models** (*steps*). Start with a baseline, then call `next([...])` to add more predictors. Interaction terms are supported via the **`'X*Z'`** notation. ```ts new Regression(data, { yName: string, xNames?: string[], type?: 'linear'|'logistic' }) reg.next(newPredictors: string[]): this reg.steps: Array<RegressionBase> // each step is a fitted model reg.results: Array<Record<string, any>> // array of .result from each step reg.htmlTables: string // combined HTML of all steps ``` ## A) Linear — baseline, then moderator (interaction) ```js import { Analyze } from 'als-statistics'; const { Regression } = Analyze; const data = { X:[1,2,3,4,5], Z:[0,1,0,1,0], Y:[2,3,6,7,10] }; // Step 0: Y ~ X const reg = new Regression(data, { yName:'Y', xNames:['X'], type:'linear' }); // Step 1: add moderator Z and interaction X*Z reg.next(['Z', 'X*Z']); const step0 = reg.steps[0].result; // { step, n, Variable[], Coefficient[], StdError[], pValue[] } const step1 = reg.steps[1].result; // includes the 'X*Z' row console.log(step1.Variable.includes('X*Z')); // true ``` ## B) “Mediator‐like” step (add M, compare steps) There’s **no built-in mediation test** (Sobel/bootstrapping). However, you can *model* a putative mediator by adding it as a predictor on the next step and comparing coefficients/R². ```js const data = { X:[1,2,3,4,5,6], M:[2,4,5,7,7,9], Y:[3,5,7,9,10,13] }; // Step 0: Y ~ X const reg = new Regression(data, { yName:'Y', xNames:['X'], type:'linear' }); // Step 1: Y ~ X + M reg.next(['M']); console.log(reg.steps[0].r2, reg.steps[1].r2); // change in R² console.log(reg.steps[1].result.Variable.includes('M')); // true ``` ## C) Logistic — classification with accuracy ```js const data = { X:[0,1,2,3,4], Y:[0,0,0,1,1] }; const logit = new Regression(data, { yName:'Y', xNames:['X'], type:'logistic' }); const s0 = logit.steps[0]; console.log(s0.result.Accuracy); // in [0,1] console.log(s0.predict(s0.X)); // -> [0/1,...] console.log(s0.predictProba(s0.X)); // -> probabilities in [0,1] ``` ### Notes & tips - If you omit `xNames`, the wrapper uses **all columns except `yName`** as predictors. - `next([...])` creates a **clone** of the previous step’s columns and (if a name contains `'*'`) generates the interaction term by multiplying the two source predictors element-wise. - Linear steps expose `StdError[]` and `pValue[]`. Logistic steps expose `Accuracy`. - The wrapper and cores are **deterministic** for the same inputs.