How to estimate the total cost of healthcare and why metal levels are useless

[This article was first published on Cartesian Faith » R, and kindly contributed to R-bloggers]. (You can report issue about the content on this page here)
Want to share your content on R-bloggers? click here if you have a blog, or here if you don't.

This is part 2/3 in my series on healthcare costs. The analysis is driven by my own needs as an entrepreneur to find affordable healthcare. Part 1 explains why health exchanges are not well-functioning markets, part 2 addresses the issue of price transparency, and part 3 introduces a web app that estimates your annual healthcare costs.

The metal levels of Bronze, Silver, Gold, and Platinum (plus a fifth non-metal level, Catastrophic) were (presumably) introduced to help consumers compare different healthcare plans. The basic idea is that the metal level determines the balance between premium, copayment, and total out of pocket cost [1]. Behind the scenes, the metal level specifies the actuarial value of the plan, which is useful for insurance companies, but less so for buyers of insurance. The conventional wisdom is that if you go to the doctor a lot, then you should get a Gold or Platinum plan that has lower out-of-pocket costs, while you should get a Bronze or Silver plan if you don’t. This theory works well when employers paid most of the premium, but in the model where an individual pays the whole premium, the conventional wisdom doesn’t hold. Even worse, the metal levels tell you nothing about the expected annual cost of healthcare. Since metal levels also are not an indication of quality of service, they have no purpose other than to confuse people.

In the rest of this post, I detail a brief study I conducted on a subset of the health insurance plans available in New York via New York’s Official Health Plan Marketplace. I also provide some advice on estimating your annual healthcare costs, which lays the groundwork for a web app I’ll introduce in part 3. Note that none of the examples are endorsements for a given plan and are provided for educational purposes only.

Bounding Healthcare Costs

What exactly is the total cost of healthcare? I define this as being the net sum of premiums, doctor’s visits, medication, etc., up to the out-of-pocket limit. Note that none of the 66 health plans available on the exchange provide out-of-network coverage, so the below analysis assumes exclusively in-network care. This analysis is also based on a family with no children. For single individuals the cost will be lower, while for families the cost will be higher.

While each family’s total cost of healthcare will vary, there are some absolute lower and upper bounds to the cost that apply to everyone. The minimum anybody pays for healthcare will be their annualized premium (i.e. 12 * monthly premium). On the upper end, the maximum anybody will pay will be the annualized premium plus the out-of-pocket limit. Let’s see what this looks like across the various health plans (click to enlarge).

Annual cost of healthcare

This chart shows the annual premium for each plan plus the total out-of-pocket costs. The plans are then sorted by max total cost. On the face of it, the fact that a Platinum plan has the lowest total cost supports the conventional wisdom. Yet on the other end, the two most expensive plans are Gold! We also find that there are Bronze plans that have upper bounds that are less than Gold plans, despite the higher out-of-pocket limit.

The reason this is the case is that premiums matter. A lot. On average, the premium accounts for 46% of the total cost. The actual amount varies by plan, where Platinum plans are in the 70% range while Bronze are in the upper 30s. Couple this with the fact that the upper limit to the out-of-pocket limit is mandated by Federal law [2], you can imagine that the lower the premium, then the lower the overall cost.

And yet the 9 cheapest (in maximum annual cost) are Gold and Platinum plans, which have significantly higher premiums. How can this be? The reason has to do with probability. Keep in mind that the probability of paying at least the annual minimum is 1, but the probability of paying the annual maximum is significantly less than 1. So the likelihood of you paying the annual maximum is relatively low, unless you suffer from major illness or disease.

Modeling The Cost of Care

Now that we know the upper limit isn’t a good indicator of our expected annual healthcare cost, we need to look for something better. There are numerous ways to model this ranging in level of sophistication. I chose a simple analysis based on how I assumed others would think about healthcare: about how many times do I see the doctor and specialists? I’m assuming that for most people these are the primary contributors to healthcare costs. (A more thorough analysis would introduce additional factors.)

In this model it is easy to construct a cost surface based on the number of doctor visits and the number of specialist visits. The absolute minimum cost is again the annual premium. This is what it looks like for EmblemHealth’s Platinum plan, which has the lowest annual maximum cost.


To understand this graph, the surface represents the accrued cost of healthcare based on the number of doctor and specialist visits. If you don’t go to the doctor at all, then the cost is the minimum point on the graph, which is equal to the annualized premium. Notice how the cost flattens out once the out-of-pocket limit is reached. I discovered that it’s really only the Platinum plans that reach this limit. Obviously if you factor in hospital stays and non-trivial surgery, these limits would be hit very quickly. But then you wouldn’t need this analysis as you would just look at the annual maximum.

Now look at EmblemHealth’s Gold plan. With the same number of doctor visits, the out-of-pocket limit is not reached, yet the total cost is essentially the same. However, the premium for the Gold plan is $921.70 versus $1108.44 per month for the Platinum. Hence, with the Gold plan, you’ll likely save about $2000 per year unless something catastrophic happens. In this case, you’ll spend about $2000 more than if you had the Platinum plan.


Each provider and plan has a different surface, which is dependent on their cost structure, particularly whether there are co-pays in addition to coinsurance. Another factor is due to the number of possible paths of acquiring service. As the number of doctor and specialist visits increases, there are more possible scenarios. Consider a situation where you see the doctor once and s/he tells you to go see a specialist. You see that specialist 4 times and then follow up with your primary care physician. Now suppose you were already seeing a specialist, so you see the specialist 4 times, followed by a doctor’s visit. Then you have your annual physical. While each of these scenarios results in 4 specialist visits and 2 doctor visits, the amount applied to your deductible is different. Hence the boundary that defines when the deductible is met will be different for each run of the simulation. As an example, this is the Empire Blue Cross/Blue Shield Silver plan.


For comparison, here is one of Empire’s Gold plans, which has a flat rate for all primary care doctor visits, which doesn’t contribute to the deductible. The effect of this is that the surface is now deterministic (and smooth), meaning that the deductible is completely determined by the number of specialist visits. I return to this in the Methodology section below.


The lesson here is that based on strictly primary care and specialist visits, it is unlikely that the out-of-pocket limit will be met unless something catastrophic happens. For one final comparison, here is what a Bronze plan looks like. This is for Health Republic, a new non-profit co-op provider.


Again we see a tapering effect once the deductible is met. However the change is not as pronounced since the coinsurance is 40%. Ouch. But hold on — the minimum annual cost is significantly less, despite the faster growth rate. In fact you need to spend about $6000 versus the Gold plan above before you start feeling the pain. This means that if you’re relatively healthy and don’t take risks, you’ll likely be ahead of the game with a Bronze plan (which is consistent with conventional wisdom).

In short, when it comes to estimating costs for Silver, Gold, and Platinum plans, a good rule of thumb is to use the sum of the annualized premium plus the deductible as an estimate of maximum annual healthcare costs. Here is how the plans look when sorted by this metric. According to this view, Gold plans are cheapest, followed by Silver. This means that if you are price-sensitive and relatively healthy, the optimal choice is Silver.


This generalization doesn’t hold for Bronze plans because the coinsurance is too high to ignore. An additional caveat is that you have prescription medication or play sports that may take you to the hospital, then you need to look at those costs as a more significant factor.


Plan selection

I only included 39 out of 66 total plans in my analysis. Most of the plans I omitted were plans that included coverage for children or dental. I didn’t include these in order to make the comparison more equitable. I should mention that the MetroPlus plans include Dental and Vision, while the others do not. Here are two contingency tables that show the breakdown across levels as well as provider.

> table(plans$plan.level)

  Bronze     Gold Platinum   Silver
      12       11        3       13

The selection of Platinum plans is not representative primarily because I, personally, am not planning on buying a Platinum plan. If anyone would like to see a more comprehensive analysis, feel free to sponsor more research.

> table(plans$provider, plans$plan.level)

                               Bronze Gold Platinum Silver
  Affinity                          1    1        0      1
  EmblemHealth                      1    1        1      1
  Empire BlueCross/Blue Shield      3    1        1      2
  Fidelis                           1    1        0      2
  Health Republic                   1    2        0      3
  HealthFirst                       1    1        0      1
  MetroPlus                         1    1        0      1
  Oscar                             3    2        1      2
  UnitedHealthcare                  0    1        0      0

Cost of care

The cost of primary and specialist care varies widely. According to one article [3], the average doctor’s visit is $104, while another cites $158. Since I live in New York City, I used $150 for a primary care visit and $325 for specialist. This is codified in a lambda.r type.

Ledger(primary.cost=150, specialist.cost=325) %as% {
  list(cost=0, deductible=0, primary.visits=0, primary.cost=primary.cost,
    specialist.visits=0, specialist.cost=specialist.cost)

Data for each health insurance plan was sourced from NY’s online health exchange. Below is the implementation for determining the cost of each visit based on the previous visits.

add_visit('primary', ledger, plan) %as% {
  if (!$primary.cost) &&
        ledger$primary.visits <= plan$primary.limit) {
    cost <- plan$primary.cost
  } else if (ledger$deductible <= plan$ {
    cost <- ledger$primary.cost
    ledger$deductible <- ledger$deductible + cost
  } else {
    cost <- ledger$primary.cost * plan$coinsurance.pct
  ledger$cost <- c(ledger$cost, cost)
  ledger$primary.visits <- c(ledger$primary.visits, 1)
  ledger$specialist.visits <- c(ledger$specialist.visits, 0)

add_visit('specialist', ledger, plan) %as% {
  if (ledger$deductible <= plan$ {
    cost <- ledger$specialist.cost
    ledger$deductible <- ledger$deductible + cost
  } else {
    if ($coinsurance.pct))
      cost <- ledger$specialist.cost
      cost <- ledger$specialist.cost * plan$coinsurance.pct
  ledger$cost <- c(ledger$cost, cost)
  ledger$primary.visits <- c(ledger$primary.visits, 0)
  ledger$specialist.visits <- c(ledger$specialist.visits, 1)

Calculating the total cost is then simply a fold operation.

Sampling paths to create a surface

As mentioned above, as the number of visits increase, the number of ways to get to that particular combination of visits increases. The number of paths is defined by

p = \left\{ \begin{array}{ll}  m & \mbox{if } n = 0 \\  n & \mbox{if } m = 0 \\  mn + 1 & \mbox{otherwise}  \end{array}  \right.

where m is the number of doctor visits and n is the number of specialist visits. Hence the point with the most paths is when there are 20 doctor visits and 20 specialist visits, with a total of 101 possible paths. Theoretically this shouldn’t be an issue and the surface should be smooth. However, in my implementation (and probably in the real-world), the crossing of the deductible is not necessarily exact. Hence a portion of a payment that theoretically should be discounted may not be discounted. This is why the surface gets lumpy once the cost exceeds the deductible. While I didn’t verify it, presumably the maximum deviation then is going to be based on the highest cost, or c_{\mbox{specialist}} - 1 = 324.


As this post shows, it takes a fair amount of work to estimate healthcare costs. The main takeaway is that if you are healthy, a good way to estimate your annual maximum healthcare bill is to sum the annualized premium with the deductible. The cost savings over a few years will likely pay for any catastrophic healthcare, although this will be less valid the older you get. If you or your family require a lot of care, then you need to estimate the number of visits per year and whether you expect any hospital visits.

In part 3 of this series, I’ll unveil a web application that performs these calculations in the browser, so that it is easier to estimate your healthcare costs. If there is enough interest, I’ll add more factors into the model so that it is more precise.


[1] How do I choose Marketplace insurance? Visited 13 February, 2014.
[2] Out-of-pocket maximum/limit. Visited 13 February, 2014.
[3] Doctor Visit Costs. Visited 14 February, 2014.
[4] Guide to understanding health care costs. Fallon Health. Visited 14 February, 2014.

To leave a comment for the author, please follow the link and comment on their blog: Cartesian Faith » R. offers daily e-mail updates about R news and tutorials about learning R and many other topics. Click here if you're looking to post or find an R/data-science job.
Want to share your content on R-bloggers? click here if you have a blog, or here if you don't.

Never miss an update!
Subscribe to R-bloggers to receive
e-mails with the latest R posts.
(You will not see this message again.)

Click here to close (This popup will not appear again)