<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"><channel><title>Joe Despres — Writing</title><description>Joe Despres, Head of Technology, Sensory AI at NielsenIQ. Notes on statistics, production ML, and software.</description><link>https://joedespres.com/</link><item><title>Tracing a chart screenshot back to the run that made it</title><link>https://joedespres.com/blog/gglineage/</link><guid isPermaLink="true">https://joedespres.com/blog/gglineage/</guid><description>gglineage writes an ID into a ggplot2 chart as a faint row of dots, so a screenshot that has lost its file name and metadata can still be traced to the script and data behind it.</description><pubDate>Thu, 01 Oct 2026 00:00:00 GMT</pubDate></item><item><title>Building an Aliens motion tracker with a 24 GHz radar</title><link>https://joedespres.com/blog/aliens-motion-tracker-radar/</link><guid isPermaLink="true">https://joedespres.com/blog/aliens-motion-tracker-radar/</guid><description>A radar module, an I2C-to-UART bridge, and a 4.3-inch ESP32 screen. The signal chain works and the scope runs at 30 FPS. It hasn&apos;t looked through a wall yet.</description><pubDate>Mon, 28 Sep 2026 00:00:00 GMT</pubDate></item><item><title>Skim: reading one word at a time, and what it costs</title><link>https://joedespres.com/blog/skim-reading-instrument/</link><guid isPermaLink="true">https://joedespres.com/blog/skim-reading-instrument/</guid><description>Notes on an iPhone app that shows text one word at a time, what the research says that kind of reading costs, and the design choices I made to pay it back.</description><pubDate>Mon, 28 Sep 2026 00:00:00 GMT</pubDate></item><item><title>An RStudio addin that makes GitHub permalinks in one keystroke</title><link>https://joedespres.com/blog/perma-github-permalinks-from-rstudio/</link><guid isPermaLink="true">https://joedespres.com/blog/perma-github-permalinks-from-rstudio/</guid><description>perma is an RStudio addin that builds a GitHub permalink, pinned to the current commit, for the lines under the cursor, and follows a pasted permalink back to the file and line.</description><pubDate>Fri, 12 Jan 2024 00:00:00 GMT</pubDate></item><item><title>Linear algebra from scratch in Rust</title><link>https://joedespres.com/blog/linear-algebra-from-scratch-in-rust/</link><guid isPermaLink="true">https://joedespres.com/blog/linear-algebra-from-scratch-in-rust/</guid><description>Four months, 58 commits, and a matrix inverse built from cofactors. The type system flagged the float sorting problem. It didn&apos;t catch a single shape error.</description><pubDate>Tue, 15 Aug 2023 00:00:00 GMT</pubDate></item><item><title>Generating tabular data with a GAN, one tiny network per row</title><link>https://joedespres.com/blog/stroke-outcomes-gan/</link><guid isPermaLink="true">https://joedespres.com/blog/stroke-outcomes-gan/</guid><description>A collaborator and I tried to generate synthetic rows of tabular data with a GAN, starting with a stroke trial and ending with New York taxi trips.</description><pubDate>Fri, 29 Apr 2022 00:00:00 GMT</pubDate></item><item><title>Predicting wine scores from chemistry, and from price and region</title><link>https://joedespres.com/blog/predicting-wine-quality/</link><guid isPermaLink="true">https://joedespres.com/blog/predicting-wine-quality/</guid><description>I tried to predict wine ratings two ways, from lab chemistry and from price and region. The models beat always guessing the most common score, but not by enough to pick out the rare great bottle.</description><pubDate>Wed, 27 Apr 2022 00:00:00 GMT</pubDate></item><item><title>Pricing a butterfly spread with Black–Scholes</title><link>https://joedespres.com/blog/black-scholes-butterfly-spread/</link><guid isPermaLink="true">https://joedespres.com/blog/black-scholes-butterfly-spread/</guid><description>Three Black–Scholes call prices add up to the price of a butterfly spread with strikes at 90, 100 and 110, and three months before expiry its value across stock prices looks nothing like its payoff.</description><pubDate>Tue, 19 Apr 2022 00:00:00 GMT</pubDate></item><item><title>What a small online shop&apos;s orders said about its customers</title><link>https://joedespres.com/blog/online-shop-sales-analysis/</link><guid isPermaLink="true">https://joedespres.com/blog/online-shop-sales-analysis/</guid><description>Top products, repeat customers, coupon use, and a market-basket analysis in R for a small Etsy shop&apos;s 2021 sales.</description><pubDate>Wed, 22 Dec 2021 00:00:00 GMT</pubDate></item><item><title>Forecasting 500 store-item sales series with six models</title><link>https://joedespres.com/blog/store-item-demand-forecasting/</link><guid isPermaLink="true">https://joedespres.com/blog/store-item-demand-forecasting/</guid><description>We fit six forecasting models to each of the 500 store-item series in a Kaggle retail dataset. Prophet had the lowest daily error, and predicting the best model for each day didn&apos;t beat Prophet alone.</description><pubDate>Sun, 05 Dec 2021 00:00:00 GMT</pubDate></item><item><title>How many rooms should a hotel overbook?</title><link>https://joedespres.com/blog/hotel-overbooking/</link><guid isPermaLink="true">https://joedespres.com/blog/hotel-overbooking/</guid><description>A binomial rule and a per-guest arrival model for deciding when a hotel should stop taking reservations, with a correction to the original formula and simulation.</description><pubDate>Tue, 05 Oct 2021 00:00:00 GMT</pubDate></item><item><title>Measuring Brussels sprout tenderness with a fork and a kitchen scale</title><link>https://joedespres.com/blog/brussels-sprouts-experiment/</link><guid isPermaLink="true">https://joedespres.com/blog/brussels-sprouts-experiment/</guid><description>I air-fried 54 Brussels sprout halves at nine time and temperature settings and measured tenderness with a kitchen scale, a fork, and the click in a video&apos;s audio track. The measurement worked. The design had fewer replicates than it looked like.</description><pubDate>Thu, 29 Apr 2021 00:00:00 GMT</pubDate></item><item><title>Picking the 2021 NCAA tournament with three GLMs</title><link>https://joedespres.com/blog/march-madness-glms/</link><guid isPermaLink="true">https://joedespres.com/blog/march-madness-glms/</guid><description>We fit logistic, Poisson, and multinomial models to twenty seasons of college basketball and scored them on the 2021 tournament. All three beat a coin flip. The sample was too small to rank them.</description><pubDate>Tue, 20 Apr 2021 00:00:00 GMT</pubDate></item><item><title>Scoring simple forecasts across S&amp;P 500 stocks</title><link>https://joedespres.com/blog/forecasting-stock-prices-baselines/</link><guid isPermaLink="true">https://joedespres.com/blog/forecasting-stock-prices-baselines/</guid><description>I ran four textbook forecasting methods on every S&amp;P 500 stock, held out the last 20 closing prices, and compared the errors in aggregate.</description><pubDate>Tue, 09 Feb 2021 00:00:00 GMT</pubDate></item><item><title>Scoring a Secret Santa guessing game with R and Google Forms</title><link>https://joedespres.com/blog/secret-santa-scoring-in-r/</link><guid isPermaLink="true">https://joedespres.com/blog/secret-santa-scoring-in-r/</guid><description>A Google Form, googlesheets4, and one across() call that uses cur_column() to score every guess against an answer key the players supplied themselves.</description><pubDate>Thu, 24 Dec 2020 00:00:00 GMT</pubDate></item><item><title>Rebuilding summary(lm()) with matrix algebra</title><link>https://joedespres.com/blog/linear-regression-from-scratch-in-r/</link><guid isPermaLink="true">https://joedespres.com/blog/linear-regression-from-scratch-in-r/</guid><description>An R function that turns a formula into a design matrix and reproduces the summary(lm()) coefficient table with matrix operations, and a test of how much precision the explicit inverse loses next to a QR decomposition.</description><pubDate>Wed, 23 Dec 2020 00:00:00 GMT</pubDate></item><item><title>Testing 20,000 SNPs at once</title><link>https://joedespres.com/blog/multiple-testing-snps/</link><guid isPermaLink="true">https://joedespres.com/blog/multiple-testing-snps/</guid><description>What Bonferroni, Holm, and Benjamini–Hochberg each buy you when you run 19,996 association tests, shown on a simulation with the same shape as the original data.</description><pubDate>Fri, 04 Dec 2020 00:00:00 GMT</pubDate></item><item><title>Simulating power for a BMI and blood pressure regression</title><link>https://joedespres.com/blog/monte-carlo-power-analysis/</link><guid isPermaLink="true">https://joedespres.com/blog/monte-carlo-power-analysis/</guid><description>Estimating power for a blood pressure regression by simulating the study 10,000 times at each setting, without a power formula, and working out how many people it takes to detect a BMI effect or a sex difference in it.</description><pubDate>Fri, 13 Nov 2020 00:00:00 GMT</pubDate></item><item><title>A bootstrap band for gout risk, and an exponential MLE three ways</title><link>https://joedespres.com/blog/bootstrapping-logistic-regression/</link><guid isPermaLink="true">https://joedespres.com/blog/bootstrapping-logistic-regression/</guid><description>Bootstrap confidence bands for a logistic regression, likelihood and bootstrap standard errors for an exponential rate, and the small-sample bias of the rate estimate.</description><pubDate>Sun, 25 Oct 2020 00:00:00 GMT</pubDate></item><item><title>Meeting lengths in three years of Michigan small business counseling records</title><link>https://joedespres.com/blog/sbdc-meeting-data/</link><guid isPermaLink="true">https://joedespres.com/blog/sbdc-meeting-data/</guid><description>What Michigan Small Business Development Center counseling records from fiscal years 2016 through 2018 show about meeting lengths, from where consultant time went to differences by weekday and by client and consultant sex.</description><pubDate>Tue, 19 May 2020 00:00:00 GMT</pubDate></item><item><title>Forecasting frozen veggie burgers, and losing to the naive method</title><link>https://joedespres.com/blog/forecasting-grocery-sales/</link><guid isPermaLink="true">https://joedespres.com/blog/forecasting-grocery-sales/</guid><description>Forecasting weekly Morning Star Farms sales at Walmart and Meijer with fpp2 methods, where the simplest forecast won.</description><pubDate>Sat, 25 Apr 2020 00:00:00 GMT</pubDate></item><item><title>Thirty charts for a mock FOMC meeting</title><link>https://joedespres.com/blog/fed-challenge-2019/</link><guid isPermaLink="true">https://joedespres.com/blog/fed-challenge-2019/</guid><description>In a 2019 Fed Challenge, our team played the FOMC and made a rate call. I wrote the R code that built our charts from FRED. We recommended a cut, and the Fed cut a week later.</description><pubDate>Tue, 22 Oct 2019 00:00:00 GMT</pubDate></item><item><title>Will younger workers benefit from population aging?</title><link>https://joedespres.com/blog/population-aging-and-wages/</link><guid isPermaLink="true">https://joedespres.com/blog/population-aging-and-wages/</guid><description>I regressed individual wages on county age structure for 2009, 2012, and 2017. The 2017 result was negative, and the other two years didn&apos;t agree with it.</description><pubDate>Tue, 06 Aug 2019 00:00:00 GMT</pubDate></item><item><title>Does a graduate degree close the wage gap between college majors?</title><link>https://joedespres.com/blog/returns-to-education-by-major/</link><guid isPermaLink="true">https://joedespres.com/blog/returns-to-education-by-major/</guid><description>Log-wage regressions on American Community Survey microdata compare ten college majors at the bachelor&apos;s, master&apos;s, and doctorate levels. The ranking of majors barely changes from one level to the next.</description><pubDate>Thu, 18 Apr 2019 00:00:00 GMT</pubDate></item></channel></rss>