122 published computational studies, annotated by research-design stage
Chapters 3, 5, 7, and 9 close with a Practice section asking you to select a published computational study and analyze how it handles one research-design problem. This is the table those sections draw on, and it is searchable here rather than in a spreadsheet.
Each study carries a written annotation for the design stages it illustrates. Those annotations are the point: they record how the study handled its data, its measures, its analysis, or its reporting, which is what the Practice assignments ask you to critique.
What is in the table, and what is not
Each row is a published empirical study using computational methods in the social sciences. It is a teaching resource, not a systematic review: studies were selected to span methods, disciplines, and epistemic purposes, not to be exhaustive.
Coverage is uneven by design stage: 91 studies are annotated for data management, 64 for analysis, 48 for concept representation, 44 for communication. A study with no annotation for a stage is not a study that handles it badly; it simply has not been read through that lens yet.
The computational capacity field, shown under each study’s expandable detail, carries the source table’s own coding (simulation, iteration, prediction). That vocabulary predates the one Chapter 7 settles on (iteration, non-linear modeling, high-dimensional processing) and has not been recoded, so read it as the table’s coding rather than the book’s.
Two further limits worth knowing. Ten studies carry no stage annotation yet: they appear in the unfiltered list but in none of the four lenses. And coverage is weighted toward 2013–2019, with only thirteen studies from 2020 or later. The table is therefore a poor guide to what the field is doing right now, and a reasonable one for how design decisions have been made in published work.
Browse the database
stageLens =null
studiesData = {const rows =await d3.csv("/studies/studies.csv");return rows.map(d => ({...d,yearNum:+d.year||null,stageList: (d.stages||"").split("|").filter(s => s),recNum:+d.top_rec||0 }));}stageMeta = ({DM: {label:"Data management",chapters:"Ch. 3–4",note:"dm_note",accent:"#1f6feb"},CR: {label:"Concept representation",chapters:"Ch. 5–6",note:"cr_note",accent:"#8250df"},DA: {label:"Computational analysis",chapters:"Ch. 7–8",note:"da_note",accent:"#bc4c00"},SC: {label:"Scientific communication",chapters:"Ch. 9–10",note:"sc_note",accent:"#1a7f37"}})// A lens is either fixed by the hub page or chosen by the reader. When fixed,// show plain text instead of a disabled dropdown: a disabled control announces// as "unavailable" to screen readers, which misdescribes a deliberate setting.viewof chosenLens = stageLens ===null? Inputs.select(newMap([ ["All design stages","ALL"],...Object.entries(stageMeta).map(([k, v]) => [`${v.label} (${v.chapters})`, k]) ]), {label:"Design stage",value:"ALL"} ): Inputs.input(stageLens);activeLens = stageLens ===null? chosenLens : stageLensinScope = activeLens ==="ALL"? studiesData: studiesData.filter(d => d.stageList.includes(activeLens))viewof queryText = Inputs.text({label:"Search",placeholder:"title, journal, abstract, annotation…",width:320,submit:false})viewof disciplinePick = Inputs.select( ["All disciplines",...newSet(inScope.map(d => d.discipline).filter(x => x))].sort( (a, b) => (a ==="All disciplines"?-1: b ==="All disciplines"?1: a.localeCompare(b)) ), {label:"Discipline",value:"All disciplines"})viewof recommendedOnly = Inputs.toggle({label:"Recommended starting points only",value:false})filtered = {const q = (queryText ||"").trim().toLowerCase();return inScope.filter(d => disciplinePick ==="All disciplines"|| d.discipline=== disciplinePick).filter(d =>!recommendedOnly || d.recNum>=4).filter(d => {if (!q) returntrue;return [d.title, d.journal, d.abstract, d.discipline, d.theme, d.dm_note, d.cr_note, d.da_note, d.sc_note].some(v => (v ||"").toLowerCase().includes(q)); }).sort((a, b) => (b.recNum- a.recNum) || (b.yearNum- a.yearNum));}
stageLens ===null?html``:html`<p class="lens-static">Design stage: <strong>${stageMeta[stageLens].label}</strong> (${stageMeta[stageLens].chapters}; fixed on this page. <a href="/studies/">Browse all stages</a>.)</p>`
html`<p class="studies-count" role="status"> <strong>${filtered.length}</strong> ${filtered.length===1?"study":"studies"}${activeLens ==="ALL"?"":`annotated for ${stageMeta[activeLens].label.toLowerCase()}`}${filtered.length!== inScope.length?html`<span> · filtered from ${inScope.length}</span>`:""}</p>`
Switching the design-stage filter changes which annotation each card shows. Following a single study across all four is a useful exercise in its own right: it shows how a decision at one stage constrains the options at the next. The studies flagged recommended are the ones that reward that treatment most.
Take the whole table
studies.csv: every field, including the full annotations
Both files are rebuilt by scripts/build_studies.py, which also documents the two normalizations applied to the source table and the two it deliberately does not apply.
Suggesting an addition
Proposals are welcome, particularly work from outside North America and Europe, from journals not usually indexed in methods coursework, or using methods currently thin in the table. Studies published since 2023 are especially welcome: the table’s coverage thins after that year. Send suggestions through the errata page contact route.