DV Assignment 2 (Group Project)

Instructions

For the second and final assignment of the Data Visualization module, which you complete in a group, the challenge is to transform raw data into a clear and compelling story. Your goal is to design a visualization using the DUO doorstroomtoets (transfer test) data that highlights meaningful patterns and provides actionable insights. You can choose one of four research questions (substantiated below), or formulate your own (RQ5). You are expected to do some further data preparation and/or filtering of this data to obtain clean, reliable results. For RQ1–RQ4, you are not expected to find data from other sources or perform complicated data manipulations to derive a variable – focus on using the data given to create a sound data visualization.

The assignment consists of two parts:

What Due Grading
Part 1 Research question and exploration: choose your research question, set up your project, and make a first exploratory visualization Sunday October 4th, 2026, 23:59 (same deadline as Assignment 1) complete / incomplete
Part 2 Final report: your final, explanatory data visualization, in a short report Sunday October 11th, 2026, 23:59 graded (see Grading)

In class 1 you indicate your preference for a research question, and you are assigned a group to work with. Please make sure to clearly indicate your group number and the names of all group members in every submission. One person submits each part on behalf of the group. If more than one person submits, we will only look at one of the submissions.

Workflow

There are several guidelines on workflow which you should follow when collaborating on this project:

  • Comment your code clearly. This not only helps us to understand your process, but your group members to collaborate efficiently.

  • Use Git. Set up the project following the instructions in Part 1.

Part 1: Research question and exploration

The goal of Part 1 is to get your project off the ground: by the end of the first week, your group should have a clear research question, a working project setup, and a first look at the data. Part 1 is graded as complete / incomplete: we don’t grade the quality of your plot, but use it to give you feedback on your ideas early on.

A. Specify your research question

Together with your group, read the instructions for your research question in Research Questions below. If you choose RQ5, formulate your own research question as described there.

  • Does your project take an analytical, inference, or predictive approach (see Levels of visualization)? Is it clear what is expected in the final data visualization with regards to the approach?
  • Who is your target audience? How might this influence choices for your final visualization?

B. Set up your project and load the data

For this project, you will collaborate using Git. Follow the instructions in Working with Git to:

  1. set up Git on your own computer (everyone);
  2. create your group’s public repository from the template repository, and add your groupmates as collaborators (one group member);
  3. clone the repository into RStudio, and make a first commit by adding your name to the README.md (everyone, one at a time).

If this is done correctly, the resulting repository should have the following folder structure:

<your-repo-name>/
├── .gitignore
├── README.md
├── <your-repo-name>.Rproj     <- created by RStudio when you clone
├── assignment-1/              <- your individual Assignment 1, ignored by Git
│   └── assignment-1-README.md
├── data/
│   └── raw/                   <- only appears after running 01-get-data.R
├── scripts/
│   ├── 00-packages.R
│   └── 01-get-data.R
└── report/
    ├── DV-Assignment2-Part1-GroupX.Rmd
    └── DV-Assignment2-Part2-GroupX.Rmd

When every group member has pushed their name, and everyone can pull the others’ changes, you are properly set up to work together using Git!

Feel free to add folders or files within the repository if necessary. Make sure that you maintain the structure such that you follow a reproducible workflow.

Now, load in the data. In the scripts/ folder, first run 00-packages.R to install and load all the packages you need, then run 01-get-data.R to download the data into data/raw/ and load it. Examine the data, and discuss with your group:

  • What is the structure of the data?
  • What are the main variables? Can you already make some exploratory plots to understand these variables better?
  • What data cleaning steps are necessary? Do you, for example, need to filter out some observations to obtain reliable results?

C. Make an exploratory visualization

Make a visualization that helps you (and us) understand the data behind your research question, with these minimal requirements:

  • use multiple plots
  • change the theme (you can use a default theme or create your own)
  • use a good color-scheme, for example colorblind proof
  • highlight some interesting data points, for example using color or text

Include a short description of what the visualization shows, and what you learned from it about your research question. This plot does not have to be the plot for your final project (it probably is not), but use it to get feedback from us on your current ideas.

Submitting Part 1

Write Part 1 in report/DV-Assignment2-Part1-GroupX.Rmd (rename GroupX to your group number): fill in the Research question section (your research question, its level, and your target audience) and the Exploratory process section (your exploratory visualization and its description). Knit the report, push your work to GitHub, and submit the .Rmd and .html files on Canvas, under “DV Assignment 2 – Part 1”. Include the link to your group’s GitHub repository in your Canvas submission.

Part 1 is complete if it contains:

  • a specific research question, its level (analytics, inference or prediction), and a target audience;
  • at least one exploratory visualization that meets the requirements above, with a short description;
  • code that runs, in your group’s GitHub repository.

Part 2: Final report

The report

You will write the assignment in R Markdown (or Quarto), to produce a report-style document of around 1000 words. The final version should be compiled into .html format.

The report should be a description of the process that led to your final data visualization. You should include:

  • An explanation of your research question and the target audience for your visualization. What did you want to communicate?

  • A description of your exploratory process, including at least one exploratory graph. This can be the graph that you created in Part 1, or an updated one. While this graph is intended to illustrate your thought process, its aesthetic- and communicative quality will not be graded. However, we will grade the quality of the report as a whole, which includes communication about how the exploratory graph helped you to understand the data, and influenced your choices for the final, explanatory, data visualization.

  • Your final, explanatory, data visualization. Clearly mark which one of your visualizations this is. Include the visualization, along with an explanation of what it aims to communicate. Importantly, what can you conclude from this visualization? Why is this the best way to communicate this conclusion? How robust are your findings? This should follow logically from the introduction of your report (research question & exploration).

  • An AI use section, at the end of your report (see below).

AI use section

We encourage you to use AI tools in this project, but you remain responsible for every chart and every claim in your report, including the parts AI helped with. Close your report with a short section titled AI use (around 150–250 words), in which your group discloses and reflects on how you used AI. Use the AI log and the team guidelines you wrote in the AI worksheet as your starting point. Cover:

  • Tools: which AI tools and models did you use (e.g. ChatGPT with GPT-5, Claude Sonnet, GitHub Copilot)?
  • Tasks: for which stages of the project did you use them (sharpening the question, cleaning, exploring, designing, coding, writing), and for which did you deliberately not use them? Why?
  • Context and constraints: what did you give the AI to work with (e.g. the codebook, your research question, a shared context file), and what did you ask it to do or not do?
  • Verification: how did you check the output?
  • Reflection: what did you learn from working with AI on this project, and which obstacles or risks did you run into? If it happened, also give examples of things the AI got wrong, decided silently, or added that didn’t serve your message (and what you did about it).

If you did not use AI at all, state this in the AI use section, and briefly explain why.

Grading

The final report will be graded on the following elements:

  • Aesthetics [30%]: The overall visual quality of the plot. Is it clear and legible, with no unnecessary clutter? Do choices like color, labels, or scales enhance readability and interpretation?
  • Communication [30%]: How well the visualization conveys its intended message. Can the main point be understood quickly with minimal explanation? Do the title, labels, and layout support effective communication?
  • Description [20%]: The quality of the written report. Does it clearly state the research question, what you wanted to communicate, and why this visualization is appropriate? Does it provide a concise interpretation of what can be concluded from the data? Is it explanatory? Does it include an AI use section that clearly describes which tools you used, what for, and how you checked their output? Has AI use been evaluated?
  • Creativity and Complexity [10%]: The thoughtfulness and depth of the visualization. Does it go beyond a default chart type when appropriate? Were creative or more complex techniques used in a way that adds value without obscuring the message?
  • Code Quality and Styling [10%]: The clarity and reproducibility of the R code. Does the code run without errors and generate the submitted plot? Is it well-structured, readable, and consistent with good style practices (i.e., lintr-proof)?

Pitches

By Session 4 (Friday, October 9th), you should have a first draft of your final visualization ready. Render it in an html file, and upload to canvas. The draft is not graded, but the further along it is, the more useful the feedback you will get.

In Friday’s class, each group gives a short pitch of their project. Cover:

  • Your research question: what did you want to find out, and for whom?
  • Your approach: how did you tackle the question in the data?
  • Your conclusion: what can you conclude, and how does your visualization support that conclusion?
  • Open questions: which aspects are you still unsure about?

Use the pitch to get feedback from the rest of the group, so bring the questions you would like input on. You do not need to prepare slides, or have any text on the screen. Just show your data visualization so far. In this session, we would also like you to briefly share how you used AI in your project. What did you learn from it? Did you run into any obstacles, pitfalls, or risks along the way, especially ones not covered in the class? Please think about this beforehand so we can have a fruitful discussion.

The pitches should be 4-5 minutes for presenting your plot, followed by a 3-minute discussion with the group.

Submitting Part 2

The final draft of your report and data visualization is due Sunday, October 11th, 23:59. You will hand in the assignment on Canvas. Please hand in the following:

  • The link to your group’s (public) GitHub repository, with all your code pushed. Make sure your GitHub Repo can be cloned, and we can reproduce all your work.

  • Your .Rmd file (report/DV-Assignment2-Part2-GroupX.Rmd). Here we will check your code styling and documentation. Run lintr beforehand! Please add your group number in the file name.

  • Your .html file. Make sure it renders correctly; we will not compile your .Rmd file ourselves. Here, we will grade your report and visualization. Thus if any components are missing, we will not be able to give you points for them.

General tips
  • Start by getting to know the data: one row is one school, not one student. Look at how many students each school has, and how many of its counts are hidden as "<5", before you aggregate anything.

  • After developing your workflow, reflect on the robustness of your analysis. Would your findings change when you rerun the analysis on different data, or under altered conditions? Explain why or why not in your conclusion.

  • Make sure to render your final visualization large enough so it is readable in the html.

  • Consider the subset of your data that you want to visualize. Does it make sense to plot general effects, or showcase your main point with one or a couple of schools or municipalities?

  • Add interactive elements only if you think it adds value to your visualization.

  • Highlight your main conclusion!.

  • Before handing in your final visualization, look at the guiding principles. Have you met these conditions?

Levels of visualization

Your chosen research question falls into one of three levels: analytics, inference, or prediction. Each level has different expectations in terms of how the visualization should be constructed and what role statistical modeling plays.

Analytics

Analytics is about describing and comparing what is happening in the data, often in a way that is directly actionable for a practitioner. At this level, we expect you to create clear, actionable visualizations that are easy to interpret for a practitioner (e.g. a school board or municipal education officer). This should rely less on statistical modeling and more on effective communication of patterns in the data. You do, however, need to make sure that the patterns communicated are reliable.

Inference

Inference goes one step further: it aims to explain differences or relationships in the data, often by comparing groups or testing hypotheses. We expect a visualization at this level to be supplemented with statistical tests or models (e.g. significance tests). The visualization should not only show patterns but also provide evidence for why the observed differences matter.

Prediction

Prediction focuses on using current information to forecast outcomes. At this level, you should fit and interpret a predictive model (e.g., a linear or logistic regression). The visualization should clearly communicate how well the model performs, what predictors matter, and what can be learned from the model’s outcomes.

Data and codebook

All research questions use the DUO open data that you already worked with in the worksheets: eindscores, referentieniveaus, schooladviezen and schoolweging. Start from the template repository: its scripts/01-get-data.R downloads and loads all four files.

  • The data: background & codebook explains where the data comes from, the fairness debate these questions come from, every column in the four files, and the Dutch terms you’ll run into (reference levels, school advice tracks, schoolweging).
Hidden counts: "<5"

DUO hides any count below 5 and writes the text "<5" instead. In referentieniveaus and schooladviezen this happens a lot, because students are split over many small categories. If you simply drop the schools with a "<5" somewhere, almost no schools are left over.

You will therefore need to decide how to handle "<5", for example by replacing it with a number (such as 2.5, the midpoint of 1–4). This is an assumption, so check whether your conclusion changes when you use 1 or 4 instead, and report this in your robustness section.

Research Questions

RQ1. Which schools in a municipality are on track for reading and maths?

Expand Instructions

Level: Analytics

Target audience: a municipal education officer or a school board.

Instruction: Choose one municipality, and visualize how each of its primary schools performs on the reference levels for maths (1F and 1S) and reading (1F and 2F). The visualization should be useful for the municipality: they should be able to see at a glance which schools are on track and which are falling behind. There could be many ways to define “on track”, for example:

  1. National benchmark: compare each school to the national average share of students reaching each level.

  2. Comparable-schools benchmark: compare each school to schools with a similar student population, i.e. a similar schoolweging. A school with many disadvantaged students and 40% at 1S may be doing better than expected, while a school with very few disadvantaged students and the same 40% may not be.

Good municipalities to start with are Haarlem (38 schools), Leiden (25) or Delft (25). Larger cities like Amsterdam (200+ schools) are possible, but you will need to think harder about how to keep the plot readable.

Tip
  • Some schools only have 10–15 students in group 8. How reliable is a percentage based on so few students, and how does the "<5" replacement affect small schools in particular? (How) will you show this in your visualization?

  • Almost every school gets (nearly) all students to the basic 1F level. Which levels are actually informative for telling schools apart?

  • You do not need to worry about generalizability to other municipalities. The visualization should be relevant for this one municipality.


RQ2. Does the choice of test provider matter, even for schools with a similar student population?

Expand Instructions

Level: Inference

Target audience: policymakers, or the general public (think of a newspaper graphic).

Instruction: Schools can choose which of six providers’ doorstroomtoets their students take. The Volkskrant reported that schools using some providers get structurally better results than comparable schools using another provider. In this RQ, you will test whether you can find the same in the DUO data.

The raw test scores (*_GEM in eindscores) are on six different scales and can’t be compared across providers. Use the reference levels instead: they are meant to mean the same thing regardless of which test a student took. Choose one or more of the following outcomes:

  1. pct_maths_1s: share of students reaching the maths target level
  2. pct_reading_2f: share of students reaching the reading target level

Compare these between providers, while accounting for schoolweging – schools do not choose their provider at random, so a raw comparison between providers is misleading. Support your visualization with a statistical model (e.g. a linear regression with provider and schoolweging as predictors).

Tip
  • You might not be able to replicate the patterns from the article exactly. Critically check why that may be; what statistical choices could affect the final outcome?

  • A statistically significant difference is not necessarily a large one. How big are the differences, in terms your audience understands?

  • This is school-level data: you know which provider a school used, not the scores of individual students. What can and can’t you conclude from that?


RQ3. Do schools with similar test results give similar secondary-school advice?

Expand Instructions

Level: Inference

Target audience: secondary schools, or policymakers.

Instruction: At the end of primary school, every student receives a school advice for a secondary-school track (PRO, VMBO, HAVO, VWO, see the codebook). The advice is based on the teacher’s judgement and on the doorstroomtoets. In this RQ, you will investigate how closely a school’s advice follows its students’ test results, and whether this differs between schools with a more or less disadvantaged student population.

Relate a measure of the school’s advice (e.g. pct_havo_plus) to a measure of its test results (pct_maths_1s and/or pct_reading_2f), and test whether schoolweging moderates this relationship. Do two schools with the same results give the same advice, regardless of who their students are?

Tip
  • pct_havo_plus is only one way to summarise the advice. You could also turn the tracks into a numeric scale (PRO = 1, …, VWO = 6) and compute an average advice per school, or do something else. Argue your choice.

  • How will you communicate statistical differences in a simple and meaningful way?.


RQ4. Can we predict how many students get a HAVO-or-higher advice from a school’s context?

Expand Instructions

Level: Prediction

Target audience: school boards or the Inspectorate, who could use such a model to spot schools whose advice is unexpectedly high or low.

Instruction: Fit a model that predicts a school’s share of students with a HAVO-or-higher advice (pct_havo_plus) from characteristics of the school and its student population. Deliberately leave out the test results themselves (the reference levels): we want to know how much the context alone predicts. Examples of predictions you can choose between:

  1. schoolweging (how disadvantaged the student population is)
  2. spreiding (how much the students within a school differ from each other in disadvantage)
  3. n_students_school (school size)
  4. provider (which doorstroomtoets the school used)
  5. PROVINCIE
  6. DENOMINATIE_VESTIGING (the school’s religious or educational denomination)

You can also look for more variables/data elsewhere. Evaluate your model on data it hasn’t seen (e.g. a train/test split) and communicate how well it performs, which predictors matter, and which schools deviate most from what the model predicts.

Tip
  • Some categories may only be associated with a few schools. How will you handle missing / too little data?

  • A school with 8 students in group 8 will have a much noisier pct_havo_plus than a school with 80. How do you deal with that in your model, or in your visualization?


RQ5. Your own research question

Expand Instructions

Level: Your choice (analytics, inference or prediction)

Instruction: If none of the questions above appeal to you, you can formulate your own. The DUO data should be the core of your project, but you are welcome to combine it with other data. This option gives you more freedom, but it also asks more of you: you have to make the choices that RQ1–RQ4 make for you. Before you start working on the data, make sure you have specified the following:

  1. A very specific research question. “Is the doorstroomtoets fair?” is a topic, not a research question. A good question names the outcome, the comparison and the population, so that it’s clear which plot and which analysis would answer it.

  2. An approach. Is your question one of analytics, inference or prediction (see Levels of visualization)? Explain why, and what statistical test or model (if any) you will use to support your visualization.

  3. A target audience. Who is your visualization for, and what should they be able to do or conclude after seeing it?

State all three explicitly at the start of your report.

Adding other data. You can look for other data to combine with the DUO files, for example DUO data from other school years (to look at changes over time), neighbourhood statistics from CBS (Statistics Netherlands), or geographic data to make a map. The school codes (INSTELLINGSCODE, VESTIGINGSCODE), postcode (POSTCODE_VESTIGING) and municipality (GEMEENTENAAM, GEMEENTENUMMER) are the columns you can use to join other data to the DUO files. Make sure the added data is not too overwhelming and still works to support one streamlined research question.

We recommend using AI tools to help you with this: to sharpen your question, to find datasets that could answer it, and to figure out how to join them to the DUO data. But check what AI gives you: Make sure the dataset actually exists and comes from a trustworthy source, check how many schools actually match after joining (and which ones don’t), and describe in your report which data you used, where it comes from, and how you combined it.

Tip
  • Keep the question narrow and refined. Your final visualization should support one conclusion.

  • Before you commit to a question, check that the data can actually answer it: are the variables you need there, and are there enough schools in each group you want to compare?