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

141 lines (108 loc) 4.13 kB
## Table ### Quick API snapshot ```js import { Table } from 'als-statistics'; const t = new Table(data?, { name?, minK?, alignColumns? }) // properties/getters t.n // rows count t.k // columns count t.columns // map of Column t.colNames // string[] t.colValues // Record<string, number[]> t.json // plain object view // row/column transforms (in-place; use clone() to branch) t.addColumn(name, values, labels?) -> Column t.deleteColumn(name) -> this t.addRow(row, index?) -> this t.addRows(rows, index?) -> this t.deleteRow(index) -> this t.alignColumns() -> this // data shaping t.recode(colName, mapper, newColName?) -> void t.compute(fn, name) -> Column t.filterRows(indexes) -> this t.filterRowsBy(colName, predicate) -> this t.sortBy(colName, asc=true) -> this t.clone(name?, colFilter=[]) -> Table t.splitBy(colName, labels?) -> Statistics t.transpose(colNames=[]) -> Table t.where(rowPredicate) -> number[] t.rows(withKeys=true) -> object[] | any[][] t.htmlTable(colFilter=[], options?) -> string t.descriptive(...metricNames) -> Object{} // Descriptive statistics for all columns // analysis shortcuts t.correlate(...colFilter) -> Correlate t.compareMeans(...colFilter) -> CompareMeans t.dbscan(colFilter, options?) -> Dbscan t.hdbscan(colFilter, options?) -> Hdbscan t.regression(yName, xNames, type='linear'|'logistic') -> Regression t.linear(yName, xNames) t.logistic(yName, xNames) ``` > Tip: operations on `Table` are **mutable** by default (they change the same instance). Use `t.clone(...)` to branch a copy for “what-if” scenarios. --- ### Constructing and alignment ```js import { Table } from 'als-statistics'; const t = new Table( { gender: [0,1,0,1,1,0], age: [21,22,20,23,19], score: [62,75,70,81,64,78] }, { name: 'Survey', alignColumns: true, minK: 2 } ); // When alignColumns=true (default), columns are trimmed to the shortest length. // You can turn this off via { alignColumns: false } if you need ragged columns. console.log(t.n, t.k, t.colNames); // rows, columns, names // Access Column objects const scoreCol = t.columns['score']; console.log(scoreCol.mean); ``` ### Rows & columns (synchronization) ```js // add/delete columns t.addColumn('bmi', [22.1, 24.0, 23.7, 25.3, 21.8]); t.deleteColumn('age'); // add rows (object keys match column names) t.addRow({ gender: 0, score: 71, bmi: 23.1 }); t.addRows([ { gender: 1, score: 68, bmi: 24.2 }, { gender: 0, score: 77, bmi: 22.7 } ]); // delete rows t.deleteRow(0); // re-align explicitly if needed t.alignColumns(); ``` ### Data shaping ```js // recode values (e.g., 0/1 -> 'F'/'M'), optionally write to a new column t.recode('gender', g => (g === 0 ? 'F' : 'M'), 'genderLabel'); // compute a derived numeric column t.compute(row => row.score / (row.bmi ?? 1), 'scorePerBmi'); // filter & sort (in place) t.filterRowsBy('score', s => s >= 70); t.sortBy('score', /*asc=*/false); // pick rows by predicate (returns indices) const adultIdx = t.where(row => row.bmi >= 22 && row.bmi <= 25); // grab data in different shapes const rowsAsObjects = t.rows(true); const rowsAsArrays = t.rows(false); const html = t.htmlTable(['genderLabel','score','bmi']); ``` ### Split & analyze ```js // split one column into groups, then run an analysis const groups = t.splitBy('genderLabel'); // => { F: number[], M: number[] } import { Analyze } from 'als-statistics'; const test = new Analyze.CompareMeans(groups).independentWelch('F', 'M'); console.log({ t: test.t, df: test.df, p: test.p }); // or use shortcuts directly from Table const corr = t.correlate('score','bmi').pearson(); console.log({ r: corr.r, p: corr.p }); ``` ### Transpose and clone ```js // transpose a subset of columns (handy for certain distance/clustering operations) const t2 = t.transpose(['score','bmi']); // clone to branch a scenario without touching the original const tClone = t.clone('scenario: filtered', ['score','bmi']); ``` ---