Materials for the computational-methods Practice section
Chapter 7 separates what a computational method can do (iterate, model non-linear relationships, process high-dimensional data) from what a study is asking it to do: describe, explain, predict, or integrate. Its Practice section asks you to hold one published study against both distinctions.
The Practice assignment. Select one published study using network analysis, machine learning, word embeddings, or another method from this chapter, and write a one-page analysis covering: its epistemic purpose, the computational capacities its method depends on, how it handles epistemic opacity, the semantics-to-application gap, and temporal dynamics, whether its validation suits its purpose, and what you would do differently.
The studies, filtered to computational analysis
Sixty-four studies carry an annotation on their analytical approach.
Note
The computational capacity field in each study’s expandable detail uses the source table’s own vocabulary (simulation, iteration, prediction), which predates the one this chapter settles on. Only iteration means the same thing in both. Treat that field as a starting hint and do your own classification against the chapter’s three capacities, which is what the assignment is asking for anyway.
stageLens ="DA"
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>`
Question 3, on how the study handles opacity, the semantics-to-application gap, and temporal dynamics, is where the analysis either gets interesting or stays descriptive. Most published studies do not name these problems. The useful move is not to catch them out for the omission, but to work out whether the design handles the problem anyway, and how you can tell. A study can be robust to temporal drift without ever using the phrase.