Things you should buy, quantified

This piece showcases some web technology for estimation that we've been developing at the Quantified Uncertainty Research Institute. To do so, I'm presenting some estimates of the value that some consumer products would produce for someone with an earning power of around $100k. I'm doing this not because estimating the consumer surplus of products is maximally important, but because it is easily understandable. In particular, consumption under capitalism provides a self-contained, simple framework for making tradeoffs.

All text fields are editable, and their new values will be computed once you click the “Run model” buttons. You reader might want to edit these fields to capture what you value as you follow along.

The background for this is that in my extended social circle, people sometimes make lists of “things you should buy”. My friend Gavin has gathered a list of such lists here. So I’m going to go over a few of the items on those lists, and estimate their value. First, I’ll have to set some variables, and determine how much I value a few general classes of things relative to each other:

General variables

Bindings:
salary:
Distribution plot
MeanStdev5%10%25%50%75%90%95%
75K39K30K36K48K67K94K130K150K
value_doubling_productivity:
Distribution plot
MeanStdev5%10%25%50%75%90%95%
49K14K30K33K39K47K57K68K74K
hours_worked_in_year:
Distribution plot
MeanStdev5%10%25%50%75%90%95%
2500912400240025002500260027002700
hours_day_in_front_of_computer:
Distribution plot
MeanStdev5%10%25%50%75%90%95%
111.888.59.411121314
hourly_salary:
Distribution plot
MeanStdev5%10%25%50%75%90%95%
301512141926375059
value_additional_free_hour:
Distribution plot
MeanStdev5%10%25%50%75%90%95%
76393036486793130150

A nice computer

With the above variables in mind, here is how much I would value a nice computer, i.e., my current computer, or a not-too-new Macbook:

Nice computer

Result:
name:
"Nice computer (e.g., MacBook pro) (lifetime of item)"
cost:
Distribution plot
MeanStdev5%10%25%50%75%90%95%
18006301000110014001700220027003000
value:
Distribution plot
MeanStdev5%10%25%50%75%90%95%
17K13K43005500860014K22K33K43K
recommendation:
true

Some points of order about that model:

  1. The value term represents consumer surplus, in dollars. But one would generally be willing to pay less than the consumer surplus for any particular computer brand, because one could always switch to a competitor, and because there are other competing products that also make a bid on a finite budget. For an extreme example, if capitalism was selling galaxies full of happy people for a dollar, the value in terms of consumer surplus for those galaxies would be more than one dollar.
  2. The beta term has a lot of unnecessary decimal points. I am mildly averse to deleting decimal points. The origin of these decimal points is this tool to find a beta distribution which fits a 90% confidence interval. In the future, finding a beta that fits a given confidence interval will probably be incorporated into the core Squiggle syntax—the language that I'm using to run these estimations—but we haven't figured out how yet. See this issue for discussion.
  3. That model reuses the general variables we outlined at the beginning.

Nice headphones

Here is a similar model about nice headphones:

Nice headphones

Result:
id:
"2"
num_id:
2
name:
"Nice headphones (e.g., Bose 45) (lifespan of item)"
cost:
Distribution plot
MeanStdev5%10%25%50%75%90%95%
30030250260280300320340350
value:
Distribution plot
MeanStdev5%10%25%50%75%90%95%
33K32K6300850014K24K42K68K91K
recommendation:
true

It's kind of absurd how much headphones increase my level of happiness. I also thought it was interesting that someone with a $100k/year salary can't afford to pay $30/hour for a 3 point improvement in a 10 point scale, if that intervention is permanent.

Spare laptop charger

Here is a similar model about a spare laptop charger. A similar model would apply to an external battery for a phone.

Spare laptop charger

Result:
id:
"5"
num_id:
5
name:
"Spare laptop charger (lifetime of item)"
cost:
Distribution plot
MeanStdev5%10%25%50%75%90%95%
267.815172024303640
value:
Distribution plot
MeanStdev5%10%25%50%75%90%95%
35362.64.811234679110
recommendation:
true

Casio watch

Here is a model of the value of a casio watch. I'm modelling most of its value as coming from reducing the number of distractions that stem from looking at the time on one's phone.

Spare laptop charger

Result:
id:
"10"
num_id:
10
name:
"Watch (e.g., Casio F-91W)"
cost:
Distribution plot
MeanStdev5%10%25%50%75%90%95%
291115172127354450
value:
Distribution plot
MeanStdev5%10%25%50%75%90%95%
9701400150190300540110021003100
recommendation:
true

But you get the idea. I've also played around with models of the value of a sleep mask, taking melatonin, having an external battery for a phone, stocking zinc lozenges, having a vertical mouse, an external microphone, or a blog. You can see some of those models here.

Prioritization across consumption choices

Now, one thing we can do when given these estimates is to prioritize across them. That is, if you have a finite budget allocated to consumption and want to extract as much value from the above consumer products, what should you buy? I'm going to just paste some code and then make some comments about it:

Prioritizing across consumer interventions

Result:
value_best_option:
34K
items_names_best_option:
0:
"Nice headphones (e.g., Bose 45) (lifespan of item)"
1:
"Spare laptop charger (lifetime of item)"
2:
"Watch (e.g., Casio F-91W)"
3:
"random lotery"
cost_best_option:
354

What the above code is doing is to try all possible combinations of items, and then see if they are under our budget, and if they beat the previous best option. That code is a bit stilted: because Squiggle doesn't have great escape hatches into JavaScript, I'm having to do things like define an "append" function. Though more list functions should be added in thenext release of Squiggle.

We could also use a more conservative summary function for the purposes of our decisions. For instance, in the getValueOfOption function, instead of mean(i.value) we could use inv(i.value, 0.5), i.e., rather than getting the expected value of an option we could get its median. You can try that now if you want.

I've also chosen the budget to be 2.1k because that‘s close to an inflection point. Maybe try moving it a few hundred up and a few hundred down and see what changes.

Prioritization between consumption and other choices.

More broadly, consumption choices like the above are only a narrow slice of the set of choices that one has to make across one lifetime.

Some of the other choices one has to make are, for example, between:

  1. Using one‘s budget for personal consumption.
  2. Using one‘s budget for normal altruistic efforts, like donating to a local soup kitchen.
  3. Using one‘s budget for altruistic efforts which might be more effective, like donating to the Against Malaria Foundation.
  4. Using on‘s budget to build up one‘s savings, to preserve optionality.
  5. Reducing one‘s earnings, to spend more time with loved ones.
  6. Reducing one‘s earnings, to spend more time on projects one considers important, but one‘s boss doesn‘t.

I'm not going to prioritize between those here, but it's conceivable that I could do so in the future. And readers are welcome to do their own estimations. For that purposes, it might be useful to estimate that value of consumption as a distribution, rather than as a point estimate, as above. So to do so, I provide the following code, which estimates the value of consumption as a distribution by taking samples from the cost and value distributions for each item, and then prioritizing amongst them. Note that this code pretty un-optimized, and it might make your browser stop to a crawl.

Prioritizing across consumer interventions, with distributional output

Bindings:
caveat:
"Model takes around 20s, run with care."

What you've just read

What you've just read is one possible way to use Squiggle—the main recent QURI project—namely as reusable components inside a React app. Previously, the closest that there was was something like this Foretold notebook, which used public distributional forecasts from Foretold, an embryonic prediction platform, and maybe things like Metaculus journal entries. Later on, we had Observable notebooks, like this one estimating the impact of the Against Malaria Foundation.

Like the Observable page and unlike the Foretold or Metaculus notebooks, this page uses reusable React components, meaning that in principle anyone can replicate and use them in their own projects. In fact, you can fork this website here

Initially, I had high plans for this piece: I was planning on building up from consumption tradeoffs to other kinds of tradeoffs, to doing philanthropic prioritization with relative values, which is the current research agenda at QURI. Those plans are postponed to possible future pieces, but I hope this piece gave some hints about what better estimation technology on the web could look like.

If you liked this piece, you can follow the Quantified Uncertainty Research Institute onon our substack, or me personallyon my blog

.