Recently, the cattle market has seen large increases in prices with bullish information dramatically impacting both supply and demand sides of the market. On the demand side, since 2019, demand for U.S. beef has been phenomenal. The percentage of income spent on beef relative to average consumer income keeps increasing despite inflation and recessionary pressures. The depreciation of the U.S. dollar has also made U.S. beef an extremely appealing product to the international economy. As such, other countries have been able to afford more of our goods at their relative exchange rate which in turn has increased our exports over time. Where a few years ago we were a net importer, in 2021 the U.S. became a net exporter of the worlds highest quality beef products. On the supply side, as a biproduct of high demand, the United States produced more beef than has ever been seen before. Aside from the demands impact, however, input prices have been reaching record highs with corn prices shooting up over $7 a bushel and energy prices continually climbing. This has resulted in a number of producers, especially cow-calf operations, liquidating their herds and getting rid of both their breeding cows and replacement heifers. On the whole this has led to us into a market where total cattle inventories are seeing decreases to levels of which we haven't seen since the 1980's. So on the whole, the cattle market is in rough shape right now and its going to take years before we see a correction.
We are members of an animal systems consulting firm who are concerned with tight future cattle supplies and how components of beef production will cause either upward or downward pressure on prices for fed cattle.
Our audience is a group of cattle producers who are currently worried about the volatile market. Recently supplies have been tight for cattle in the U.S. and winter has been rough. As such we are presenting these findings at Cattle Con in hopes that it may shed a light on the market for beef and so that they may plan accordingly given the information's impact on price (a.k.a. hedge their production accordingly).
So what are dressed weights?
Dressed weights in cattle, also called carcass weights, is the weight of the animal after limbs and major organs are removed from the body. This results in the bones, meat, and fat being the only remaining pieces of the animal.
Dressed weights are particularly important because of the role the play in supply. The part that dressed weights play is essentially as the incremental supply added with each animal slaughtered. So for instance, if we are seeing higher weights with higher slaughter numbers then we would have a more flush supply. The opposite can be said that if weights are low and so is slaughter, then supply is going to be very tight. We can also see the inverse occur where weights are high and slaughter low which can produce a more "nominal" supply.
When evaluating dressed weights, if we are experiencing times in which we are right now where cattle inventories are going down, we need to understand how dressed weights in the coming months may prove to be a beneficial or negative component to beef supply. If positive, meaning they would be higher, then we would witness a bullish pressure on price. If negative, however, and dressed weights are suppressed, supplies for beef will be tight and we'll see upwards pressure on the price of fed cattle.
Linear decomposition modesl works extremely well to explain the trends associated with dress cattle weights. There is a very clear upward trend from the 1980s to the present and that can be explained largely by the increased efficiencies that the cattle market has created and innovated over the past 40 years. This data includes comprehensive weights which means that it includes steers, heifers, bulls, cows and calves. It will be discussed later how having all of those different data points in the comprehensive weight data set can almost skew the view that we have of where the cattle market's supplies are currently at. As far as seasonality, there is a strong seasonal trend experienced with the dressed weights in cattle. Cattle experience cold stress in the winter months which is observed directly through the lighter weights that occur in the winter months. On years where the winter is especially harsh, these weights decrease even more, which is what is happening right now in Colorado. If you have a variable random, in some instances the trend and seasonal components are limited in the way that they can explain what is happening in the data set. In our case, there is some consistency in the random trend line which as mentioned can somewhat be explained by the weather events that occurred during the observed areas. There will be a more dramatic impact with that residual data that does not fit within the seasonal or trend data.
As mentioned, this uses the comprehensive dressed weights which includes steers, heifers, cows, bulls, and calves. The actual trendline is trending up however the forecast does show a lower comprehensive dressed weight prediction for the near future. Across the country, this has been a very harsh winter which, as established earlier, means that there will be a lower comprehensive average dressed weights. Additionally, if we look back to our prior chart of the decomposed elements, on occasion the market plateaus; we see this in our above forecast. The most logical explanation is the time it takes for newer and changing technologies to be adopted and/or rolled out commercially such as genetic changes in both cattle and feed inputs which can increase feed and growth efficiencies.
According to this chart, we should anticipate to put in a low weight of 806.8 pounds in May and the seasonal high for the coming year at 838.5 in October.
Seasonality has been a topic discussed throughout this presentation and this graph does an excellent job at visualizing those trends in a easy to read format. Weights are at their lowest in the summer, peak in the fall, then begin declining again in the winter. The red line above shows where the dressed weight averages lies in 2023. As you can see, it is much lower than it has been in the past 3 years. The only observed data point for 2023 is January and the rest of the 2023 line is the forecasted data. Even in the fall where dressed weights typically peak, the forecast shows that 2023 could have the lowest observed dressed weights out of all the recent years. This is important to note because as dressed weights decrease that means that supply decreases which in turn increases prices. If the forecast holds true, beef prices could increase substantially as we close out 2023.
There has been much discussion over the comprehensive dressed weights and how it includes steers, heifers, bulls, cows, and calves but in order to fully understand the implications of the seasonality concerned with dressed weights, the state of steer and heifer slaughter and profitability must also be discussed. Up until 2015 the Steer and Heifer-Corn Ratio was a very good indicator of cattle prices and ultimately supply. The Steer and Heifer corn ratio is how many bushels of corn it takes to equal the value of one-hundred weight of fed steers and heifers. So, if corn prices are low, there will theoretically be more cattle on feed for longer because it wouldn't cost the producer as much to feed cattle for longer. If you feed cattle for longer they will also, theoretically, have a higher quality grade and be more valuable to the producer and result in higher profitability. When this ratio is good, cattle producers would typically keep their cows around as opposed to selling them for slaughter because they can make more money by sending cow's calves to feedlots or feeding them out as opposed to selling the cows for slaughter. The graph above explains that when the corn ratio is higher there is lower cow slaughter and when the corn ratio is lower there is higher cow slaughter. The graph also shows the outlier in 2015 where the cattle market went haywire and some of the highest prices were ever observed. Currently, we are seeing a very low corn ratio and very high cow slaughter because both the corn and cattle prices are very high, the margin between the two is very low which suggests very low profitability for putting cattle on feed. So, given the limited profitability cow calf producers are being incentivized to cull cows and sell them for slaughter. While corn isn't the primary feed input for cow-calf operations, corn being a good indication of general feed price, still suggests that feed inputs are high for every segment of the market. When cow slaughter number are high, it drags the comprehensive dressed weights down which is a very key takeaway for this graph.
To take account of the fact that cow slaughter is currently sitting at an all time high relative to our scatterplot, as a biproduct of a low feed ratio, we need to take cows, calves, and bulls out of the picture. In a generalistic view, the primary beef supply is upheld by steers and heifers who are placed on feed in a feedlot. They are fed a ratio over a given duration of time and eventually marketed for slaughter. Due to the specialized ration they are fed, their weights tend to be much higher than a cows. As was mentioned earlier, we are seeing record low decreases in the amount of cows and replacement heifers being up into feedlots or for slaughter. This signifies that more heifers will getting marketed in the coming months and we can also anticipate that cow slaughter will cool off. We can make this assumption for two main reasons; one, we can only cull so much of our breeding stock and two, corn futures have been declining over the past couple of weeks while cattle prices are still witnessing upward pressure.
So to relate back to our scatterplot. If we are witnessing high cattle prices with lower corn prices, this means a higher feed ratio. Thus, our cow slaughter should more left on our trendline and backoff.
The above forecast is revised to only account for steer and hiefer weights given we are expecting our slaughter composition to change. We believe that steer and heifer weights are going to be of greater concern because our dependence on them for supply is increasing. As we can tell, there is a much more volatile drop anticipated off of this forecast. Weights are looking to drop off by an extra 4%, which will have huge implications on supply.
The key takeaway from the graph above breaks down the comprehensive dressed weights that have been discussed and only looks at steer and heifer dressed weights. Steers and heifers are the main contributor to the primary beef supply and when calves and cows are added into the comprehensive dressed weights, it drags the average down because their average dressed weight is lower than that of steers and heifers. Realistically, there are not enough bulls slaughtered in the country to have an impact on dressed weights given that their average dressed weight would be the highest. In comparison to the other seasonal line graph that shows the comprehensive dressed weights there are a few key takeaways from this graph that must be noted. First, the low for steer and heifer dressed weights occur in May and the low for comprehensive dressed weights occur more consistently in June. Second, the high for steer and heifer dressed weights occur in November whereas the high for comprehensive dressed weights more consistently occurs in October. Steers and heifers have the biggest impact on the comprehensive dressed weights but there are also some production factors at play that could help explain the difference in the highs and lows. For one, the spring is typically when calves have finished calving and theoretically would have a calf by their side that they would have to nurse for the next couple of months. Also, cows that calve in the spring would be bred around May-August. When it comes time to wean those calves if they have not been bred back, typically a producer would ship cows around that October/November time frame which plays a factor into the comprehensive dressed weights as discussed throughout.
In this report our finds are simple, we expect that with the bullish and negative information on cattle supplies, that the decrease in weights for the year are going to have substantial impacts on beef supply within the U.S. Now while normally, when building a balance sheet, one would take into consideration a number of other factors such as imports, exports, and consumption, the production piece of information for the U.S. beef market is huge. An example of why this matters is because if production falls, then the U.S. is going to have to do something in order to augment demand (i.e. import beef), if production is strong, however, then we have more beef to export into the international economy which will stimulate our agricultural industry.
If producers and speculators in the beef market aren't sure whether or not they should be concerned with the current fundamental picture, then they should be. If producers are looking to place hedges for later in the year, our recommendation is to go long. Inventories are tight, weights are cooling off, and input prices are highly variable. While bearish pressure will remain in some instances, due to trade and other production pieces, nothing is going to change the number of cattle we're able to slaughter and at what weights we're able to collect on. So, take a long position and keep an eye on corn prices.
#Reading in the CSV file so that R is able to pull information from the data set.
R_Average_dressed_weights <- read_csv("R Average dressed weights.csv")
View(R_Average_dressed_weights) #We view the data in order to ensure we are pulling the data we desire.
#In order for R to properly read which data set is which, we clean the column names so that the software can quickly point to where I am asking it to.
dressed_weights_clean <- clean_names(R_Average_dressed_weights)
#Comprehensive cattle dressed weights.
#Here we are taking the dressed weights data frame and having it converted into a usable time series.
cattle_dressed_ts <- dressed_weights_clean %>%
select(date,cattle) %>% # specifying that we select only the date and weight variables
mutate(date=yearmonth(date)) %>% #convert the date into year/month format so the model can understand the units of observation.
as_tsibble() #we then again convert the data to a tsibble object which is a time series specific classification for tibble.
#In order to fit the model we utilize the "model" function with the ETS specification to has an exponentially smoothed model.
#Additionally, we specify that we want the trend, seasonal, and error components of the decomposition to be additive ("A").
fit_one <- cattle_dressed_ts %>%
model(my_ets=ETS(cattle ~ trend(method="A") + season(method="A") + error(method="A")))
#Forecast the model using the forecast function from the fabletools library.
cattle_dressed_forecast <- fit_one %>%
fabletools::forecast(h="5 years") #Forecast model for 5 years.
#Plot the forecast from the above code.
autoplot(cattle_dressed_forecast,cattle_dressed_ts) #By adding in cattle_dressed_ts we can tell the model to include the observed data in the plot.
#Extract a prediction interval from the forecast using the hilo function our of the fable library.
#This builds two columns, one for the upper band and one for the lower.
cattle_dressed_forecast_out <- cattle_dressed_forecast %>%
hilo(level = 95) %>% #Extract a 95% prediction interval.
mutate(
lower = `95%`$lower,
upper = `95%`$upper)
#Lastly we prepare data for export into a csv file by removing the cattle weight distribution and renaming it to account for the forecast mean R calculated.
part2_one <- cattle_dressed_forecast_out %>%
select(date,cattle=.mean,`lower`,`upper`)
#Bind the rows of our original time series data frame and the extracted forecast with confidence intervals to create one larger data frame.
to_export_one <- bind_rows(cattle_dressed_ts,part2_one)
#Export the data into a csv file.
write_csv(to_export_one,"dressed_forecast.csv")
#Weighted average weights for steers and heifers.
#Here we are taking the dressed weights data frame and having it converted into a usable time series.
weighted_dressed_ts <- dressed_weights_clean %>%
select(date,weighted) %>% # specifying that we select only the date and weight variables
mutate(date=yearmonth(date)) %>% #convert the date into year/month format so the model can understand the units of observation.
as_tsibble() #we then again convert the data to a tsibble object which is a time series specific classification for tibble.
#In order to fit the model we utilize the "model" function with the ETS specification to has an exponentially smoothed model.
#Additionally, we specify that we want the trend, seasonal, and error components of the decomposition to be additive ("A").
fit_two <- weighted_dressed_ts %>%
model(my_ets=ETS(weighted ~ trend(method="A") + season(method="A") + error(method="A")))
#Forecast the model using the forecast function from the fabletools library.
weighted_dressed_forecast <- fit_two %>%
fabletools::forecast(h="5 years") #forecast model for 5 years
#Plot the forecast from the above code.
autoplot(weighted_dressed_forecast,weighted_dressed_ts) #forecast model for 5 years
#Extract a prediction interval from the forecast using the hilo function our of the fable library.
#This builds two columns, one for the upper band and one for the lower.
weighted_dressed_forecast_out <- weighted_dressed_forecast %>%
hilo(level = 95) %>% #Extract a 95% prediction interval.
mutate(
lower = `95%`$lower,
upper = `95%`$upper)
#Lastly we prepare data for export into a csv file by removing the cattle weight distribution and renaming it to account for the forecast mean R calculated.
part2_two <- weighted_dressed_forecast_out %>%
select(date,weighted=.mean,`lower`,`upper`)
#Bind the rows of our original time series data frame and the extracted forecast with confidence intervals to create one larger data frame.
to_export_two <- bind_rows(weighted_dressed_ts,part2_two)
#Export the data into a csv file.
write_csv(to_export_two,"dressed_forecast.csv")
#Decomposition components for dressed weights.
#Extract the trend, seasonal, and residual components of the comprehensive dressed data.
stl_cattle <- cattle_dressed_ts %>%
stl(t.window=12, s.window="periodic", robust=TRUE) %>%
autoplot()
#Put the decomposition into a visual.
plot(stl_cattle)