Intro

Column

Introduction

By many measures 2016 was the best year for housing in a decade. Back in May I shared some trends on housing markets and then in December I did a full year recap. This document is a flexdashboard version of my December 2016 year-in-review article.

The original article was made use the Tufte handout Rmarkdown template, which makes use of margin notes and annotations. This version is a flexdashboard. Flex dashboard are meant to be interactive, but outside of a data table there’s no interaction in this version.

Instead, I’m remixing my earlier article to try out the flexdashboard features. In future I’ll be using more htmlwidgets to add more interactivity.

I’ve been tracking trends in the housing and mortgage market throughout the year, sharing many different data visualizations. Let’s look back on this year’s best data visualizations and what they tell us about key trends.

Mortgage rates

Weekly rates in 2016. Rates fell for most of the year, particularly in late June after Brexit. But rates rose sharply following the U.S. general election.


30-year mortgage rates in 2016

Mortgage rates on 30-year fixed mortgages started the year at about 4% and fell for most of the year. But starting in the fall and accelerating after the U.S. election on November 8th rates began to rise. As of the last week of 2016, 30-year mortgage rates averaged 4.32 percent.

Falling mortgage rates for most of the year helped to support housing and mortgage rates. Lower mortgage rates reduce the cost of homeownership significantly by lowering the required monthly mortgage principal and interest rates. For example, a $200,000 30-year fixed rate loan at 3.5 percent interest give you nearly $890 in monthly mortgage payments. At 4.25 percent, monthly payments increase almost $100 to about $984.

Lower rates also help drive mortgage refinance activity. Homeowners can lower their monthly payments by refinancing an existing loans. Not only do refinances usually lower the rate on the loan, they also generally extend the term (e.g. refinancing a 3-year old 30-year fixed mortgage with 27 year remaining into a new 30-year loan.), which generally results in lower monthly payments.

Compare the mortgage rates by week of year

alt text

alt text


Comparing weekly mortgage rates by year

This chart compares weekly trends in mortgage rates across calendar years. The x axis is the week number of the year (1st week, 2nd week,…,52nd week). By comparing any vertical slice you can see how rates compare to previous years.

For most of 2016, rates were down on a year-over-year basis. The big spike in mortgage rates at the end of the year looks similar to the Taper Talk period in spring 2013 when rates rose sharply. Will housing markets respond like they did in 2013? We’ll have to wait and see in early 2017 as we get data reflecting trends after the post-election rate spike.

On a year-over-year basis rates have been down much more often than up in recent years


Rates have been trending down for over 30 years with only brief periods of increases.

This chart shows the year-over-year (52-week) change in mortgage rates over time. There is a rug plot on the bottom that shows periods of rate declines in green and rate increases in blue. Mortgage rates have been on the decline for over 30 years.

Other than a brief period at the start of 2015, rates have been declining since 2013-14.

Factors driving mortgage rates

Many factors drive interest rates, but some of the most significant factors include inflation trends and Federal Reserve policy decisions. If inflation, or even just inflation expectations pick up, long-term interest rates include mortgage rates will increase. Indeed, part of the reason long-term interest rates rose after the U.S. election was because of anticipated increased inflation.

Federal Reserve policy will influence the path of short term rates, as well as inflation and economic growth. There is not a strong short-term link between mortgage rates and federal reserve policy, but over time, short-term interest rate movements tend to drive longer-term interest rate movements.

Notes See this recent note from the Federal Reserve on the relation of inflation and perceptions of inflation: https://www.federalreserve.gov/econresdata/notes/feds-notes/2016/inflation-perceptions-and-inflation-expectations-20161205.html

See e.g. this recent article in the Wall Street Journal http://www.wsj.com/articles/bond-rout-deepens-after-fed-rate-signals-1481794245.

See my post http://lenkiefer.com/2016/05/19/mortgage-rates-and-the-fed-funds for some graphs comparing movements in mortgage rates, Treasury yields, and the Fed Funds rate.

Federal Reserve policy will also drive interest rates. What do the FOMC dots tell us?


Dot plots

In addition to the possibility of higher inflation next year, interest rates are moving higher in anticipation of movements in short term interest rates. We can see some of the reason for this by looking at the Fed’s dot plot.

The dot plot is a special chart that shows the distribution of expectations of the Federal Open Market Committee (FOMC) for the federal funds rate. Specifically it captures the views of each individual FOMC member for the following:

Each shaded circle indicates the value (rounded to the nearest 1/8 percentage point) of an individual participant’s judgment of the midpoint of the appropriate target range for the federal funds rate or the appropriate target level for the federal funds rate at the end of the specified calendar year or over the longer run.

Notes See my post http://lenkiefer.com/2016/06/22/Make-a-dotplot for more on the dotplot and how to make these plots.

The outlook for longer-term rates


Will rates rise in 2017?

Whether or not the Fed raises rates aggressively in 2017 or if inflation ticks up will have a lot to do with how high mortgage rates might go in 2017. At this point, uncertainty is high. But for most of 2016, rates remained extremely low. In fact, for the full year 2016, 30-year fixed mortgage rates had the lowest annual average since at least 1971.

Home sales

Home sales the best in a decade, compare the last 10 years month-by-month

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
  "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>MotionChartID164831f17040</title>
<meta http-equiv="content-type" content="text/html;charset=utf-8" />
<style type="text/css">
body {
  color: #444444;
  font-family: Arial,Helvetica,sans-serif;
  font-size: 75%;
  }
  a {
  color: #4D87C7;
  text-decoration: none;
}
</style>
</head>
<body>
 <!-- MotionChart generated in R 3.2.1 by googleVis 0.6.2 package -->
<!-- Sat Nov 11 08:15:05 2017 -->


<!-- jsHeader -->
<script type="text/javascript">
 
// jsData 
function gvisDataMotionChartID164831f17040 () {
var data = new google.visualization.DataTable();
var datajson =
[
 [
"Apples",
2008,
"West",
98,
78,
20,
"2008-12-31"
],
[
"Apples",
2009,
"West",
111,
79,
32,
"2009-12-31"
],
[
"Apples",
2010,
"West",
89,
76,
13,
"2010-12-31"
],
[
"Oranges",
2008,
"East",
96,
81,
15,
"2008-12-31"
],
[
"Bananas",
2008,
"East",
85,
76,
9,
"2008-12-31"
],
[
"Oranges",
2009,
"East",
93,
80,
13,
"2009-12-31"
],
[
"Bananas",
2009,
"East",
94,
78,
16,
"2009-12-31"
],
[
"Oranges",
2010,
"East",
98,
91,
7,
"2010-12-31"
],
[
"Bananas",
2010,
"East",
81,
71,
10,
"2010-12-31"
] 
];
data.addColumn('string','Fruit');
data.addColumn('number','Year');
data.addColumn('string','Location');
data.addColumn('number','Sales');
data.addColumn('number','Expenses');
data.addColumn('number','Profit');
data.addColumn('string','Date');
data.addRows(datajson);
return(data);
}
 
// jsDrawChart
function drawChartMotionChartID164831f17040() {
var data = gvisDataMotionChartID164831f17040();
var options = {};
options["width"] = 600;
options["height"] = 500;
options["state"] = "";


    var chart = new google.visualization.MotionChart(
    document.getElementById('MotionChartID164831f17040')
    );
    chart.draw(data,options);
    

}
  
 
// jsDisplayChart
(function() {
var pkgs = window.__gvisPackages = window.__gvisPackages || [];
var callbacks = window.__gvisCallbacks = window.__gvisCallbacks || [];
var chartid = "motionchart";
  
// Manually see if chartid is in pkgs (not all browsers support Array.indexOf)
var i, newPackage = true;
for (i = 0; newPackage && i < pkgs.length; i++) {
if (pkgs[i] === chartid)
newPackage = false;
}
if (newPackage)
  pkgs.push(chartid);
  
// Add the drawChart function to the global list of callbacks
callbacks.push(drawChartMotionChartID164831f17040);
})();
function displayChartMotionChartID164831f17040() {
  var pkgs = window.__gvisPackages = window.__gvisPackages || [];
  var callbacks = window.__gvisCallbacks = window.__gvisCallbacks || [];
  window.clearTimeout(window.__gvisLoad);
  // The timeout is set to 100 because otherwise the container div we are
  // targeting might not be part of the document yet
  window.__gvisLoad = setTimeout(function() {
  var pkgCount = pkgs.length;
  google.load("visualization", "1", { packages:pkgs, callback: function() {
  if (pkgCount != pkgs.length) {
  // Race condition where another setTimeout call snuck in after us; if
  // that call added a package, we must not shift its callback
  return;
}
while (callbacks.length > 0)
callbacks.shift()();
} });
}, 100);
}
 
// jsFooter
</script>
 
<!-- jsChart -->  
<script type="text/javascript" src="https://www.google.com/jsapi?callback=displayChartMotionChartID164831f17040"></script>
 
<!-- divChart -->
  
<div id="MotionChartID164831f17040" 
  style="width: 600; height: 500;">
</div>
 <div><span>Data: Fruits &#8226; Chart ID: <a href="Chart_MotionChartID164831f17040.html">MotionChartID164831f17040</a> &#8226; <a href="https://github.com/mages/googleVis">googleVis-0.6.2</a></span><br /> 
<!-- htmlFooter -->
<span> 
  R version 3.2.1 (2015-06-18) 
  &#8226; <a href="https://developers.google.com/terms/">Google Terms of Use</a> &#8226; <a href="https://google-developers.appspot.com/chart/interactive/docs/gallery/motionchart">Documentation and Data Policy</a>
</span></div>
</body>
</html>

Best in a decade

Low mortgage rates in 2016 helped home sales reach their highest level in a decade. Through the first 11 months of the year total home sales (the sum of new and existing homes sales) is the highest since 2006. Barring an epic collapse in home sales, December will push the annual total in home sales to the highest in a decade.

Housing starts well below historical averages


Housing starts and house prices

Housing supply has been slow to recover. We can see that in the aggregate data, where housing supply is very low relative to historic averages. The graph below shows deviations in monthly housing starts (at an annual rate) from 1.5 million. Historically housing starts have averaged about 1.5 million units, but that’s a fairly conservative estimate for “normal”. The U.S. population in 2016 is significantly higher than it was in the past. All else being equal, that implies we probably need more than 1.5 million units to meet long-run demand. I’ve estimated long-run demand to be closer to 1.7 million.

Housing construction belong long-run demand will keep upward pressure on house prices.

For some more commentary on housing supply, its relationship to population and house price trends see http://lenkiefer.com/2016/05/22/population-growth-housing-supply-and-house-prices. At the link you can see a pretty strong correlation between longer-run house price growth and the gap between population and housing supply growth. Areas where population growth has outstripped housing supply are areas where price growth tends to be stronger.