Exercise Overview

You are analyst no. 6

This page describes the full exercise. Your work happens either in the Browser lab (Track A) or in your cloned template repository (Track B); come back here whenever you want the big picture.


The claim you are working on

Five independent analysts reanalysed a claim from Teney (2016) as part of the Multi100 project. The claim, as presented to all analysts, was:

“…poor economic performances … decrease positive dimensions of EU framing” (Teney 2016, p. 619)

The anchor result – the specific number the Task 2 constraints pointed to – is:

Unemployment → cosmopolitan EU framing: b = −0.0034, t = −4.03, p < .001 (Table 3, Model 1)

This comes from a three-level random-intercept model using pooled Eurobarometer data (16 waves, 2004–2013, 27 EU countries). Your first job is to get as close to this result as possible using a transparent, reproducible pipeline. Your second job is to deviate from it – deliberately, with a written justification – and see where that takes you.


The five published analysts

Before you begin, here is what the five Multi100 analysts found when they reanalysed the same claim:

Analyst Tool Statistic N Partial r
018OL R t = −1.21 420 −0.060
C6HJR R t = −3.80 270 −0.242
KEVF1 R t = −5.90 209,826 −0.452
KQXUE Stata t = −7.17 270 −0.419
PRL47 Stata z = −3.59 394,575 −0.006

All five reported a negative effect (same direction as the original). The partial r ranges from −0.006 to −0.452: a factor of 75. Five competent analysts, one claim, widely different estimates. The multiverse debrief at 12:15 will explain most of that gap. For now, notice it exists.


Tasks A–F

Task A – Concepts (during/after setup, ~5 minutes)

Goal: write three one-sentence definitions and identify which type of research activity this exercise is.

Track A: fill in the definition callouts in the Browser lab. Track B: edit the index.qmd in your cloned template repo; these are the first callout blocks at the top.

Evidence artifact: three completed definitions in your rendered report.


Task B – Get the data like a researcher (~5 minutes)

Goal: retrieve rep_data.csv from the analyst’s fork on OSF (osf.io/6zqct) using the osfr package; explore the panel. (The official Multi100 archival record is at osf.io/8rtwe; the fork adds the corrected April 2025 analysis and is what the fetch script targets.)

Track A: the data are pre-loaded in the browser environment; run the exploration chunks. Track B: run R/get_data.R, which tries osfr against the fork first, then falls back through two direct OSF download URLs, then to the copy hosted on this site.

Evidence artifact: a rendered data-overview section in your report (glimpse output + one small-multiples plot).


Task C – Estimand and DAG (~12 minutes)

Goal: state the estimand precisely, complete the half-built DAG, and write two sentences on what two-way fixed effects adjust for and what they cannot fix.

Track A: the DAG starter is in the browser environment as a dagitty object. Track B: edit R/dag_starter.R, add the edges you believe in, call ggdag() and adjustmentSets() in your report.

Evidence artifact: a rendered ggdag figure, adjustmentSets() output, and the two-sentence explanation.


Task D1 – Reproduce the constrained result (~10 minutes)

Goal: fit the two-way fixed-effects model mcosmopolitan ~ unemp_c | cntry + year and confirm t ≈ −3.80 (df = 233, N = 270, partial r ≈ −0.242).

Track A: run the model chunk in the Browser lab. Track B: the code is in the report skeleton; run it and check the output matches.

The fixest::feols() call is the primary estimator (fast in webR). A plm() equivalent is provided in a collapsed cell – the difference in standard errors between them is a talking point about vcov choices, not a bug.

Evidence artifact: a modelsummary() table in your report showing the constrained model.


Task D2 – Your fork in the path (~22 minutes)

Goal: choose ONE deviation from the specification menu, commit to it before you run it, run the model, and submit your result.

Preregister (Track B): commit your choice before running the model. The commit message must follow the format:

prereg: <DV> ~ <IV> | <estimator> | <sample>

For example: prereg: mpos ~ unemp | twoway FE | all years

Preregister (Track A): write your chosen spec and a one-sentence reason into your script before you run it, and tell your partner. That is your commitment – no git needed.

After running: run report_result() (on the Browser lab page, or from R/report_result.R in your template) and click the submission link it prints. Your result lands on the live Multiverse chart within seconds.

Evidence of the commitment: Track B – the prereg: commit timestamp precedes your model code; Track A – your written-down spec, shared with your partner before running.


Task E – Publish (~10 minutes)

Goal: render your report, commit and push (Track B), and post your live URL to the Discussion thread.

Track B: quarto render (or let Positron do it), then stage → commit → push via the Positron Source Control panel. The GitHub Actions workflow publishes to Pages automatically; the URL is https://yourusername.github.io/replication-lab/.

Track A: save your script/notebook, create a new public GitHub repository via github.com, upload your file using the web interface, and enable Pages (Settings → Pages → Source: GitHub Actions). The Cheatsheet has the three-minute walkthrough.

Evidence artifact: a live github.io URL posted to the Discussion thread.


Task F – Stretch (if time allows)

Pick a second specification from the menu, or compare your fixed-effects result with random effects using plm()’s Hausman test, or weight country-years by n_cy. Submit a second result via the report_result() link – it appears as another dot on the live chart.


What makes a result ‘valid’?

Your result is valid for the multiverse chart if it:

  • reports the unemployment coefficient (or its transformation) from a model on teney_panel.csv,
  • is submitted to the class-results form via the report_result() link (so it lands on the live Multiverse chart), and
  • has a written justification for the choice you made (2 sentences is enough).

The justification is the key part. The lesson from Auspurg & Brüderl (2021) is that a multiverse without stated reasons is just noise – with stated reasons, it becomes evidence.