The year is 2025, and you are working for the tooth fairy. Not for the tooth fairy per se, but at a franchise.
The world is doing well, better than ever. But due to some events at the end of 2020, the economy now runs on teeth, collected from human children. The teeth make up the chompchain. A new ledger where Hydroxyapatite matrixes are ‘proof of work’.
Your boss, the Vice Executive for the Subcommittee on Incisors Services, is a very competitive bureaucrat.
Their main goal is to one-up their professional rival.
The rival manages a similar district and was only able to collect 5,100 teeth last year.
Through some horse trading, your boss got a lucky break. They were able to get sharks counted as human children. Sharks produce many teeth, which helps your boss make the numbers.
Today, your boss has asked you when they should order a cake to celebrate besting their rival.
Armed with a tibble of tooth data, you get work.

| 2025-01-01 |
24 |
| 2025-01-02 |
10 |
| 2025-01-03 |
25 |
| 2025-01-04 |
24 |
| 2025-01-05 |
12 |
| 2025-01-06 |
28 |
We want to build a model of tooth collection. First, we need to get cumulative tooth counts, and to cast the dates to seconds since epoch.
Next, we estimate the parameter of seconds since epoch for a 4th-degree polynomial. I chose the 4th degree because the curve looked to be about right.
We have a minor rivalry on the line, no real dollars. I felt no need to be exacting.
our_model <- lm(cumulative_teeth ~ poly(sse, 4), data=cast_as_sse)
Next, we need to perform some tidy magic. First, we add a few rows to the tibble to hold space for our predictions. Next, we calculate seconds since epoch for the future dates. Last, we use add_predictions from modelr to call the model and store the results in a tibble.
predictions <- cast_as_sse %>%
add_row(on_date = tk_make_future_timeseries(cast_as_sse$on_date, 10)) %>%
mutate(sse = as.numeric(seconds(on_date))) %>%
add_predictions(our_model)
Here, we’re graphing out the cumulative growth of tooth collection. For emphasis, we add a handsome red line of when we can expect to have a nice office cake. This graph is going to look in Slack.

So it looks like you should have the cake arrive on: 2025-04-15
Yay offiice cake.
LS0tCnRpdGxlOiAiV2hlbiB0byBUaHJvdyBhIEdsb2F0aW5nIFBhcnR5IgpkYXRlOiAnMjAyMC0wOC0wMScKb3V0cHV0OiBodG1sX25vdGVib29rCi0tLQoKCmBgYHtyIGluY2x1ZGU9RkFMU0V9CmxpYnJhcnkoZHBseXIpCmxpYnJhcnkocHVycnIpCmxpYnJhcnkobW9kZWxyKQpsaWJyYXJ5KGx1YnJpZGF0ZSkKbGlicmFyeShzY2FsZXMpCmxpYnJhcnkodGltZXRrKQpsaWJyYXJ5KGtuaXRyKQpsaWJyYXJ5KGdncGxvdDIpCmBgYAoKYGBge3IgbWFrZV9kYXRhLCBpbmNsdWRlPUZBTFNFfQojIFBhcmFtZXRlcnMKc2V0LnNlZWQoMCkKYWxwaGEgPC0gMQpiZXRhIDwtIDAuMDUKdGhldGEgPC0gNAoKIyBTYW1wbGUgc29tZSBwb2ludHMgYWxvbmcgeCBheGlzCm4gPC0gMTAwCnggPC0gc2VxKG4pCmppdHRlciA8LSBhYnMocm5vcm0obiwgc2Q9MTUpKQoKZmFrZV9kYXRlcyA8LSBzZXEuUE9TSVh0KGFzLlBPU0lYY3QoJzIwMjUtMDEtMDEnKSwgYnk9J2RheXMnLCBsZW5ndGgub3V0ID0gMTAwKQpkZiA8LSBkYXRhLmZyYW1lKG9uX2RhdGUgPSBmYWtlX2RhdGVzLCAgdGVldGggPSByb3VuZChhbHBoYSAqIGV4cChiZXRhICogeCkgKyB0aGV0YSArIGppdHRlcikpCmBgYAoKVGhlIHllYXIgaXMgMjAyNSwgYW5kIHlvdSBhcmUgd29ya2luZyBmb3IgdGhlIHRvb3RoIGZhaXJ5LiBOb3QgZm9yIHRoZSB0b290aCBmYWlyeSBwZXIgc2UsIGJ1dCBhdCBhIGZyYW5jaGlzZS4gCgpUaGUgd29ybGQgaXMgZG9pbmcgd2VsbCwgYmV0dGVyIHRoYW4gZXZlci4gIEJ1dCBkdWUgdG8gc29tZSBldmVudHMgYXQgdGhlIGVuZCBvZiAyMDIwLCB0aGUgZWNvbm9teSBub3cgcnVucyBvbiB0ZWV0aCwgY29sbGVjdGVkIGZyb20gaHVtYW4gY2hpbGRyZW4uIFRoZSB0ZWV0aCBtYWtlIHVwIHRoZSBjaG9tcGNoYWluLiBBIG5ldyBsZWRnZXIgd2hlcmUgSHlkcm94eWFwYXRpdGUgbWF0cml4ZXMgYXJlICdwcm9vZiBvZiB3b3JrJy4gCgpZb3VyIGJvc3MsIHRoZSBWaWNlIEV4ZWN1dGl2ZSBmb3IgdGhlIFN1YmNvbW1pdHRlZSBvbiBJbmNpc29ycyBTZXJ2aWNlcywgaXMgYSB2ZXJ5IGNvbXBldGl0aXZlIGJ1cmVhdWNyYXQuCgpUaGVpciBtYWluIGdvYWwgaXMgdG8gb25lLXVwIHRoZWlyIHByb2Zlc3Npb25hbCByaXZhbC4KClRoZSByaXZhbCBtYW5hZ2VzIGEgc2ltaWxhciBkaXN0cmljdCBhbmQgd2FzIG9ubHkgYWJsZSB0byBjb2xsZWN0IDUsMTAwIHRlZXRoIGxhc3QgeWVhci4KClRocm91Z2ggc29tZSBob3JzZSB0cmFkaW5nLCB5b3VyIGJvc3MgZ290IGEgbHVja3kgYnJlYWsuIFRoZXkgd2VyZSBhYmxlIHRvIGdldCBzaGFya3MgY291bnRlZCBhcyBodW1hbiBjaGlsZHJlbi4gU2hhcmtzIHByb2R1Y2UgbWFueSB0ZWV0aCwgd2hpY2ggaGVscHMgeW91ciBib3NzIG1ha2UgdGhlIG51bWJlcnMuICAKClRvZGF5LCB5b3VyIGJvc3MgaGFzIGFza2VkIHlvdSB3aGVuIHRoZXkgc2hvdWxkIG9yZGVyIGEgY2FrZSB0byBjZWxlYnJhdGUgYmVzdGluZyB0aGVpciByaXZhbC4gCgpBcm1lZCB3aXRoIGEgdGliYmxlIG9mIHRvb3RoIGRhdGEsIHlvdSBnZXQgd29yay4KCmBgYHtyfQpnZ3Bsb3QoZGYpICsgZ2VvbV9saW5lKGFlcyh4PW9uX2RhdGUsIHk9dGVldGgpKSArIGxhYnMoeD0iRGF0ZSIsIHk9IlRlZXRoIiwgdGl0bGU9IlRlZXRoIENvbGxlY3RlZCBQZXIgRGF5IikKYGBgCmBgYHtyfQprYWJsZShoZWFkKGRmKSkKYGBgCldlIHdhbnQgdG8gYnVpbGQgYSBtb2RlbCBvZiB0b290aCBjb2xsZWN0aW9uLiBGaXJzdCwgd2UgbmVlZCB0byBnZXQgY3VtdWxhdGl2ZSB0b290aCBjb3VudHMsIGFuZCB0byBjYXN0IHRoZSBkYXRlcyB0byBzZWNvbmRzIHNpbmNlIGVwb2NoLiAKYGBge3J9CmNhc3RfYXNfc3NlIDwtIGRmICU+JSAKICBtdXRhdGUoY3VtdWxhdGl2ZV90ZWV0aCA9IGN1bXN1bSh0ZWV0aCkpICU+JSAKICBtdXRhdGUoc3NlID0gYXMubnVtZXJpYyhzZWNvbmRzKG9uX2RhdGUpKSkKaGVhZChjYXN0X2FzX3NzZSkKYGBgCk5leHQsIHdlIGVzdGltYXRlIHRoZSBwYXJhbWV0ZXIgb2Ygc2Vjb25kcyBzaW5jZSBlcG9jaCBmb3IgYSA0dGgtZGVncmVlIHBvbHlub21pYWwuIEkgY2hvc2UgdGhlIDR0aCBkZWdyZWUgYmVjYXVzZSB0aGUgY3VydmUgbG9va2VkIHRvIGJlIGFib3V0IHJpZ2h0LgoKV2UgaGF2ZSBhIG1pbm9yIHJpdmFscnkgb24gdGhlIGxpbmUsIG5vIHJlYWwgZG9sbGFycy4gSSBmZWx0IG5vIG5lZWQgdG8gYmUgZXhhY3RpbmcuIAoKYGBge3J9Cm91cl9tb2RlbCA8LSBsbShjdW11bGF0aXZlX3RlZXRoIH4gcG9seShzc2UsIDQpLCBkYXRhPWNhc3RfYXNfc3NlKQpgYGAKCk5leHQsIHdlIG5lZWQgdG8gcGVyZm9ybSBzb21lIHRpZHkgbWFnaWMuIEZpcnN0LCB3ZSBhZGQgYSBmZXcgcm93cyB0byB0aGUgdGliYmxlIHRvIGhvbGQgc3BhY2UgZm9yIG91ciBwcmVkaWN0aW9ucy4gTmV4dCwgd2UgY2FsY3VsYXRlIHNlY29uZHMgc2luY2UgZXBvY2ggZm9yIHRoZSBmdXR1cmUgZGF0ZXMuIExhc3QsIHdlIHVzZSBgYWRkX3ByZWRpY3Rpb25zYCBmcm9tIG1vZGVsciB0byBjYWxsIHRoZSBtb2RlbCBhbmQgc3RvcmUgdGhlIHJlc3VsdHMgaW4gYSB0aWJibGUuIApgYGB7cn0KcHJlZGljdGlvbnMgPC0gY2FzdF9hc19zc2UgJT4lIAogIGFkZF9yb3cob25fZGF0ZSA9IHRrX21ha2VfZnV0dXJlX3RpbWVzZXJpZXMoY2FzdF9hc19zc2Ukb25fZGF0ZSwgMTApKSAlPiUgCiAgbXV0YXRlKHNzZSA9IGFzLm51bWVyaWMoc2Vjb25kcyhvbl9kYXRlKSkpICU+JQogIGFkZF9wcmVkaWN0aW9ucyhvdXJfbW9kZWwpCgpgYGAKCkhlcmUsIHdlJ3JlIGdyYXBoaW5nIG91dCB0aGUgY3VtdWxhdGl2ZSBncm93dGggb2YgdG9vdGggY29sbGVjdGlvbi4gRm9yIGVtcGhhc2lzLCB3ZSBhZGQgYSBoYW5kc29tZSByZWQgbGluZSBvZiB3aGVuIHdlIGNhbiBleHBlY3QgdG8gaGF2ZSBhIG5pY2Ugb2ZmaWNlIGNha2UuIFRoaXMgZ3JhcGggaXMgZ29pbmcgdG8gbG9vayBpbiBTbGFjay4KYGBge3J9CmdncGxvdChwcmVkaWN0aW9ucywgYWVzKG9uX2RhdGUsIGN1bXVsYXRpdmVfdGVldGgpKSArCiAgZ2VvbV9saW5lKCkgKwogIGdlb21fbGluZShhZXMoeSA9IHByZWQpLCBjb2xvciA9ICdyZWQnLCBsaW5ldHlwZSA9ICdkYXNoZWQnKSArCiAgc2NhbGVfeV9jb250aW51b3VzKGxhYmVscyA9IHNjYWxlczo6dW5pdF9mb3JtYXQoCiAgICB1bml0ID0gImsiLAogICAgc2NhbGUgPSAxZS0zLAogICAgYWNjdXJhY3kgPSAxCiAgKSkgKwogIHNjYWxlX3hfZGF0ZXRpbWUobGFiZWxzID0gZGF0ZV9mb3JtYXQoIiViXG4lWSIpLCBkYXRlX2JyZWFrcyA9ICIxIG1vbnRoIikgKwogIGxhYnMoeCA9ICJEYXRlIiwgeSA9ICJDdW11bGF0aXZlIFRlZXRoIikgKwogIGdlb21faGxpbmUoYWVzKHlpbnRlcmNlcHQgPSA1MTAwKSkgKwogIGFubm90YXRlKAogICAgZ2VvbSA9ICdsYWJlbCcsCiAgICB5ID0gNTEwMCwKICAgIGxhYmVsID0gJ0Rpc3RyaWN0IFJlY29yZCcsCiAgICB4ID0gYXMuUE9TSVhjdCgnMjAyNS0wMS0wMScpLAogICAgaGp1c3QgPSAtLjMKICApCmBgYAoKU28gaXQgbG9va3MgbGlrZSB5b3Ugc2hvdWxkIGhhdmUgdGhlIGNha2UgYXJyaXZlIG9uOgpgciBwYXN0ZTAoIiIsIHByZWRpY3Rpb25zICU+JSBmaWx0ZXIocHJlZCA+IDUxMDApICU+JSBoZWFkKDEpICU+JSBwdWxsKG9uX2RhdGUpKWAKCllheSBvZmZpaWNlIGNha2UuIAo=