Changes in version 2.0.1 (2026-08-04) - Unequal replication: every mean now has its own standard error and every pair of means its own SE(d) and C.D. Blocked designs with a missing plot and factorials with unequal cells use adjusted (least-squares) means with Type III tests. Split plots, strip plots and pooled analyses with a missing or repeated plot are refused with a message naming it. - The chosen significance level now drives every C.D., letter, F-test verdict, assumption verdict, Box-Cox interval, plot caption and line of text. The cd5 and cd1 effect fields are replaced by cd at that level. - Grouping letters use Piepho's (2004) insert-and-absorb algorithm; SNK and Duncan enforce the step-down rule; Tukey becomes Tukey-Kramer with unequal replication; post-hoc output includes a table of every pairwise comparison. - Factor levels follow their natural order everywhere: D0, D60, D120, D180 and T1, T2, ..., T10 rather than alphabetically. Interaction plots put a time factor (or, failing that, a quantitative one such as N0, N60, N120) on the X-axis by default, and the Plots tab lets you choose the X-axis factor. - A data check runs as soon as data are loaded. It finds decimal commas (5,6), decimal points and commas mixed in one column, thousands separators, per cent signs and units typed after numbers, numbers stored as text, entries that are not numbers, no-value markers (including Excel's #DIV/0! and #N/A), empty cells, labels that differ only in spacing, capitals or punctuation, and empty or repeated rows. It says what is wrong and which rows are affected. Corrections are applied only when asked, and only where the meaning is certain; anything uncertain (12a, nil, 1,250, a % sign on some values only, AA beside aa) is listed for the user and never changed, emptied or merged. New exported functions check_data() and fix_data() do the same from R. The data table now shows row numbers, which the messages use. - Rows left out of an analysis are listed with the reason, in the app and in the report, instead of disappearing silently. Pasted "-" and "." are no longer turned into missing values without notice, "#" is no longer read as the start of a comment, and semicolon-separated CSV files are recognised. - A new Explore menu holds descriptive statistics. For each numeric column: N, missing, mean, SD, minimum, Q1, median, Q3 (as Excel's QUARTILE.INC gives them), maximum, CV and skewness (as Excel's SKEW gives it), optionally for each level of a grouping column. A histogram, density curve, box plot and normal Q-Q plot go with them, each followed by a plain-language reading worked out from the numbers that plot shows. Skewness is read with Bulmer's bands, and the direction is stated only in figures the table shows. Unusual values are those beyond the box-plot fences, judged within each group when the table is grouped. The Q-Q reading compares the bend at each end of the plot with what normal samples of the same size show. Values recorded in steps get histogram bars on their grid. New exported function describe_data(). - Explore > Correlation: Pearson's r, Spearman's rho or Kendall's tau-b for every pair of the chosen numeric columns, each with N (the rows that have both values), the p-value, a significance mark at the chosen level, a confidence interval for r, and a one-line reading. A matrix, a heat map, a scatter plot of any pair, and a reading of the whole table go with them. Spearman's and Kendall's p-values are exact whenever the orderings of the values can be counted (eight rows, and many more when values are tied, as in sparse counts), estimated from random orderings when there are ties and too many to count (Spearman's at any size, Kendall's up to 20 rows, with a closer count near a significance threshold), and marked where they are a large-sample approximation. Strength uses Cohen's 0.1, 0.3 and 0.5 for r, carried to rho and tau through their relation to r for normal data. A result short of significance is reported as insufficient evidence of an association, and the reading warns about chance findings among many pairs and about plot-level correlations mixing treatment effects. New exported function correlate_data(). - Explore > Regression: simple and multiple linear regression of one numeric column on one or more others, using the rows that have every value. The fitted equation; each coefficient with its standard error, t, p-value, significance mark and confidence interval at the chosen level, printed to the precision its standard error supports (and, with several predictors, its variance inflation factor); N, R-squared, adjusted R-squared, MSE, RMSE, MAE and the F test of the model; and the regression's analysis of variance. The main plot shows the rows, the fitted line, its confidence band, the equation and R-squared (with several predictors, the line for one predictor with the others at their means, and each row adjusted to them). Residuals against fitted values, a normal Q-Q plot and observed against predicted check the fit, with Shapiro-Wilk, Breusch-Pagan (Koenker) and a test for a curve; with up to 200 rows the first two take their p-values from normal data simulated on the same predictor values, since with few rows the usual ones can be far off for residuals. Every table and plot has a reading; a slope short of significance is reported as insufficient evidence, and the reading says when the intercept is an extrapolation and that the equation holds only over the observed range. A predictor fitted with its powers (Dose with Dose2, or Dose2 and Dose3) is drawn and read as one curve, and a response surface (N, P, N2, P2 and NP) as one surface; a quadratic is read with the dose at which it turns. New exported function regress_data(). - Explore > Principal components: principal component analysis of the chosen numeric columns, on their correlations (each standardised) or their covariances. The eigenvalues with the share of the variation each component carries; the loadings (each variable's correlation with each component) and communalities; the scores; and the scree plot, score plot (coloured by a grouping column if chosen), loading plot and biplot. The number of components worth keeping comes from Horn's parallel analysis, with Kaiser's rule beside it. Each component is read from its strong loadings as printed, and the readings say only which variables rise and fall together, never what causes it. New exported function pca_data(). - Explore > Cluster analysis: hierarchical clustering of the rows, or of the means of each level of a grouping column (varieties by their trait means), on the chosen numeric columns, standardised by default, with Euclidean or Manhattan distances and Ward's, complete, average or single linkage. The number of clusters is suggested by the average silhouette width (and can be chosen), read with Kaufman and Rousseeuw's bands; the cophenetic correlation shows how faithfully the tree keeps the distances. Tables of the clusters, their members, silhouettes and means; the dendrogram coloured at the cut, the clusters on the first two principal components, and the silhouette width by number of clusters. Each cluster is read from its means as printed, and the reading says that clustering is no test. New exported function cluster_data(). - Explore > Factor analysis: maximum-likelihood factor analysis (factanal()) of the chosen numeric columns, with the Kaiser-Meyer-Olkin measure (overall and for each variable, in Kaiser's words) and Bartlett's test of sphericity; the number of factors from parallel analysis (the same as on the principal components tab) or chosen; varimax, promax or no rotation; the loadings with communalities and uniquenesses, the variance each factor carries, the factor correlations after promax, the test that the number of factors is enough, and the factor scores. A scree plot, a heat map of the loadings and a loading plot, each with a reading. Each factor is read from its loadings of 0.40 or more as printed; cross-loading variables, low communalities and Heywood cases are named, and the reading leaves naming the factors to the reader. New exported function fa_data(). - Every table and plot of the analysis of variance now has a reading after it. The ANOVA table: each row's verdict in the terms of the design (blocks, rows and columns, an interaction as one factor's effect depending on another), which error each row is tested against in split plots, strip plots and pooled analyses, and the CV against the usual guide. The tables of means: the highest and lowest means and the means that do not differ significantly from them, exactly as the letters and C.D.s decide; how a significant interaction changes the pattern from row to row; a caution on main-effect means when an interaction involving the factor is significant. The post-hoc tab: what the chosen test does, what it finds, how many pairs it declares, those the step-down rule holds back, and the count Fisher's protected LSD gives. The assumption checks, the Box-Cox profile, the mean-variance plot and the four residual plots, and the main plot on the Plots tab, including whether interaction lines cross. A result short of significance is insufficient evidence of a difference, at the level chosen; an exact fit is said to make the verdicts meaningless rather than read as findings. - The Help tab is gone; its guidance now sits, folded until opened, in the tab where it is needed: how to start on the Data tab, the designs and their error terms (and the pooled analysis, when a pooled design is chosen) on the Design tab, how SE(m), SE(d) and the C.D. are worked out on the Means tab, choosing a transformation on the Assumptions tab, and which post-hoc test to choose, now including Dunnett's, on the Post-hoc tab. - A new look for the app, branded StatLabX. It runs on Bootstrap 5 through bslib's precompiled theme, so the browser compiles nothing (a theme with changed Sass variables took 5.3 s to compile natively, and would have been compiled in the browser on every visit); the styling is plain CSS. A floating pill-shaped navigation bar carries the logo and the name, the side panels, tables, plots and readings sit on white cards, numbers line up in tables, and red marks significance only (NS is grey). The About page opens with a headline, a short summary and the app's facts as chips. The version shown is now the package's, 2.0.1. - Dunnett's test joins the post-hoc procedures: each treatment against a control chosen in the post-hoc panel from the levels of the effect (a level with no number, such as Control, is offered first), two-sided or one-sided (higher, or lower, than the control). The critical value is the quantile of the comparisons' joint multivariate t distribution, computed exactly with equal or unequal replication and with one missing plot: it reproduces Dunnett's (1955) tables, and Student's t for a single comparison. With two or more missing plots in a blocked design the correlations are given the nearest exact form, and the output says it is an approximation. Within a split, strip or pooled interaction the treatments are compared with the control within each level of the slicing factor. As for every other test, nothing is declared under a non-significant F-test. - The browser version opens with a StatLabX loading screen instead of an unexplained spinner. It says what is happening (R loading, R starting, the packages loading and installing, the app starting), and its bar counts the real bytes of R and its packages as they arrive, against the true total for the build (about 59 MB); nothing is estimated and no percentage is printed. It also says that R runs in the browser, so data never leave the computer, and that only the first visit downloads R. - The residual plot is now of standardised residuals, with lines at -3 and 3 and the points beyond them labelled with their row numbers. - Possible outliers are named by their row numbers in the data. Before, they were their positions among the analysed rows, which point at the wrong row once any row has been left out. - With one error degree of freedom the residuals take the same pattern whatever the data (in a 2 x 2 RCBD, Shapiro-Wilk gave p = 0.024 every time), so normality is reported as not testable instead of as a significant departure. - The Assumptions tab now shows all four residual plots. Before, only the scale-location plot appeared. With few distinct fitted values (a CRD), its trend line joins the mean at each fitted value instead of a loess curve that rose where there were no points. - Numbers written back by the data-check corrections are never in scientific notation (400000, not 4e+05). - Levene's test no longer reports unequal variances whenever each cell has two values (a CRD with two replications, an RCBD with two blocks). Before, F came out near 1e28 and the false verdict drove the suggested transformation. With two values both lie equally far from their median, so such cells are left out of Levene's test. When any cell has fewer than three values, the verdict on equal variances uses Bartlett's test, which covers every cell, and says so. When neither test can be run, the mean-variance slope decides the suggested transformation if it is itself significant, and the advice no longer says that no transformation is needed. - Levene's test can now find unequal variances with three values per cell. In a cell with an odd number of values the median is one of them, so one deviation is always zero; with three values per cell that capped F at 4, and among four or fewer treatments the test could never reject. When every cell has an odd number of values that zero is now left out (Hines and O'Hara Hines, 2000), and the table says so. - An assumption test that could not be computed is reported as "not available" with the reason, never as a significant departure. When the model fits every value exactly, the app says so and does not run Shapiro-Wilk, Levene, Bartlett or Box-Cox on rounding residue or draw it in the residual plots. - In designs with blocks (RCBD, Latin square, split and strip plots, pooled analyses) Levene's and Bartlett's tests now compare each plot's residual, recentred on its treatment's mean, rather than the raw values. The raw values still carry the block effects, which the error variance does not: with block differences larger than the error the tests almost never found anything (0.1-1.5% at 5% when variances were equal, and 3% for a treatment three times as variable in a simulated 5 x 5 RCBD). On the residuals they hold 2-5% and find that treatment 18-33% of the time. The table says which values were used. The Taylor slope still uses the values themselves, since residuals flatten it (about 0.3 where it should be 2). - Pooled factorial analyses test equal variances within each environment. The cells used to be the treatment combinations pooled across environments, so a treatment-by-environment pattern in the means was reported as unequal variances and drove the suggested transformation. - The exact-fit check judges the residuals against the spread of the values, with a floor for rounding, rather than against their size: a response near 2e9 that varies by 1 was called an exact fit and its checks were skipped. - A p-value below a threshold no longer prints at it. The ANOVA tables, the readings, the interpretation, the assumption table and the captions of the tables of means printed p = 0.049973 as "0.05" beside a star meaning p < 0.05; it now prints as 0.04997, as the correlation and regression tables already did. A p-value exactly at the level is not significant everywhere, as the stars have it. - Dr. Imran Khan (SKUAST-Kashmir) is listed as a contributor. Changes made in response to the CRAN review of version 2.0.0. - Software names are quoted and the methods are referenced with their DOIs in the package description. - \value is documented for the exported DESIGNS and TRANS objects. - demo_data() no longer sets a random seed. The example datasets are now built from a stored vector of deviates, so they are identical on every machine and the user's random number stream is left untouched. - The plain-text report saves and restores the user's graphical parameters with an immediate on.exit(). Changes in version 2.0.0 First public release. - Analyses eleven designs: completely randomised, randomised complete block, Latin square, factorial CRD and RCBD (two to four factors), split-plot, strip-plot, and pooled (combined) analysis over environments for both a single treatment factor and factorial treatments. - Chooses the correct error term for every comparison. A split plot reports its four distinct standard errors of a difference, the two mixed comparisons using a Satterthwaite-weighted t. - Pooled analyses test each treatment effect against its own interaction with the environment, check the homogeneity of the error variances across environments (Bartlett), and break a significant environment by treatment interaction down environment by environment. - Analyses several response variables at once, each with its own transformation. - Screens the data against the assumptions and advises on a variance-stabilising transformation; nine transformations are available, with means reported back on the original scale. - Grouping letters are shown only where the F-test is significant. - Six post-hoc procedures: Fisher's protected LSD, Bonferroni, Tukey HSD, Duncan, Student-Newman-Keuls and Scheffe. - Produces a downloadable HTML report carrying the DOEpro citation. - Runs in the browser at https://doepro.pages.dev with no installation.