A paper comes back with a major revision after six months. The reviewer asks: “Why is N in Table 3 equal to 412 when the methods report 428?” The author reopens the data file and cannot remember which 16 people were excluded, on what criteria, through which sequence of menu clicks. The file is called “data_final_v3_NEW.sav”, and there are three others with similar names. Rebuilding the number takes two weeks.
Choosing statistical software is often discussed as a matter of taste. The more important question is whether, six months later, you or anyone else can reproduce every number in the paper exactly from the raw data. Any tool can achieve that if used properly, and any tool can fail if used badly.
Comparing the common options
| Tool | Cost | Strengths | Watch out for |
|---|---|---|---|
| R | Free, open source | Vast range of statistical packages, new methods appear early, strong graphics with ggplot2 | Initial learning curve; many ways to do the same thing |
| Python | Free, open source | Strong for large data, machine learning and automation; pandas, statsmodels, scipy | Fewer packages than R for some specialised statistical methods |
| SPSS | Commercial licence, often provided by universities | Familiar menus, widespread in social and health sciences | Easy to analyse by clicking without keeping a record; syntax must be used deliberately |
| Stata | Commercial licence | Strong for econometrics, epidemiology and panel data; concise commands | Cost; smaller community than R or Python in many fields |
| jamovi, JASP | Free | SPSS-like interface built on R, APA-style output, Bayesian analyses (JASP) | Less flexible for complex or customised analyses |
In practice, the choice often depends more on your supervisor and research group than on features. If the whole lab uses Stata, using Stata gets you help fastest. What you should not do is use any tool in a way that leaves no record of the steps.
Rule one: analyse with code, not memory
Every step that turns raw data into a number in the paper should be captured as runnable code: cleaning, recoding, exclusions, analysis, figures. In SPSS, every dialog has a Paste button that writes the command to a syntax file instead of running it immediately. Getting into the habit of clicking Paste instead of OK is the single biggest improvement an SPSS user can make. In jamovi, the project file stores analyses and can export equivalent R code.
A firm companion rule: never edit the raw data by hand. No deleting rows, no fixing cells in the original file. Every change lives in code so you can always go back. Opening data in Excel and saving over the file is risky too: Excel can silently convert some strings to dates, strip leading zeros from ID codes or change decimal formats according to local settings.
A project folder structure
- data-raw/: data exactly as received, read-only, never modified.
- data-processed/: cleaned data created by code, which can be deleted and regenerated at any time.
- code/: scripts numbered in running order, such as 01-clean, 02-describe, 03-main-model, 04-sensitivity, 05-figures.
- output/: tables and figures, generated by code.
- README: the project, data sources, running order, software and versions.
A simple test: delete data-processed and output entirely, then run the scripts in order. If every table and figure in the paper reappears identically, your project is reproducible.
Record versions and randomness
- Different software and package versions can change results slightly. In R, renv records package versions for a project; in Python, a requirements file or conda environment does the same; at minimum, note versions in the README.
- Anything involving randomness, such as multiple imputation, bootstrapping, train-test splits or simulation, needs a random seed (set.seed in R, random_state in Python) so reruns give the same answer.
- Use Git for version control of your code. You do not need to be an expert; committing after each meaningful change is enough to answer “what did the model look like three months ago?”.
Dynamic documents: keeping tables and text in sync
Quarto, R Markdown and Jupyter notebooks let you interleave text and code, so numbers in sentences are pulled straight from the analysis. When data change, re-rendering updates every figure. This is the most effective defence against numbers in the text disagreeing with the tables, one of the errors reviewers catch most often. You need not write the whole paper this way; even an analysis appendix helps.
Reporting software in the paper
The methods should state the software and version, key packages with versions, and cite them. R and many packages print their preferred citation on request. Many journals encourage or require sharing analysis code; deposit it in a repository such as OSF or Zenodo to obtain a DOI and cite it in the paper. Sharing code is also a good way to force yourself to keep it tidy.
A transition path for SPSS users
- Weeks 1–2: keep using SPSS but Paste every analysis and save syntax in the folder structure above.
- Weeks 3–4: try jamovi or JASP for familiar analyses and compare results with SPSS.
- Month 2: learn R or Python through a small real project, such as redoing the descriptive statistics of your latest paper and checking every number.
- Month 3 onwards: use code for new projects, keeping SPSS for urgent tasks.
Learning a statistical programming language costs a few weeks up front and saves time on every project afterwards, especially during revisions.
In practice: a reproducibility checklist
- Raw data are stored separately and read-only.
- Every processing step lives in code or syntax, with no manual edits.
- Scripts are numbered in running order.
- Random seeds are set for every stochastic procedure.
- Software and package versions are recorded.
- A README explains how to rerun everything.
- You have deleted the outputs and rerun from scratch.
This week: pick a current project, reorganise it into the structure above and try rerunning it from the raw data. Wherever it breaks is exactly where a reviewer, or you in six months, would get stuck.
Câu hỏi thường gặp
Should I learn R or Python for statistics?
R is strong for specialised statistics and graphics and is widely used across the sciences; Python excels at large-scale data handling and machine learning. Prioritise whichever your research group uses.
Is SPSS still acceptable for a thesis?
Yes, if your university licenses it and your supervisor uses it. What matters is saving syntax with the Paste button so every analysis can be reproduced.
What are jamovi and JASP?
Free statistical packages with SPSS-like interfaces built on R. They handle common analyses well and produce APA-style output; JASP is particularly strong for Bayesian analysis.
How do I make my data analysis reproducible?
Keep raw data read-only, capture every step in code, number scripts in running order, set random seeds, record software versions and test by rerunning everything from scratch.
Do I need to report software versions in my paper?
Yes, state the software and version plus key packages, and cite them. This helps others reproduce your results and credits the developers.