Fjelstul Worldcup R Package -
The final story within the story is this: In December 2022, after Argentina beat France in the greatest final of all time, a 14-year-old girl in Jakarta opened RStudio for the first time. She typed:
The problem started simply enough. He was a PhD student researching European legal integration, but the 2018 World Cup had just ended. France had beaten Croatia 4-2. And like millions of others, Joshua found himself arguing with a friend: "Who actually committed the most fouls in a single final?" The official FIFA records were PDFs. Broken links. Inconsistent languages. One year, they tracked "dangerous play"; the next, they switched to "unsporting behavior." fjelstul worldcup r package
Most people would call this madness. Joshua called it . The final story within the story is this:
A journalist used fjelstul to prove that red cards were 40% more likely in knockout matches when the referee was from a nation with a colonial history over one of the teams. A high school teacher in Brazil taught probability using the distribution of hat-tricks. A data artist made a sonification of every World Cup goal—each country assigned a musical note, each tournament a movement. France had beaten Croatia 4-2
And then, quietly, something shifted. FIFA itself started referencing the package in internal memos. Not officially—they'd never admit it. But when they launched their own "enhanced stats" API in 2022, the field names matched Joshua's. event_id . minute_regulation . is_own_goal .
By 2020, the package had grown legs. Users on GitHub began opening issues: "Hey, the corner kick count for 1962 seems off." "Can you add referee nationalities?" "What about penalty shootout sequences?" Joshua didn't just fix them. He traced each correction back to a primary source—a grainy YouTube video of a black-and-white broadcast, a scanned Italian sports newspaper from 1934, a handwritten match report from the Uruguayan Football Association.
He didn't sue. He didn't tweet. He just updated the package to version 2.0.0, adding a new dataset: officiating_decisions_with_context .