家は買ったほうがいいのか、借りたほうがいいのか。どちらが良いのかわからないので、一旦、記事にしてまとめてみました。ローンだったり、支払金額の総額につて触れている記事は、たくさん見かけるのですが、なかなか現在割引価値に直しているものが見当たらなかったので、自分で計算してみました。記事の構成としては、まず、どのように計算するのかという数式を記述してから、R言語によるシミュレーションをしていきたいと思います。

数式

借家する場合

合計コスト

\(R_m\)を月々の支払額とした場合、支払合計額は、月々の支払額\(\times\)何か月住むのか\((M)\)で表されます。

\[R_m \times M\]

現在価値

割引因子を\(\delta\)とすると、現在価値は以下のように表されます。

\[\sum_{i=1}^{n} {R_m}\times \delta^{n-1} \\ = R_m\frac{1-\delta^n}{1-\delta} \]

家を買う場合①

住宅を購入する場合、ほとんどの場合が、ローンを組むことになると思います。そこで調べたところ、おおまかにローンの種類は、2種類に分けられるらしいです。そのうちの一つが、元金均等返済というのもので、以下のように表されます。ざっくり説明すると、毎月同じ金額だけ元金の返済をし、残りの元金に対して利払いを行おうというものです。後述する元利均等返済に比べて、初期の支払いが多く、完済が近づくにつれ、月々の支払いが少なくなるという傾向があります。

\[ 月々の返済 \\ = ひと月当たりの住宅価値 + 残りのローンに対する金利支払い\\ =\frac{住宅価格}{ローンを返済する月数} + (住宅価格-月々の返済\times経過月数)\times月々の金利 \]

合計コスト

住宅ローンを\(P_H\)、毎月の利子率を\(r_m\)とした場合、支払合計額は、以下のように表されます。\(n\)という変数に対して、他の変数は定数だと考えられるので、比較的計算は簡単です。

\[ \sum_{i=1}^{n} \left\{ \frac{P_H}{M} + \left(P_H- \frac{P_H}{M} \right) \times r_m \right\} \hspace{1cm} ... (1) \\ = \left\{ \frac{P_H}{M}\times \left(P_H- \frac{P_H}{M} \right) \times r_m \right\} n \]

現在価値

\((1)\)より、

\[ \sum_{i=1}^{n} \left[ \left\{ \frac{P_H}{M} + \left(P_H- \frac{P_H}{M} \right) \times r_m \right\} \delta^{n-1} \right] \\ = \left\{ \frac{P_H}{M}\times + \left(P_H- \frac{P_H}{M} \right) \times r_m \right\} n \frac{1-\delta^n}{1-\delta} \]

家を買う場合②

元金均等返済の以外の方法でローンを組むと、元利均等返済というものになるらしいです。ざっくりいうと、元利均等返済は、リボ払いのようなもので、月々の支払いを一定にして、毎月の支払いを少なくする代わりに、元金均等返済よりも多く支払いをするというものになります。計算式はよく理解していないのですが、公式はネットに落ちていたので、それを基に計算していきます。

合計コスト

\[ 毎月返済額 = \frac{借入金額\times月利\times(1+月利)^{返済回数}}{(1+月利)^{返済回数}-1} \]

現在価値

元利均等返済は、毎月の返済額の計算は面倒ですが、毎月の返済額は一定であるため、現在価値の計算は簡単です。借家する場合とほとんど変わりません。毎月の支払い額を\(P_m\)としたとき、以下のように表されます。

\[\sum_{i=1}^{n} {P_m}\times \delta^{n-1} \\ = P_m\frac{1-\delta^n}{1-\delta} \]

R言語によるシミュレーション

シミュレーションに使った値は以下の通りです。

  • 40年間の住宅費について考える。つまり、40年$$12か月=480期についての分析をする。
  • 割引因子は、0.05%とする。
  • 月々の借家の支払いは、10万円とする。
  • 住宅を購入する場合、4000万円でローンで購入するものとする。
  • ローン完済時に、住宅は2000万円で売却できるものとする。
  • ローンの利子率は、年利0.03とする。

結果は以下のようになりました。興味がある方は、タブを開いてコードを見てください。

# library -----------------------------------------------------------------

library(tidyverse)

# define ------------------------------------------------------------------

# simulation value 
last_month <- 12*40 # living 40 years
t <- c(1:last_month) 
annual_d <- 0.05 # discount factor (annual)
monthly_d <- annual_d/12 # discount factor (monthly)
discount <- (1+monthly_d)^(t-1) # discount rate 

# rent
rent_p <- 10 # monthly rent price

# house
house_price <- 4000 # the price of house
house_selling  <- 2000 # the selling price of house
month_house <- house_price/last_month
interest_rate <- 0.03 # interest rate 
month_interest <- interest_rate/12


# data frame ---------------------------------------------------------------

df <- tibble(
  t = t,
  year = t%/%12 + 1,
  rent = rep(rent_p, last_month),
  house_1 = month_house + (house_price- t*month_house)*month_interest, # principal equal monthly payment (元金均等返済)
  house_2 = (house_price*month_interest*(1+month_interest)^last_month)/((1+month_interest)^last_month-1), # level payment (リボ払い)
  rent_ps = rent/discount, # present value for monthly rent payment
  house_1_ps = (month_house + (house_price- t*month_house)*month_interest)/discount, 
  house_2_ps =  (house_price*month_interest*(1+month_interest)^last_month)/((1+month_interest)^last_month-1)/discount, 
  rent_cum = cumsum(rent),
  house_1_cum = cumsum(house_1), 
  house_2_cum = cumsum(house_2)
)


# value -------------------------------------------------------------------


# sum 
df_sum <-
  df %>% 
  select(-t, -year, -ends_with("cum")) %>% 
  apply(2, sum) 

# print

# comparison of the cost
cat("\t\t\t\t", "cost", "\t\t", "total", "\nActual Value\n",
    "rent:\t\t", df_sum[1],"\t\t", df_sum[1], "\n",
    "house1:\t\t", df_sum[2], "\t\t", df_sum[2]-house_selling, "\n",
    "house2:\t\t", df_sum[3], "\t", df_sum[3]-house_selling, "\nPresent Value\n",
    "rentPV:\t\t", df_sum[4], "\t", df_sum[4], "\n",
    "house1 PV:\t", df_sum[5], "\t", df_sum[5]-house_selling/discount[last_month], "\n",
    "house2 PV:\t", df_sum[6], "\t", df_sum[6]-house_selling/discount[last_month]
    )
##               cost        total 
## Actual Value
##  rent:        4800        4800 
##  house1:      6395        4395 
##  house2:      6873.301    4873.301 
## Present Value
##  rentPV:      2082.484    2082.484 
##  house1 PV:   3099.823    2826.893 
##  house2 PV:   2981.987    2709.057

左のcostが、実際にかかるコスト、右のトータルは、コスト-住宅の売却価格で計算しています。

なかなか興味深い結果となりましたね。リボ払いは、やっぱり論外ですね(笑)現在割引価値で考えると、やはり、借家が圧倒的に安いですね。

以下が、月々の支払いを累積したものになります。

# graph -------------------------------------------------------------------

df_plot <- 
  df %>% 
  select(t, year, ends_with("cum")) %>% 
  pivot_longer(cols = c(-t, -year), names_to = "vars", values_to = "value") 

g1 <- 
  df_plot %>% 
  ggplot(aes(t, value, color = vars)) + 
  geom_point(alpha = .25) +
  scale_x_continuous("Month") +
  scale_y_continuous("0,000 Yen", labels = scales::comma) +
  expand_limits(x = c(0, last_month), y = c(0, max(df))) +
  theme_minimal()

library(plotly)
ggplotly(g1)

月々の支払いの変化は以下のようになります。

g2 <- 
  df %>% 
  select(t, rent, house_1, house_2) %>% 
  pivot_longer(cols = c(-t), names_to = "vars", values_to = "value") %>% 
  ggplot(aes(t, value, color = vars)) + 
  geom_point(alpha = .25) +
  scale_x_continuous("Month") +
  scale_y_continuous("0,000 Yen", labels = scales::comma) +
  theme_minimal()

ggplotly(g2)

結論

基本的な数列と現在割引価値を使うだけで、意外に面白いシミュレーションが作れました。やはり、時代は、借家なのかもしれません。ただ、前提条件である値を変えるだけで、結果が大きく変わってしまうので、簡単に借家がいいのだとは言い切れません。また、今回のシミュレーションでは、マンションなどを購入する際の共営費等などを考慮していません。その為、現実の分析とは大きく異なるかもしれません。結局のところ、借家かマイホームかという質問は、状況次第としか言えないのかもしれませんね。次回は、Shinyを使って、このシミュレーションを簡単なWebappにするのも面白そうですね。最後まで読んでいただきありがとうございます。