Statistical Software for Research
This sub-cluster covers the software researchers use to run the analyses described in the research-methods cluster: SPSS (menu-driven, widely taught, common in social science and health), R (free, open-source, the standard in biostatistics and increasingly elsewhere), Stata (strong in economics and epidemiology), SAS (entrenched in pharma and clinical trials), and the newer open-source GUI tools JASP and jamovi, which pair R's statistical engine with SPSS-style menus. Pages here are practical and comparative — which tool suits a given discipline or analysis, and how to move a specific procedure (e.g., a mixed model) from one package's syntax to another's.
Guides
Volcano Plots in RNA-seq: How to Build and Correctly Read Differential Expression Results
What a volcano plot actually plots, why using raw p-values instead of FDR-adjusted p-values is a serious and common error, how to choose defensible fold-change and significance thresholds, and how to avoid the most common misreadings of the figure.
Epi Info: What It Was, Why CDC Sunset It, and What Replaces It
CDC discontinued Epi Info in September 2025. Here’s what the free epidemiology software did, what still works, and what public health researchers should migrate to.
Principal Component Analysis in Stata: pca and Postestimation
How to run principal component analysis in Stata: pca syntax, reading eigenvalues and loadings, screeplot retention rules, rotation with rotate, and saving component scores with predict.
Descriptive Statistics in Stata: summarize, tabstat, codebook
summarize gives a quick overview, tabstat builds custom grouped tables, and codebook screens data quality before you trust either one.
Correlation Matrices in Stata: correlate vs. pwcorr
Stata’s correlate and pwcorr both build a correlation matrix, but correlate uses listwise deletion and pwcorr uses pairwise deletion by default — here is how to choose, match the two, and export the result.
Creating Dummy Variables in Stata: i. Factor Notation vs. tabulate, generate()
Two ways to create dummy/indicator variables in Stata — the i. factor-variable operator vs. tabulate, generate() — and when each one is the right tool.
Poisson and Negative Binomial Regression in Stata
Fitting poisson and nbreg for count outcomes in Stata: using exposure() to model rates, testing for overdispersion, and reporting results as incidence-rate ratios.
Multiple Imputation in Stata: mi impute and mi estimate
How to set up mi data, choose chained vs monotone imputation, choose how many imputations to run, and pool results with mi estimate in Stata.
Spearman Rank Correlation in SPSS: Procedure, Output, and Reporting
How to run a Spearman rank correlation in SPSS via Bivariate Correlations: when to prefer it over Pearson, tied-rank handling, reading rho and Sig. (2-tailed), and the APA reporting line.
Principal Component Analysis in SPSS: Menus, Retention Rules, and Component Scores
How to run principal component analysis in SPSS: the Dimension Reduction > Factor dialog, eigenvalue and scree-plot retention rules, rotation, and saving component scores as new variables.
ANCOVA in SPSS: Covariates, Assumptions, and Adjusted Means
How to set up ANCOVA in SPSS’s General Linear Model > Univariate procedure, which assumptions it adds beyond ANOVA, and how to get and report covariate-adjusted (estimated marginal) means with Bonferroni-corrected pairwise comparisons.
Wilcoxon Signed-Rank Test in SPSS: Menus and Reporting
Both SPSS menu paths for the Wilcoxon signed-rank test, how to read the Ranks and Test Statistics output each produces, and how to compute the effect size SPSS doesn’t print.
Handling Missing Values in SPSS: Codes, Exclusion, and Imputation
Declare user-missing codes in Variable View, understand listwise vs. pairwise exclusion by procedure, diagnose the missingness pattern with Missing Value Analysis, and use SPSS’s Multiple Imputation tool and Rubin’s rules correctly.
Linear Mixed Models in SPSS: The MIXED Procedure
How to fit linear mixed models in SPSS with the MIXED procedure: the menu path, full command syntax, choosing a covariance structure, REML vs ML, and reading the fixed-effects and covariance-parameter output.
Box Plots in R: boxplot() and ggplot2’s geom_boxplot()
A runnable R workflow for box plots: base R’s boxplot() and its fivenum()-based hinges, ggplot2’s geom_boxplot() and its quantile()-based hinges (and why the two can draw different box edges from identical data), outlier flagging via the 1.5×IQR fence, notches, and overlaying raw data points with geom_jitter().
Scatterplots in R: plot() and ggplot2’s geom_point()
How to build scatterplots in R with base plot() and ggplot2’s geom_point() — grouping by color/shape, fixing overplotting, adding loess/lm trend lines with geom_smooth(), and the silent-NA-drop pitfall that catches both methods differently.
Histograms in R: hist() and ggplot2’s geom_histogram()
A runnable R workflow for histograms: base hist() and its breaks argument (numeric, vector, or Sturges/Scott/FD), the unequal-width-bin freq warning, silent NA handling, and ggplot2’s geom_histogram() — binwidth vs bins, group comparison with fill and facet_wrap(), and density overlays. Every output block is real R 4.6.1 / ggplot2 4.0.3 console output.
Independent-Samples t-Test in SPSS: Step by Step
How to run an independent-samples t-test in SPSS: data layout, the Define Groups dialog, which Levene’s-test row to report, reading the output table, and calculating the effect size SPSS doesn’t print by default.
Calculating Z-Scores in SPSS: Descriptives Checkbox vs. COMPUTE
How to standardize a variable in SPSS using the Descriptives “Save standardized values as variables” checkbox versus a manual COMPUTE formula, and how to interpret the resulting z-score.
Cluster Analysis in SPSS: Hierarchical vs. K-Means
When to use hierarchical clustering (exploratory, dendrogram, unknown cluster count) versus K-means clustering (specified cluster count, larger datasets) in SPSS, and how to read each procedure’s output.
MANOVA in SPSS: Setup, Assumptions, and Follow-Up
A practical walkthrough of running MANOVA in SPSS: GLM Multivariate setup, the Box’s M and multivariate-normality assumption checks, reading Pillai’s Trace, Wilks’ Lambda, Hotelling’s Trace and Roy’s Largest Root, and deciding how to follow up a significant multivariate effect with univariate tests.
Bar Charts in SPSS: Counts, Means, and Error Bars
Simple bar charts (counts) vs. bar-of-means charts in SPSS Chart Builder, plus the Element Properties setting for confidence-interval, standard-error, or standard-deviation error bars, and how to add it after the chart already exists.
Box Plots in Stata: graph box and over-Groups
How to build grouped box plots in Stata with graph box and graph hbox: the over() option for categorical breakdowns, and marker()/mlabel() for labeling outlier observations by case ID.
Scatterplots in SPSS: Simple, Grouped, and With a Fit Line
Building simple, grouped, and matrix scatterplots in SPSS Chart Builder, and adding a linear or Loess fit line in the Chart Editor.
Box Plots in SPSS: Creating and Interpreting Them
How to build a simple or clustered boxplot in SPSS from Chart Builder, Legacy Dialogs, or Explore, and how to read the whiskers plus the circle (outlier) and asterisk (extreme value) case-number flags.
Mann-Whitney (ranksum) Test in Stata
Stata’s ranksum command syntax for the Mann-Whitney test, reading the z statistic it reports instead of a U value, and the tie correction Stata applies to the variance automatically.
Propensity Score Matching in Stata: psmatch2 vs. teffects psmatch
Why psmatch2 (user-written) and teffects psmatch (official) are not interchangeable in Stata: syntax differences, the standard-error gap Abadie and Imbens flagged, balance diagnostics with pstest and tebalance, common support, and citation implications for reproducibility.
Recoding Variables in Stata: recode, replace, and generate
Stata offers three ways to create or change a variable: recode, replace, and generate. Here is the range-rule syntax recode uses, the specific way replace destroys original data, and when each command is the right one.
ANOVA in Stata: The anova Command and Postestimation
How to run one-way and factorial ANOVA with Stata’s anova command, read the ANOVA table, and follow up with margins and pwcompare for post hoc comparisons.
Stata Do-Files: Structure for a Reproducible Workflow
The do-file header, comment styles, and file-path conventions that make a Stata analysis reproducible: version, clear all, set more off, log using, and running the file the way a collaborator actually would.
Making a Histogram in SPSS With a Normal Curve Overlay
Three SPSS routes to a normal-curve histogram overlay, how to adjust bin width afterward, and what a visual match against the curve does and doesn’t tell you versus a formal normality test.
Running a t-Test in R: t.test() Syntax and Output
Base R’s t.test() function: formula vs. vector calling syntax, why var.equal defaults to Welch’s t-test instead of the pooled version, and extracting p-values, confidence intervals, and group means from the returned object for a report.
Standard Deviation in R: sd(), na.rm, and By-Group Calculation
A worked R guide to sd(): why it silently returns NA on any missing value without na.rm = TRUE, what the sample-vs-population formula means for your reported SD, and by-group standard deviation with both aggregate() and dplyr::group_by().
The reshape Command in Stata: Wide to Long and Back
How Stata’s reshape long and reshape wide commands convert data between wide and long layouts, the i() and j() options explained through a worked repeated-measures dataset, the stub-naming rules that cause most reshape errors, and when reshape fails versus when a different tool is the better choice.
Chi-Square Test in Stata: tabulate, chi2, and Fisher’s Exact
How to run a chi-square test of independence in Stata with tabulate …, chi2: reading the Pearson chi2 output, using the exact option (Fisher’s exact test) when expected cell counts are small, and tab2 for testing several variable pairs at once.
Mann-Whitney U Test in SPSS: Menus, Ranks, and Reporting
Both SPSS menu paths for the Mann-Whitney U test, how to read the mean-rank and test-statistic output each one produces, and when it beats an independent-samples t-test.
Levene’s Test in SPSS: Where It Appears and What to Do When It’s Significant
A named diagnostic embedded inside three different SPSS procedures, not a menu item of its own: automatic in the independent-samples t-test, opt-in via an Options checkbox in both one-way and two-way ANOVA, with a different row-switch or correction for each when it comes back significant.
Labeling Variables and Values in Stata
label variable names a column; label define plus label values name the numeric codes inside it as a separate, reusable object. This guide covers the syntax for both and why keeping them separate prevents unlabeled do-files from becoming unreadable once more than one person works on them.
Logistic Regression in Stata: logit vs. logistic
How Stata’s logit and logistic commands relate: logit prints coefficients on the log-odds scale, logistic prints odds ratios, and both share the same postestimation (margins, estat gof, lroc).
Recoding Variables in SPSS: Into Same vs Into Different Variables
SPSS offers two Recode commands that look alike but behave very differently. Here’s why Into Different Variables should be your default, how the Old and New Values dialog works, and the specific data-loss risk of recoding into the same variable.
SPSS Syntax: Writing Reproducible Analysis Files
How to use the Paste button to build a runnable .sps syntax file, comment it well, and run it from a clean, unmodified dataset so an SPSS analysis is actually reproducible.
Multiple Regression in SPSS: Entry Methods, Diagnostics, and Reporting
The Analyze > Regression > Linear menu, choosing Enter vs. Stepwise vs. Hierarchical entry by research question, requesting VIF/tolerance and residual plots, and reporting the full model.
Repeated-Measures ANOVA in SPSS: Setup and Corrections
How to define the within-subjects factor for repeated-measures ANOVA in SPSS, read Mauchly first, and pick the right sphericity correction.
Merging Datasets in Stata: 1:1, m:1, and _merge
How Stata’s merge command works by match type (1:1, m:1, 1:m, m:m), how to read the _merge result codes, and the duplicate-master-key and unmatched-observation errors that silently corrupt a join.
Running ANOVA in R: aov(), car::Anova(), and Type III Sums of Squares
A worked R walkthrough: why aov() always gives Type I sums of squares, why that silently misleads for unbalanced two-factor designs, and the exact car::Anova(type=3) plus contr.sum fix, with real numbers at every step.
Cronbach’s Alpha in SPSS: Reliability Analysis and Item-Total Statistics
Run SPSS Reliability Analysis, read the item-total statistics table, and use Alpha if Item Deleted to spot a weak item in your scale.
Binary Logistic Regression in SPSS: Procedure and Output
The Analyze > Regression > Binary Logistic menu path, and how to read the Omnibus test, Model Summary, Hosmer-Lemeshow, classification table, and Exp(B) as an odds ratio.
Descriptive Statistics in SPSS: Frequencies, Descriptives, and Explore
Frequencies, Descriptives, or Explore in SPSS? What each procedure computes, which variable type it suits, and when to reach for each one instead of defaulting to just one.
Pearson Correlation in SPSS: Procedure, Output, and Reporting
The Bivariate Correlations menu path, checking linearity and outliers first, reading the r/Sig./N output table, listwise vs. pairwise exclusion, matrix formatting and the multiple-comparisons caveat, and the APA reporting line.
The append Command in Stata: Stacking Datasets
How to use Stata’s append command to stack datasets by row: the append-vs-merge decision, the force option and the type conflicts it papers over, generate() for tagging source files, and the variable-mismatch pitfalls that cause silent data loss.
Two-Way ANOVA in SPSS: Main Effects, Interaction, and Simple Effects
Set up a two-way ANOVA via GLM Univariate, read the interaction row before the main effects, plot it, and run simple-effects follow-up tests when it’s significant.
Bar Charts in Stata: graph bar and graph hbar
How to build grouped and stacked bar charts in Stata with graph bar and graph hbar: the over() option for categorical breakdowns, asyvars for stacking, and value labels.
Regression in Stata: regress, Postestimation, and Reporting
How to run a regression in Stata: the regress command for simple and multiple OLS, robust and clustered standard errors, postestimation diagnostics (predict, estat hettest, estat vif, estat ovtest), and exporting publication-ready tables with outreg2 or esttab.
Testing Normality in SPSS: Shapiro-Wilk, K-S, and the Plots
Where SPSS runs the Shapiro-Wilk and Lilliefors-corrected K-S tests, why sample size flips which one you should trust, and how to read the Q-Q plots when a large sample ‘fails’ normality on a difference too small to matter.
Histograms in Stata: histogram and twoway histogram
How to build a histogram in Stata: bin() and width() control, density vs. frequency vs. percent scaling, the normal overlay, by-group panels, and when to switch to twoway histogram to combine a histogram with another plot type.
One-Way ANOVA in SPSS: Procedure, Post Hoc Tests, and Output
How to run a one-way ANOVA in SPSS, pick Tukey HSD or Games-Howell based on Levene’s test, and read the ANOVA table, post hoc comparisons, and means plot.
Scatterplots in Stata: twoway scatter and lfit Overlays
How to build a scatterplot in Stata with twoway scatter, add an lfit or qfit regression-line overlay, and combine multiple twoway elements in one graph command.
Mauchly’s Test of Sphericity in SPSS: Reading the Output and Choosing a Correction
Where SPSS prints Mauchly’s Test of Sphericity, what Mauchly’s W, Sig., and the epsilon columns mean, and how to choose the Greenhouse-Geisser or Huynh-Feldt correction and report the corrected degrees of freedom.
The collapse Command in Stata: Aggregating a Dataset by Group
collapse (stat) varlist, by(groupvars) replaces a Stata dataset in memory with one row per group. This guide covers the syntax for multiple statistics and by-groups, what collapse destroys, preserve/restore, and the frequency-weight gotcha, with a worked before/after example.
Running a t-Test in Stata: ttest and ttesti
How to run a t-test in Stata: the ttest command for raw data, the ttesti immediate form for summary statistics, the one-sample/two-sample/paired variants, the unequal and welch options, and how to read Stata’s output block.
How to Run a T-Test in SPSS and Read the Output
Menu paths for all three SPSS t-tests — including paired-variable pairing mechanics and the Paired Samples Correlations output — how to read Levene’s Test, and the exact APA reporting line.
Logistic Regression in R: glm(), Odds Ratios, and Diagnostics
A runnable R workflow for logistic regression: glm(family = binomial), exponentiating coefficients to odds ratios, why confint() profile intervals differ from Wald, pseudo-R-squared from logLik(), ROC/AUC with pROC, and how to spot separation. Every output block is real R 4.6.1 console output.








