Price to Rent Ratio
Nov. 13, 2021
The price to rent ratio (RPR) is a well known litmus test for real estate deals. For example, if you could rent a $180,000 home for $1500/month, the P/R ratio is 120 months.

A popular P/R thumbrule is the 1% rule (Jason Hartman), which says a good ratio is RPR ≤ 100. However my mortgage calculator does not display RPR because good P/R ratios change over time and it would clutter the results.
The graph below shows the median P/R ratio has increased dramatically over the last 50 years, based on FRED data on median sales price of US homes and a unitless rent index.

Why does this thumbrule change? The hypothesis of the mortgage dividend model is that a target RPR is set by combination of fiat interest rate policy in parallel with a real-economy "resistance to becoming rundown" i.e. maintenance costs, taxes, etc. The graph above shows a test of the hypothesis with the model result (red) and a P/R index (blue) normalized to the model in December 2015.
Should I Buy or Rent?
The model provides a target of where market property prices are likely headed based on federal policy. With the real price ratio (blue) normalized to the model (red) in Dec. 2015, it looks like property prices in 2021 Q3 have quickly recovered and should probably peak soon relative to rents.
Is the model valid? You can read more about the model in the mortgage calculator series. The graph is based on the FRED datasets cited below, but I also relied on an anecdotal value of 180 months for the "run down resistance" Rreal based on my personal home expenses. You can test the MATLAB script yourself with my data scripting library econdata.m (its low quality, don't judge).
MATLAB Script
clear; clc; run('econdata.m'); % Functions for importing and manipulating data mort30us = import_fred_csv('Data\MORTGAGE30US.csv'); % percent apr mspus = import_fred_csv('Data\MSPUS.csv'); % dollars rent_index = import_fred_csv('Data\CUUR0000SEHA.csv'); % unitless recessions = import_fred_csv('Data\JHDUSRGDPBR.csv'); % 0 or 1 apr_range = months_range(mort30us, mort30us); apr = stretch_align_index(mort30us, apr_range); mpr = (1 + apr(2,:)./100).^(1/12); Rmort = (1-mpr.^(-360)) ./ (1 - 1./mpr); Rreal = 180; Rth(1,:) = apr(1,:); Rth(2,:) = (Rreal * Rmort)./(Rmort + Rreal); norm_year = 2015; norm_month = 12; pr_range = months_range(mspus, rent_index); Vmed = stretch_align_index(mspus, pr_range); Irent = stretch_align_index(rent_index, pr_range); ind1 = lookup(Rth(1,:), 12*norm_year + norm_month); ind2 = lookup(Vmed(1,:), 12*norm_year + norm_month); scale = Rth(2,ind1) / (Vmed(2,ind2)/(Irent(2,ind2))); pr_index(1,:) = pr_range(1) : pr_range(2); pr_index(2,:) = scale * Vmed(2,:)./Irent(2,:); plot(pr_index(1,:)/12, pr_index(2,:), "linewidth", 2, ';US Median Sales P/R Index;'); hold on; plot(Rth(1,:)/12, Rth(2,:), "linewidth", 2, ';Mortgage Dividend R(pr);'); plot(recessions(1,:)/12, 70*recessions(2,:)+40, "k:;US Recessions;"); hold off; titl = title("Median Sales Price to Rent Index, normalized at Dec. 2015, 97.3"); lege = legend("location","southeast"); ylab = ylabel("Months of Rent"); axis([1968, 2023,40,110]);
Data Citations
U.S. Census Bureau and U.S. Department of Housing and Urban Development, Median Sales Price of Houses Sold for the United States [MSPUS], retrieved from FRED, Federal Reserve Bank of St. Louis; https://fred.stlouisfed.org/series/MSPUS, July 31, 2021.
U.S. Bureau of Labor Statistics, Consumer Price Index for All Urban Consumers: Rent of Primary Residence in U.S. City Average [CUUR0000SEHA], retrieved from FRED, Federal Reserve Bank of St. Louis; https://fred.stlouisfed.org/series/CUUR0000SEHA, August 31, 2021.
Freddie Mac, 30-Year Fixed Rate Mortgage Average in the United States [MORTGAGE30US], retrieved from FRED, Federal Reserve Bank of St. Louis; https://fred.stlouisfed.org/series/MORTGAGE30US, July 31, 2021.
Hamilton, James, Dates of U.S. recessions as inferred by GDP-based recession indicator [JHDUSRGDPBR], retrieved from FRED, Federal Reserve Bank of St. Louis; https://fred.stlouisfed.org/series/JHDUSRGDPBR, July 31, 2021.