Miles Per Gallon

The Cost of Efficiently

mpgToCost.knit

Purchasing vehicle represent a large single cost. Generally people put quite a bit of thought into balance the wants and needs against the purchase price. Yet, the cost of a vehicle is not static. It grows over time through general maintenance, repairs, and fuel consumption. While 50 dollars at the gas pump pails in comparison with a the tens of thousands of dollar at the initial purchase, the mile per gallon your vehicle gets strongly effect the long term cost of the purchase. In this post we will evaluate the break even cost of a three different engine types in a full sized van model to learn how far we will have drive the vehicle before efficiency start to pay back dividends.

Weighting the Options

The 2021 Chevy Express full size van comes with three engine options which have different purchase prices and mile per gallon ratings.

Model Purchase Price MPG
V8 Gas 37965 15
V6 Gas 35195 17
V4 Diesel 40265 30

There are more difference between the engines then just gas milage but for simplicity sake we’re going to assume all will work equal well for our intended uses.

Defining Parameters

In order to determine the long term vehicle cost as product of mile travel we need to know

  • initial vehicle cost
  • miles per gallon
  • cost per gallon of fuel

I grabbed the fuel cost from this website. These are updated regularly and it probably be better to use an average value measured over multiple years as fuel prices are highly variable. I liked this source because of the state specific averages.

Model Purchase Price MPG Cost Per Gallon
V8 Gas 37965 15 3.696
V6 Gas 35195 17 3.696
V4 Diesel 40265 30 3.411

All the variables in the table here are static and our cost calculation will vary as a product of miles travel.

Calculate Cost as a Product of Miles Traveled

We can start off by just understanding our calculation with all static variables. We will assume 100,000 miles as the marker because that is a common point at which individual sell there vehicles.

# V8 Gas
initialPrice <- 37965
mpg <- 15
fuelPrice <- 3.696
# will use 100,000 for the total miles
distance <- 100000

# put it all together
finalCost <- initialPrice + (distance/mpg)*fuelPrice

This returns a value of $62,605. To say it another way this means you paid 60% of your initial price drive driving your van 100,000 miles.

We could replicate this for each van by reassigning varibles but there are some better means of doing this using functions.

Write a function.

Whenever you find yourself repeating a segement of code it’s worth questioning if you should wrap it into a function instead. We want to in this case because I was to test three Van across multiple mileage ranges.

# write a function
calCost <- function(initialPrice, distance, mpg, fuelPrice){
  cost <- initialPrice + (distance/mpg)*fuelPrice
  cost <- round(cost, digits = 0)
  return(cost)
}

Having the function in hand gives up more flexability in the types of questions we ask.

Calculate Price Over a Range of Distances

If you don’t know exactly when you will sell you Van you might want to investigate a variety of milages. We can do this by apply our function over a vector of features. We will use 15,000 miles because that is about the average miles traveled per year by US drivers. Therefore each step can be seen as a year of vehicle usage.

# mileage range
mileRange <- seq(from = 15000, to = 210000, by = 15000)
# apply' function across
costs <- lapply(mileRange, calCost, initialPrice = initialPrice, mpg = mpg, fuelPrice = fuelPrice)
### because our function has multiple parameters we need to specific inputs within lapply. In this case we left the required input of 'distance' blank so lapply filled in that value with the values from the list.

This returns a list of cost that looks like this

print(costs)
## [[1]]
## [1] 41661
##
## [[2]]
## [1] 45357
##
## [[3]]
## [1] 49053
##
## [[4]]
## [1] 52749
##
## [[5]]
## [1] 56445
##
## [[6]]
## [1] 60141
##
## [[7]]
## [1] 63837
##
## [[8]]
## [1] 67533
##
## [[9]]
## [1] 71229
##
## [[10]]
## [1] 74925
##
## [[11]]
## [1] 78621
##
## [[12]]
## [1] 82317
##
## [[13]]
## [1] 86013
##
## [[14]]
## [1] 89709

This is ok, but kind of clunky to interpret. Plus we want to understand close relative for each engine type. It would be best to save all these outputs into a table with that contains the information about each van.

Make the Analysis Output Usable

Let’s start by revamping how were are storing our data about each vechile. We will define all parameters as vectors.

engineType <- c("V6 gas", "V8 gas", "V4 diesel")
baseCostDollars<- c(35195, 37965,40265)
costPerGallonOfFuel <- c(3.696, 3.696, 3.411)
mpg <- c(17,15,30)
mileRange <- seq(from = 15000, to = 210000, by = 15000)

We can use this information to develop a table that will hold all our data of interest.

df <- data.frame(matrix(nrow = length(engineType), ncol = 4 + length(mileRange)))
colnames(df) <- c("Model", "Purchase Price","MPG", "Cost Per Gallon", paste0(as.character(mileRange), " miles"))

With the table created we can assessing known values

df$Model <- engineType
df$`Purchase Price` <- baseCostDollars
df$MPG <- mpg
df$`Cost Per Gallon` <- costPerGallonOfFuel

We will use a for loop and indexing to calculate these values and assign them accordingly.

for(i in seq_along(engineType)){
  # for each unique vechile
  for(j in seq_along(mileRange)){
    # for each step in the miles range
    df[i, j+4]<- calCost(initialPrice = baseCostDollars[i], distance = mileRange[j], mpg = mpg[i], fuelPrice = costPerGallonOfFuel[i])
  }
}
df
##       Model Purchase Price MPG Cost Per Gallon 15000 miles 30000 miles
## 1    V6 gas          35195  17           3.696       38456       41717
## 2    V8 gas          37965  15           3.696       41661       45357
## 3 V4 diesel          40265  30           3.411       41970       43676
##   45000 miles 60000 miles 75000 miles 90000 miles 105000 miles 120000 miles
## 1       44979       48240       51501       54762        58023        61284
## 2       49053       52749       56445       60141        63837        67533
## 3       45382       47087       48792       50498        52204        53909
##   135000 miles 150000 miles 165000 miles 180000 miles 195000 miles 210000 miles
## 1        64546        67807        71068        74329        77590        80851
## 2        71229        74925        78621        82317        86013        89709
## 3        55614        57320        59026        60731        62436        64142

Some suprizing results comes from this analysis. Namely the more efficent diesel engine becomes more cost effective after two years of ownership comparied to the V8 and four years compaired to the V6 engine.

What’s the take away here. Fuel is expensive so take mile per gallon into consideration when making a purchase.

You might also enjoy