About ALS Stats
ALS Stats is an add-on for Google Sheets™ that adds 31 statistical functions. Their names start with STATS_, and they are used like any other Sheets formula.
How it works
- Data. A function takes a range of your sheet whose first row holds the column names. Columns are chosen by name, by pattern or by position. A row of value labels above the names (
male:1,female:2) turns text answers into codes. - Result. The formula returns a block of cells that fills the space below and to the right of it. When the data cannot be analyzed, it returns one cell with the reason.
- Recalculation. Google Sheets™ recalculates a formula when its data or its arguments change; Extensions › ALS Stats › Recalculate STATS formulas recalculates all of them.
- Where it runs. Inside Google Sheets™. The add-on can access only the spreadsheet you use it in; before the first use in a spreadsheet, choose Extensions › ALS Stats › Activate in this file.
- Settings. Extensions › ALS Stats › Settings holds the defaults every formula uses unless it sets its own: decimals, sample or population formulas, the Welch choice, post-hoc method, confidence level.
- Help. Extensions › ALS Stats › Functions list describes every function and links to its page on this site: parameters, examples, what each number of the report means and how it is computed.
The functions
Report functions
Each returns a report: titled tables with the results, below and to the right of the formula cell.
- Regression
- Models: multiple linear regression with hierarchical steps and interactions, binary logistic regression, and bootstrap confidence intervals for regression.
STATS_LINEAR,STATS_LOGISTIC,STATS_BOOTSTRAP - Correlation
- Links between variables: Pearson, Spearman and Kendall correlations, partial correlation with controls, and Cronbach’s alpha for the reliability of a scale.
STATS_PEARSON,STATS_SPEARMAN,STATS_KENDALL,STATS_PARTIAL,STATS_ALPHA - Categorical
- Categorical answers: a contingency table, the chi-square test of association and Cramér’s V.
STATS_CROSSTABS,STATS_CHI2,STATS_CRAMER - Tests (t/ANOVA)
- Compare groups and measurements: the one-sample, paired and independent-samples t-tests, their rank-based alternatives (Wilcoxon, Mann–Whitney, Kruskal–Wallis), one-way ANOVA with post-hoc comparisons, and the Shapiro–Wilk test of normality.
STATS_NORMALITY,STATS_PAIRED,STATS_WILCOXON,STATS_INDEPENDENT,STATS_MANN_WHITNEY,STATS_ANOVA,STATS_KRUSKAL,STATS_ONE_SAMPLE - Summary / CI / Frequencies
- Describe the data: means, spreads, quartiles and other statistics of each column, frequency tables, and the confidence interval of the mean.
STATS_DESCRIPTIVE,STATS_FREQUENCIES,STATS_CI - Workflow
- Several analyses on one range in one formula, returned as one report.
STATS_ANALYZE
Column functions
Each returns new columns, row by row, to use in other formulas.
- Transform
- New columns from existing ones: computed scores, recoded or reversed answers, min–max normalized values, moving averages and z-scores.
STATS_COMPUTE,STATS_RECODE,STATS_NORMALIZE,STATS_MA,STATS_ZSCORES - Prepare
- Reshape the data for other functions: keep only complete rows, split a column into one column per group, rename and pick columns.
STATS_PAIRWISE,STATS_SPLIT_COLS,STATS_COLUMNS
Compared with SPSS
Many numbers are computed as SPSS computes them, and some reports differ from SPSS on purpose. The page of each function lists these details under “How it is computed”.
Computed as in SPSS
- Quartiles and percentiles, as SPSS EXAMINE computes them — so they can differ from the Sheets QUARTILE function.
- The t-tests use sample variances; the one-sample interval is the interval of the difference from the test value.
- One-way ANOVA sums of squares and η² as SPSS ONEWAY prints them; Bonferroni and Scheffé post-hoc tests as in SPSS.
- Rank tests — Mann–Whitney U and W, Wilcoxon, Kruskal–Wallis H: tie corrections and no continuity correction, as SPSS NPAR TESTS.
- Spearman and Kendall p-values, and the Spearman confidence interval, as SPSS NONPAR CORR.
- Linear regression: predictors enter in the written order, a dependent predictor is excluded, Beta, VIF and F Change as SPSS REGRESSION. Logistic regression: Wald, Exp(B) with its interval and the overall percentage of the classification table.
- Cronbach’s alpha on complete rows, with the corrected item-total correlation, as SPSS RELIABILITY.
- Categories ordered as SPSS orders them — numbers ascending, text alphabetically — unless your labels set the order; chi-square warns about small expected counts.
Different from SPSS
- SPSS prints both the classic and the Welch version of the t-test and the ANOVA. ALS Stats chooses one — automatically or as you set it — reports it, and shows the numbers behind the choice.
- Levene’s test is based on the median by default (the Brown–Forsythe variant); the mean-based test that SPSS T-TEST prints is one parameter away.
- Some numbers that SPSS does not print: ω² in the ANOVA, a confidence interval for the partial correlation, a signed Z for the one-sided Wilcoxon test.
- Some parts of SPSS tables are not reported: the Step and Block rows of the logistic omnibus test, the Kolmogorov–Smirnov test next to Shapiro–Wilk, the cumulative percent of frequencies, the scale mean and variance if an item is deleted. The paired t-test reports the test of the differences; the means of each measurement come from STATS_DESCRIPTIVE.
- The Shapiro–Wilk p is always a number; far in the tails SPSS prints “>0.99” or “<0.01” instead. 0.01”>
How we test
The statistics come from a core library that every function of the add-on is built on. The library went through eight rounds of audit and is checked by more than 4,000 automated tests; its results are compared with reference values computed with SciPy and statsmodels, the statistical libraries of Python. The add-on has tests of its own and went through three rounds of audit.
The examples on this site are computed by the add-on’s code when the site is built, so they show what the formula returns.
Change log
Version 2.2 — October 3, 2026
Centered interactions in regressions, and regressions in STATS_ANALYZE no longer repeat the errors of other calls. A formula keeps its old result until the sheet recalculates it — when its data or the formula changes, or with Extensions › ALS Stats › Recalculate STATS formulas.
- New:
centerInteractions, the last parameter ofSTATS_LINEAR,STATS_LOGISTICandSTATS_BOOTSTRAP(and ofLINEAR,LOGISTIC,BOOTSTRAPinSTATS_ANALYZE), also in Settings › Regression defaults. With TRUE an interactiona*bis built from mean-centered values,(a − mean of a) · (b − mean of b): the B ofabecomes its effect at the mean ofb(not wherebis 0), and the VIF of the product drops; B, SE and p ofa*b, R Square and F stay the same. A step with an interaction then has the lineInteraction terms use mean-centered values: …under its coefficients (one row taller, or added to theExcluded: …cell). Empty or FALSE — as before: existing formulas do not change. STATS_ANALYZE: aLINEAR,LOGISTICorBOOTSTRAPreport printed anErrors: …line with the errors of the other calls of the batch, those after it too. Now it shows only its own errors, as the other reports do, so such a report is two rows shorter and the reports below it move up.
Version 2.1 — September 28, 2026
Fixes in recoding and value labels. A formula keeps its old result until the sheet recalculates it — when its data or the formula changes, or with Extensions › ALS Stats › Recalculate STATS formulas.
STATS_RECODE- Every rule works on its own, and new values can be text. A rule with text on the right (
control:group_a) or an empty item (a trailing comma) used to make the whole list silently do nothing, correct rules included; nowcontrol:group_arecodescontroltogroup_a, and an empty item is skipped. - A pair is read by the type of the column. In a text column
Never:1and1:Neverboth recodeNeverto1. In a numeric columnlow:1now recodes1tolow(it used to leave the numbers as they were).low:1:3gives the values from 1 up to 3 the textlow(it was read as "3 → 1" and gave wrong numbers). - A wrong rule shows one error cell that names it, instead of being dropped: no rules at all, an empty side (
:1turned 1 into 0), a bound that is not a number, an empty range (9:3:1), the bare wordreverseafter other rules (1:2,reverse),reverse:1in a numeric column. A pair with text over numeric and text columns at once is an error too: recode them in separate formulas. Such formulas used to show a column; now they show one cell.
- Every rule works on its own, and new values can be text. A rule with text on the right (
- Value labels
- A labels row with spaces around the colon (
Never : 1, Often : 2) works: the space is no longer part of the label. Text answers used to match no label, so the whole column counted as missing.STATS_FREQUENCIESnow shows a row per label instead of one_otherrow (the block is taller: keep the cells below it free);STATS_DESCRIPTIVEcounts the answers inn;STATS_CROSSTABS,STATS_CHI2,STATS_SPLIT_COLSand the tests use the codes. Numeric columns only lose the space in the label (low→low). - An empty lower bound of a range is open, as the help says:
low::0catches every negative value inSTATS_FREQUENCIES,STATS_CROSSTABS,STATS_SPLIT_COLSand in a labels row above the names. Negative values used to go to_other; a_otherrow or group that held only them disappears.
- A labels row with spaces around the colon (
- Values that are not defined are empty, not 0
STATS_COMPUTEwithsum: a row where no item is answered shows.instead of0(also inside an expression,sum*2), so a respondent who answered nothing no longer looks like the lowest score. A row with some answers still sums the answered items.STATS_DESCRIPTIVE:sum,sumOfSquares,sumCenteredSquaresof a column without a single number,slopeandweightof a single value, andweightof a column without spread are empty cells instead of0.
- Help:
STATS_RECODErules by column type, text new values and error messages;labelswith open bounds (low::0); whensum,slope,sumOfSquares,sumCenteredSquaresandweightare empty.
Version 2.0 — September 26, 2026
A major update: many results are now computed as in SPSS, and problems in the data are reported instead of being silently worked around. A formula keeps its old result until the sheet recalculates it — when its data or the formula changes, or with Extensions › ALS Stats › Recalculate STATS formulas.
What to check in your sheets
STATS_SPLIT_COLSnow fills the whole height of the sample: keep the cells below it empty, or the formula shows#REF!.- Cells, charts and formulas that point to single cells of a report: rows can move (category order,
STATS_MA, the Kendall pair report is one row shorter, the paired t-test one row taller) and numbers can change (Levene, posthoc p-values, quartiles). - If you changed
popor the Welch auto thresholds in Settings: they now apply. Withpopon,STATS_DESCRIPTIVEspreads,STATS_ZSCORES,STATS_COMPUTEexpressions withstdorvariance, the Pearson covariance andSTATS_ANALYZEwith them change; other thresholds can switch the Student/Welch choice. MATCHorVLOOKUPby the text of a report: some labels changed (Levene (based on median),Correlation matrix,Mean difference).
All changes
- Changes that can move or resize existing reports
STATS_SPLIT_COLS: every value stays on its respondent's row, and rows of the other groups show.. The block is now as tall as the whole sample: if the cells below it are not empty, the formula shows#REF!until you clear them or move the formula.STATS_FREQUENCIES,STATS_CROSSTABS,STATS_CHI2: categories are ordered as in SPSS: numbers ascending, text alphabetically, or in the order of your labels. The counts are the same, but rows can swap places.STATS_SPLIT_COLS: text groups without labels are in alphabetical order, as the help says (they came in the order they appear in the data, so sorting the sheet reordered the columns). The numbers of each group do not change, but the group columns can swap places; give labels to keep your own order.STATS_MA: each average is shown on the last row of its window, and the first rows show.. The block keeps its height, but the values move down.- Rows of
.(not applicable) at the end of a range are no longer cut as empty: derived columns andSTATS_SPLIT_COLSreach that row (the block is taller by those rows),STATS_FREQUENCIEScounts them innot applicable,STATS_CROSSTABSinNot applicable rows. Only blank cells make the empty tail. - A row of value labels above the names needs at least two labels in each non-empty cell (
low:1,high:2). A header such asT:1,Ratio 1:2orNote:is read as names again: it used to be taken for labels, so the first data row became the names and was lost. A sheet whose labels row has a cell with one label now reads that row as names: add a second label, or give the label in thelabelsparameter. STATS_DESCRIPTIVE: the lineSome calculations made with epsilon 1e-12.appears only when epsilon was put in place of zero or a tiny value (geometricMean,harmonicMean); on positive data the block is one row shorter. The numbers do not change.STATS_ANOVAon two groups no longer builds a posthoc table (it would repeat the ANOVA). One comment line is shown instead.- Cohen's d, the effect size that APA asks for next to a t-test.
STATS_INDEPENDENT: acohenDcolumn in Test results (pooled standard deviation, also after Welch, as SPSS); the block keeps its size.STATS_PAIRED: acohenDrow aftern(dz: the mean difference divided by the SD of the differences, as SPSS), so the block is one row taller and the confidence interval sits one row lower. InSTATS_ANALYZEevery report below a paired t-test moves one row down. STATS_LINEARwith two or more steps: the Regression row of each step's ANOVA table has five more columns, as SPSS Change Statistics —R Square Change,F Change,df1,df2,Sig. F Change— so you can see whether a step adds anything to the one before. The block keeps its height but is wider (up to 11 columns): keep the cells to its right free. One-step models do not change.STATS_ALPHA: the title names the number of rows the alpha rests on (Cronbach Alpha for q (N = 48)): a row with any empty item is left out, which on a long scale can be a large part of the sample. The "Alpha if item deleted" table has one more column,corrected item-total correlation(the item against the sum of the other items, as SPSS), so it is one column wider: keep the cell to its right free. AMATCHby the old title no longer finds it.STATS_KENDALLon two columns (and a Kendall pair inSTATS_ANALYZE): the report is one row shorter. The rowtis gone: it repeatedz, and Kendall's p comes from the normal distribution, not from t.pand the confidence interval now start one row higher, so a cell reference to them points one row too low. tau, z and p do not change; the correlation matrix of three or more columns does not change.
- Changes in numbers and labels
- Quartiles and percentiles (
q1,q3,p10,p90,iqr,percentile) are computed as in SPSS, so they can differ from the SheetsQUARTILEfunction. The median does not change. - Levene's test uses absolute deviations, as it is defined. Its table is now titled
Levene (based on median)orLevene (based on mean), and the automatic Student/Welch choice can switch. STATS_ANOVA: after a Welch ANOVA,Test metricsshows the classic sums of squares, eta² and omega². Tukey and Games–Howell p-values and intervals are exact. Withauto, a classic ANOVA is followed by Tukey.STATS_INDEPENDENT,STATS_PAIRED,STATS_ONE_SAMPLEwith more columns than the test needs use the first two (one-sample: the first) for the whole report. The extra columns used to stay in the title and in the homogeneity test ofSTATS_INDEPENDENT, where they could switch Student/Welch and change t, df, p and the interval; inSTATS_PAIREDthey removed rows, and a text column among them was an error.- Correlations on very few common rows leave a cell empty instead of a value that means nothing: the statistic and p below 3 rows (they showed
0,Infinityor1), the confidence interval below 4 rows (it showed the pointr … r). Matrix pairs with few common answers the same. The block keeps its layout. STATS_ANOVAposthoc:thas the sign of the mean difference (group1 − group2), so pairs with a negative difference show a negativet(it was always positive). p, Adjusted p and the interval do not change.- Spearman intervals are slightly wider, and Kendall p-values have no continuity correction (both as in SPSS).
- Kendall confidence intervals use the Fisher transform (variance
0.437/(n − 4)) and narrow as tau approaches ±1: forn = 10,tau = 0.9the interval is0.737 … 0.964instead of0.413 … 1. They need 5 common rows. tau, z and p do not change. - Values that cannot be computed are now empty cells instead of
0: skewness and kurtosis of too few or equal values, a correlation with a constant column, alpha of items without spread, and interval bounds for a single value. STATS_DESCRIPTIVE: a metric that fails for a column (percentile.150) leaves its cell empty instead oferror 0, and theErrors:line readsx: percentile.150 - q must be in [0,100](it was0:x:percentile.150 error - …).- Report labels spelled right: correlation matrices say
Correlation matrixandCorrelation data(wereCorelation …), the posthoc table ofSTATS_ANOVAsaysMean difference(wasMean differencies). AMATCHorVLOOKUPby the old text no longer finds these cells. - Very small p-values are shown as they are (for example
2.08E-24) instead of0. STATS_COMPUTEreads the whole expression: decimals (score*0.5), exponents and powers of brackets are computed correctly. A row with a missing value gives..- A number stored as text now always counts as a number (before, only when the whole row was numeric), and checkboxes count as
1/0. STATS_LOGISTIC:lambdanow actually penalizes the model.STATS_PARTIALwith a perfect correlation (1or-1) and a one-sidedalternative:Significancefollows the direction of the hypothesis, as inSTATS_PEARSON. A correlation of-1with"greater"(or1with"less") now shows1, not0: the relation goes the other way, so it is not significant. Two-sided and every|r| < 1do not change.STATS_LINEARandSTATS_LOGISTICwithlambdaabove 0 (ridge) say in the report that the model tests are not valid for a penalized model: the line under Model Summary readsCalculated with lambda 1. F and Sig. are not valid tests of a penalized (ridge) model., and the logistic header readsOmnibus Tests of Model Coefficients (not a valid test with lambda > 0). The numbers stay, and the blocks keep their size; aMATCHby the old text of these two cells no longer finds them. Withlambda0 nothing changes.STATS_DESCRIPTIVE:flatnessno longer uses epsilon — it is the geometric mean of the values as they are over their mean, so it always stays between 0 and 1 (tiny values were raised to epsilon in the geometric mean but not in the mean, and the ratio could come out above 1). A zero among the values now gives exactly0instead of a tiny number that depended on epsilon, andflatnessalone no longer adds the lineSome calculations made with epsilon …: such a block is one row shorter.STATS_RECODEwith"reverse,…"(the bare wordreversefirst, other rules after it) reverses the scale, as"reverse"; it used to apply only the other rules (1, 2, 3with"reverse,1:2"gave1, 1, 3, now3, 2, 1).
- Quartiles and percentiles (
- Clear messages instead of misleading reports
- A formula shows one cell that explains the problem: a column name that does not exist (
Column nope does not exist), two columns with the same header, a logistic regression Y not coded 0 and 1, a dependent variable without variance, a parameter out of range (for exampleciLevel95 instead of 0.95), or a misspelled option. - An empty header cell over values shows
The name of column 2 is empty: a column with values needs a namein every formula on that range, even when the column is not selected; it used to get the namecolumn1. Give the column a name, or leave it out of the range. An empty right edge of the range (no name, no values) is fine. - Text columns without value labels are no longer analysed as numbers. A list of columns skips them with a note, and a test on a pair of columns or a model shows an error. Add value labels or recode the column to numbers.
- A column filter that selects no column (a regular expression without a match, index numbers past the end, exclusions that remove everything) shows one error cell that names the filter and the columns of the range:
colFilter "/^Q/" selects no columns (columns: q1, q2, t).STATS_COLUMNS,STATS_RECODE,STATS_ZSCORES,STATS_NORMALIZE,STATS_MA,STATS_SPLIT_COLSused to show#REF!, reports an empty block, testsneed at least 2 observations. STATS_PEARSON,STATS_SPEARMAN,STATS_KENDALLon one column show the error as the other tests do:Pearson Test requires at least 2 columns, got: a(it wasError:Minimum two samples required. Got:a), naming the text columns that were skipped.STATS_LINEAR,STATS_LOGISTIC,STATS_BOOTSTRAP: an exclusion insteps("x1,x2|-x1") showsStep "-x1": exclusions are not supported in regression steps - list the predictors to add. It used to remove the column from the whole table, so the first step lostx1too.welchandposthocread0/1asFALSE/TRUE:welch0is Student (it silently gave Welch),posthoc0turns the table off and1isauto(both were errors).STATS_ALPHA:ifItemsDeletedandstandardizedacceptTRUE/FALSE,1/0and their text; anything else showsifItemsDeleted must be TRUE or FALSE (or 1, 0), got "no". Before, any text except"false"and"0"turned the option on ("no"built the "if item deleted" table).STATS_LINEAR,STATS_LOGISTIC,STATS_BOOTSTRAPwith an empty Y showLinear Regression needs the predicted column (yName)instead ofThe predicted column not found in tableorrequires at least 2 groups.STATS_COMPUTEwith a repeated new name ("a|a", or the same expression twice) showsDuplicate column name: a, asSTATS_COLUMNSandSTATS_RECODE, instead of two columns with the same header.STATS_DESCRIPTIVEwithout metrics, or with text columns only, shows one error cell (Descriptive statistics needs metrics, e.g. "mean,std",… needs numeric columns, text columns: …) instead of a table without numbers. An empty item among metrics ("mean,,std") no longer adds anErrors:line.- Regressions leave out a constant or duplicate predictor and name it in an
Excluded:line, instead of showing empty or wrong coefficients. STATS_ALPHAon two items with "if item deleted" shows alpha and a note instead of an error.STATS_BOOTSTRAPshows how many resamples were usable (for example8 of 50) and leaves the interval empty when too few of them are.
- A formula shows one cell that explains the problem: a column name that does not exist (
- Fixes
- A header made of numbers stored as text (for example years
2025,2026in cells formatted as text) no longer breaks the formulas withvalues.filter is not a function: the report is computed. The same holds for a header with real numbers, dates (named as2025-01-01) or checkboxes (TRUE,FALSE), even when only one header cell is such. Numbers as column names under a row of value labels are now read as names; they used to be read as the first data row, with the labels row as the column names. STATS_INDEPENDENTandSTATS_ANOVA: thewelchmode is used as written:"Welch"or" student "no longer fall back to the automatic choice, aTRUE/FALSEcell means Welch/Student, and a typo ("studnt") or an unknown threshold name shows an error instead of a silent automatic choice. Thresholds such as"varRatioMaxStudent=3"apply to that formula only and no longer carry over to other formulas.- Settings: clearing a number field now restores its default value; it used to save
0(forfixedthat meant rounding every report to whole numbers, formaxIteran error). When one value is rejected, the error names it and the other changes are still saved and shown. The message stays under the Save button, so it is in view however far the panel is scrolled; the empty choice ofposthocis labellednone(no posthoc table) and stays selected after reopening. - Menu items when a permission was not granted: Google lets you untick single permissions when you install an add-on, and without the one for panels Functions list, Settings, About or Recalculate STATS formulas stopped with a technical error about scopes. Now the item explains that a permission is missing and gives a Grant access link (or the link as text, if even a dialog is not allowed); after granting, choose the item again.
- A formula no longer fails with Google's
No item with the given ID could be found…when the settings of the file cannot be read (for example in a fresh copy of a spreadsheet): it computes with the default settings instead. - Settings that were saved but never used now apply to every formula:
pop, the Welch auto thresholds (alphaHomogeneity,varRatioMaxStudent,balanceMaxStudent,smallNForStudent) andeps. None of them is a parameter of a function, and formulas computed with the defaults whatever the panel said. If you saved one of them, numbers change after recalculation: withpopon,STATS_DESCRIPTIVEsaysCalculated for Population.and uses population formulas (variance,std,cv,skewness,kurtosisand the metrics built on them),STATS_ZSCORESdivides by the population standard deviation,STATS_COMPUTEexpressions withstdorvariancechange, the Pearsoncovariancedivides by n (r and its test do not change), andSTATS_ANALYZEfollows its reports.STATS_CI, the t-tests and ANOVA keep the sample standard deviation, as SPSS; alpha does not depend onpop. With other thresholds the automatic Student/Welch choice can switch. Nothing changes if you never touched them. - Functions list: code and bold words in the descriptions are shown formatted, not as raw markdown marks (asterisks and backticks).
- Recalculate STATS formulas works in a spreadsheet with a chart on its own sheet (or a connected-data sheet): it stopped with
The action is not supported for OBJECT sheetand recalculated nothing. Such sheets are skipped, and a sheet that cannot be read is listed under Failed while the others are recalculated. - Faster posthoc, bootstrap and Kendall, with the same numbers:
STATS_ANOVAwith Games–Howell or Tukey on many groups,STATS_BOOTSTRAPwith a largeBandSTATS_KENDALLon thousands of rows take a fraction of the time they did. Ten ANOVAs of 12 groups in oneSTATS_ANALYZEtake a few seconds instead of coming close to the 30-second limit of Sheets, and a Kendall matrix of 20 columns and 5000 rows no longer runs out of it.
- A header made of numbers stored as text (for example years
- New
STATS_NORMALITY(range, colFilter): the Shapiro–Wilk test of normality for every selected column, as the SPSS table "Tests of Normality" — Statistic (W), df and Sig. per column. It tells whether a t-test or ANOVA fits the data or a rank test is the better choice. A column with fewer than 3 or more than 5000 values, or with no spread, shows one error cell that names it.STATS_MANN_WHITNEY(range, colFilter, alternative): the Mann–Whitney U test for two independent samples, the rank replacement forSTATS_INDEPENDENT. Ranks (N, Mean Rank, Sum of Ranks) and Test Statistics (U, Wilcoxon W, Z, Asymp. Sig.) as in SPSS, and the exact p (Exact Sig.) for small samples without ties.STATS_WILCOXON(range, colFilter, alternative): the Wilcoxon signed-rank test for two measurements of the same rows, the rank replacement forSTATS_PAIRED. The difference is the second column minus the first, as in SPSS, and the rank rows say so:Negative Ranks (after < before). With"greater"the second column is expected to be larger — the opposite reading ofSTATS_PAIRED.STATS_KRUSKAL(range, colFilter): the Kruskal–Wallis test for independent groups, the rank replacement forSTATS_ANOVA; each column is a group. Ranks (N, Mean Rank) and Test Statistics (H corrected for ties, df, Asymp. Sig.). It tells whether the groups differ, not which ones: there are no pairwise comparisons yet.STATS_PARTIAL(range, colFilter, controls, ciLevel, alternative): the partial correlation — the correlation of two variables with the controls held constant (SPSS PARTIAL CORR); three variables or more give a matrix, asSTATS_PEARSON. A constant control leaves Correlation and Significance empty on purpose: it almost always means the wrong column was picked.STATS_ALPHAtakes a fifth argumentstandardized: withTRUEthe report adds standardized alpha (as SPSS "Based on Standardized Items") next to alpha and in the "if item deleted" table, so the block is wider. Existing formulas do not change.STATS_ANOVAposthoc:bonferroniandscheffe, andnone(orFALSE) to turn the posthoc table off.STATS_CROSSTABStakes a fourth argumentdetails: withTRUEthree tables follow the summary — Row percentages, Column percentages and Adjusted residuals (as SPSS CROSSTABS). Residuals beyond ±2 show the cells behind a significant chi-square. Off by default, so existing reports do not change.STATS_MAwindow options:"3:2"averages a window of 3 rows once at least 2 values are present;"3:3:1"is the prior window and"3:3:2"the centered window (SPSS PMA and MA).STATS_ANALYZEaccepts functions as they are written in a cell, withoutSTATS_and the range:PAIRED('a,b', 0.99, 'greater') ANOVA('g,x1'). In the old syntax, parameters now follow the order of the STATS functions and are no longer ignored (ci(x|0.9)now uses 90%).STATS_LINEAR,STATS_LOGISTIC,STATS_BOOTSTRAP: a step instepsis read as a column filter, so regular expressions and index rules select predictors ("/^x/","x1|/^x2$/");|inside/.../does not split steps;*in a step is every column but Y ("age,sex|*": the controls first, then every predictor), it was the errorColumn * does not exist. They used to show the error linesThe predictor /^x/ not found in this tableandStep with /^x/ not executed.Because ….- Column filters accept regular expressions with commas, such as
/^x1{1,2}$/. - The test value
mu0in Settings can be any number, including decimals and negative numbers. - About has a link to the official website, als-stats.net; it opens in a new tab.
- Functions list: "Link to documentation" opens each function's page in a new tab (all pages used to open in one and the same window); its tooltip says what the page holds — what every number in the report means.
- Help
STATS_MAandwindowSize: the"w:min:kind"window, where each average stands and why rows show., with examples and the error messages.STATS_DESCRIPTIVEand its metrics: what each metric means (cvis std / mean,relativeDispersionstd / median,madwithout the 1.4826 factor), synonyms (stdDev=std,rSlope=regressionSlope,wmean=weightedMean,spd), percentiles on one 0–100 scale and quartiles as in SPSS, empty cells for metrics that are not defined, and skipped text columns.STATS_ANOVAandposthoc: an emptyposthocmeansauto(Tukey after a classic ANOVA, Games–Howell after Welch),"none"orFALSEturns it off; the table appears only when the ANOVA is significant; the report sections and error messages.welchandposthoc: the allowed values list everything a formula accepts —TRUEandFALSEforwelch,"none",TRUEandFALSEforposthoc.STATS_PARTIAL: missing values are described as they are computed — in a matrix each pair uses the rows complete in its two variables and every control (the help said a row with a gap anywhere was dropped).labels,STATS_FREQUENCIES,STATS_SPLIT_COLS,STATS_CROSSTABS,STATS_CHI2: exact values and rangeslabel:min:max, labels given in the formula win over the labels of the column,_other, the order of categories (as labels, or numbers ascending and text alphabetically), themissingandnot applicablerows, and how split columns are named and placed.STATS_ANALYZEandtests: the new syntaxPAIRED('before,after', 0.99, 'greater')next to the old one, parameters in the order of the STATS functions (descriptive(mean,std,n|x1,x2)), regular expressions with brackets in the new syntax only, and how errors are listed after the reports. The broken examples are fixed.colFilterandoutputNames: a column name that does not exist is an error, commas inside a regular expression, the rules applied in order,*only on its own, a filter saved in Settings, and new names that must be different. TwoSTATS_COLUMNSexamples named columns that the example table does not have (they now show an error); they use existing columns again.STATS_LINEAR,STATS_LOGISTIC,STATS_BOOTSTRAP: which predictor is left out and why (the written order decides), Y without variance, Y coded 0 and 1 for the logistic model, what ridgelambdachanges and that the Settings value applies to both regressions, and the error messages. The examples now compute on real columns.STATS_COMPUTEandquery: the arithmetic of an expression (decimals, exponents,^right to left, no functions —x^0.5instead ofsqrt), the row metrics,.for missing values (0/0too), a non-zero value divided by zero as#NUM!in its cell — as=1/0in Sheets, not an empty cell as the help used to say — and the error messages.STATS_ZSCORES,STATS_NORMALIZE: text with value labels by its codes.STATS_RECODE:reverseas a mirror of the scale andreverse:1:7.STATS_COLUMNS: it returns only the selected columns, in the order of the range, with the names given in the order ofcolFilter(the help used to say the other columns stay), and<name>_missingwithoutoutputNames.- Options (
alternative,type,homogeneity,welch,ciLevel,mu0,eps): accepted spellings and values,1/-1for greater/less, the error message for anything else, and one-sided intervals. - Report texts that changed:
Levene (based on median)/(based on mean), the one-sample interval of the differencemean − μ₀, the hypothesis named once in t-test titles, the Spearman interval, Kendall p without continuity correction, how Spearman and Kendall p are computed (approximate on fewer than about 10 rows, no permutations), empty cells for undefined correlations and alpha,STATS_CIon one value, and alpha on two items. STATS_NORMALITYis the Shapiro–Wilk part of the SPSS table (no Kolmogorov–Smirnov) and one of the checks, not a rule that picks the test;STATS_KRUSKALworks from two groups;STATS_MANN_WHITNEYnames ranks and rating scales instead of "ordinal".STATS_SPEARMAN,STATS_KENDALL: the descriptions say first what each correlation is for; the details of the interval and the p are on the website.posthoc: the table only after a significant ANOVA is a rule of ALS Stats (SPSS prints a requested table anyway), and with two groups the line "Posthoc tests are not performed" appears only then.lambda,STATS_LINEAR,STATS_LOGISTIC: with lambda above 0 nothing is excluded in either regression, and the model F (linear), the omnibus chi-square and AIC/BIC (logistic) are still printed but are not valid tests of a penalized model.STATS_PAIRWISEis described for what it does — it keeps the complete rows, the columns stay the same — and the help ofcolumnsexplains once what counts as a number: the type of a column, numbers written as text, checkboxes, the sign., and text with or without value labels.
Version 1.2 — May 1, 2026
- New categorical analysis functions
- Added
STATS_CROSSTABS()for contingency tables with row totals, column totals, and grand total. - Added
STATS_CHI2()for Pearson chi-square tests between two categorical columns. - Added
STATS_CRAMER()for Cramer's V effect size. - These reports exclude paired missing values and keep category order from labels when labels are available.
- Added
- Batch analysis updates
STATS_ANALYZE()now supports categorical commands:crosstabs,chi2,chisquare, andcramer.- Spaces around
|in batch commands are now trimmed before running the analysis.
- Regression fixes
- Regression functions now use only the selected target and predictors, so unused short columns no longer change the analyzed rows.
- Interaction terms are built inside the selected regression data and do not change the source table.
- Hierarchical regression steps now use the same row scope across all declared model variables, making step comparisons consistent.
Version 1.15 — April 30, 2026
- Correlation report updates
STATS_PEARSON(),STATS_SPEARMAN(), andSTATS_KENDALL()now show the selected alternative hypothesis in matrix report titles.- Correlation confidence intervals are now included directly in the matrix data report instead of being shown as a separate table.
- Two-variable
STATS_SPEARMAN()andSTATS_KENDALL()reports now use the same compact vertical layout asSTATS_PEARSON(). STATS_KENDALL()matrix data now labels the statistic astauand preserves zero tau values correctly.STATS_SPEARMAN()now handles perfect positive/negative correlations correctly for one-sided alternatives (greater/less).
- Report title readability
- Longer selected column lists can now remain visible in report titles before being shortened to a variable count.
Version 1.14 — April 27, 2026
- Fixed STATS_SPLIT_COLS
Version 1.13 — April 25, 2026
- Report output updates
- Report values now return rounded numbers instead of formatted strings.
fixednow controls numeric rounding precision, while Google Sheets formatting controls displayed decimal places.
- Report title cleanup
- Long variable lists in report titles are shortened to the number of selected variables.
- Short variable lists are still shown by name.
- Missing value scope
STATS_DESCRIPTIVE()andSTATS_FREQUENCIES()now count missing values inside the selected report scope after column filtering.- Empty trailing cells outside the selected scope are ignored; empty cells inside the selected scope are still counted as missing.
Version 1.12 — April 23, 2026
- Install notice UX update
- Replaced the install-time modal warning with a non-blocking right sidebar notice.
- Removed action buttons from the install notice to reduce visual noise.
- Updated install copy for clarity: activation is required in each new spreadsheet before use.
- Replaced alarming red emphasis with a softer warning-style yellow highlight for "will not work".
Version 1.11 — April 7, 2026
- Column rename/recode naming updates
- Shared output naming parser now handles templates with ranges/lists:
name{1-3},name{1,3,6}, reversed ranges (name{4-2}), and empty braces (name{}). - Mixed explicit names via
|keep safe fallback names (<source>_missing) when generated names are fewer than selected columns. STATS_COLUMNS()now uses in-place rename mode (keeps selected columns in source order; non-selected columns stay untouched).- Backward compatibility preserved for non-string output names in recode/rename flows (fallback names are used instead of throwing).
- Shared output naming parser now handles templates with ranges/lists:
- Cronbach Alpha update
STATS_ALPHA()supports optional 4th argumentcommonPrefix.- If
commonPrefixis omitted, prefix is auto-detected from selected item names when possible and appended to title asCronbach Alpha for <prefix>.
Version 1.10 — April 4, 2026
- Recode updates
STATS_RECODE()now supports the shortcut rulereverseto invert values by unique sorted order.- Fixed numeric-string rule detection so rules like
1:7,2:6,...are handled by numeric exact recode logic (instead ofstring:numbermode). reversebehavior is covered across direct recode, single-column recode, and multi-column recode flows.
Version 1.09 — April 3, 2026
- ColFilter improvements
colFilternow supports index-based rules:#N,#A-#B,-#N,-#A-#B.- Mixed include/exclude index rules are now handled deterministically by rule order.
#...tokens incolFilterare reserved for index syntax to avoid ambiguity with column names.
- Frequencies fixes
STATS_FREQUENCIES()now keeps group order according to labels order.- Fixed string
labelsparsing/type conversion so exact label rules work correctly with numeric source values. - Unused labels are no longer emitted as rows with
undefinedcounts.
- Output naming updates (recode flow)
STATS_RECODE()output names now support template naming (for examplename{1},code{5}).- Short
|-separated output name lists now use safer fallback names for missing entries.
- New tab function:
STATS_COLUMNS(columns,colFilter,outputNames).- Renames selected columns in the output table.
- Supports suffix naming, explicit
|-separated names, and template naming (for examplename{1}). - Supports short explicit name lists with safe fallback names (
<oldName>_missing).
Version 1.08 — March 25, 2026
- Update for summary functions
STATS_FREQUENCIES()now returns a more informative expanded report with columns:Variable,Group,Amount,Percentage,Valid Percentage.STATS_DESCRIPTIVE()now supports themissingmetric.- Functions now support labels row in the input range and mixed numeric/string column handling.
- Full backward compatibility is preserved for existing workflows, except that the
STATS_FREQUENCIES()report is now more informative and expanded.
Version 1.075 — March 4, 2026
- Empty-row handling fix for tab functions
- Internal fully empty rows are now preserved instead of being removed before processing.
- Only trailing empty rows are trimmed, so large column ranges still avoid unnecessary spill expansion.
- This fixes row-count shrinkage in single-column transforms such as
STATS_RECODE()while preserving backward compatibility for trimmed empty tails.
- Recode improvements
STATS_RECODE()now supports direct string-to-number rules such as"male:1,female:2".- Existing numeric exact-match and range recode rules keep the same behavior.
- When explicit output names are passed as a
|-separated list with missing entries, fallback names now use<column>_recodedinstead of appending the whole raw names string.
Version 1.07 — March 3, 2026
- Documentation update for transform functions
STATS_COMPUTE()andSTATS_RECODE()now document the last parameter asoutputNames.- The parameter description now explains both supported modes: suffix naming and explicit output names passed as a
|-separated list. - Backward compatibility is preserved: the old
postFixbehavior still works, only the documentation name was updated. - Fixed
STATS_COMPUTE()result column order for explicit output names that start with numbers.
Version 1.06 — March 2, 2026
- Google Sheets regression functions
STATS_LOGISTIC()now shows the actual number of performed iterations in theMetasection.STATS_LOGISTIC()help text now explains the report sections and uses a corrected example signature.STATS_BOOTSTRAP()now reports hierarchical steps correctly, including the predictor added at each step.STATS_BOOTSTRAP()output now includesSummary, per-stepMeta, andBootstrap Estimatessections.STATS_BOOTSTRAP()help text and examples now match the current function signature and output structure.
Version 1.05 — February 28, 2026
- Interface updated across menu sidebars (Functions, Settings, About).
- Settings panel now loads current saved defaults from server on open.
- Added menu action: Recalculate STATS formulas (manual refresh after settings updates).
- Updated Settings hints to explain formula refresh flow.
- Descriptive comment now shows "population" and "epsilon" notes selectively, only for relevant metrics.