1 シミュレーションと可視化(グラフにする)

前回は可視化まではできませんでしたので,推定式の可視化をしてみます。その際に,推定式が一つだとつまらないので,低層住宅と非低層住宅でわけて推定して可視化してみましょう。

1.1 サンプルの分割(サブサンプルの作成)

まず,高層の建物建てられる土地と低層の建物しか建てられない土地にデータをわけます。filter関数で容積率が200より大きい土地だけのオブジェクトkoujitika_highと容積率が200以下のオブジェクトkoujitikaunhouseを作成します。

#低層・高層分離
#koujitika_high <- filter(koujitika_merge,容積率>200)
#koujitika_low <- filter(koujitika_merge,容積率<=200)

1.2 サブサンプルごとの推定

 次に,各々のオブジェクトで地価関数を推定します。 

#地価関数の推定
#reg_low <- lm(ln_公示価格 ~ ln_山手線からの所要時間 + ln_最寄り駅までの距離 + ln_地積面積,data = koujitika_low)
#reg_high <- lm(ln_公示価格 ~ ln_山手線からの所要時間 + ln_最寄り駅までの距離 + ln_地積面積,data = koujitika_high)

1.3 関数化

 では,関数化を説明します。地価関数は下式(1)と考えます。ただし,これは様々な説明変数を取ることが考えられます。
\[ \begin{align} &地価=\alpha\\ &+\beta_1*山手線からの所要時間 \\ &+ \beta_2*最寄り駅までの距離 \\ &+ \beta_3*地積面積 ・・・(1) \end{align} \]

両対数を取ると,下式(2)のようになります。
\[ \begin{align} &ln(地価)=\alpha\\ &+\beta_1*ln(山手線からの所要時間) \\ &+ \beta_2*ln(最寄り駅までの距離) \\ &+ \beta_3*ln(地積面積) ・・・(2) \end{align} \]    次に,地価関数住宅を関数化します。ここで,山手線からの所要時間に興味があるとして,地価関数を山手線からの所要時間xの関数にします。すると,(2)の式は(3)式のようになります。
\[ \begin{align} &ln(地価)=\alpha+\beta_1*ln(x) + \beta_2*ln(山手線からの所要時間) + \beta_3*ln(地積面積) ・・・(3) \end{align} \]

 この後は,推定した係数,\(\alpha\)\(\beta_1\)\(\beta_2\)\(\beta_3\)と都心までの距離以外の説明変数を(3)式に代入すれば良いことが分かります。ここで使うのがcoefという関数です。coef(推定したオブジェクト名)[i]は推定結果のi番目の係数を示しています。では,この関係を下記の推定結果をもとに説明します。ここで,推定したオブジェクト名をreghとします。すると,第1項目の定数項の係数coef(regh)[1]は推定結果から2197119.706に,第2項目の変数の係数coef(regh)[2]は推定結果から-44855.679に,第3項目の変数の係数coef(regh)[3]は-229.450に,第4項目の変数の係数coef(regh)[4]は1368.498になります。

**modelsummaryの結果**

modelsummaryの結果

 ここで,(3)の式は(4)式のようになります。
\[ \begin{align} &ln(地価)=coef(regh)[1]\\ &+coef(regh)[2]*ln(x) \\ &+coef(regh)[3]*ln(最寄り駅までの距離) \\ &+coef(regh)[4]*ln(地積面積) ・・・(4) \end{align} \]

 次に,関心のある山手線からの所要時間以外は何を代入すれば良いのでしょうか。ここで,平均値を求める関数mean()を用います。すると,
\[ \begin{align} &ln(地価) =coef(regh)[1]\\ &+coef(regh)[2]*ln(x) \\ &+coef(regh)[3]*ln⁡(mean(koujitika$最寄り駅までの距離,na.rm = TRUE))\\ &+coef(regh)[4]*ln⁡(mean(koujitika$地積面積,na.rm = TRUE) ・・・(5) \end{align} \]

 この地価関数function(x)をpredhというオブジェクトに置くコマンドが下記になります。ここで,(5)式は対数を取っていますので,実数に戻すための逆関数である指数関数exp()を使います。逆関数とは関数のxとyが逆になった関数です。例えば,\(y=2×x\)という関数を考えると,逆関数は\(y=x/2\)になります。元の関数にx=2を入れると4になりますが,この4を逆関数のxに入れると2に戻ります。推定している地価関数で対数値を出しても,例えば100万円の土地は,対数で見ると\(ln(1000000)=13.82\)となりますが,これはどのくらいか直感的に分かりません。そこで,逆関数である指数関数を用いると,\(exp(13.82)=1,000,000\)となり直感で分かりますよね。ここでは、価格の単位を万円とするために、10000で割っています。

# 地価関数のシミュレーション
#pred_low <- 
  #function(都心までの時間)    
    #exp(coef(reg_low)[1]+coef(reg_low)[2]*log(山手線からの所要時間)
       #+coef(reg_low)[3]*mean(koujitika_low$ln_最寄り駅までの距離,na.rm=TRUE)
      #+coef(reg_low)[4]*mean(koujitika_low$ln_地積面積,na.rm=TRUE))/10000

#pred_high <- 
  #function(都心までの時間)    
    #exp(coef(reg_high)[1]+coef(reg_high)[2]*log(山手線からの所要時間)
        #+coef(reg_high)[3]*mean(koujitika_high$ln_最寄り駅までの距離,na.rm=TRUE)
        #+coef(reg_high)[4]*mean(koujitika_high$ln_地積面積,na.rm=TRUE))/10000

1.4 シミュレーション

 以上で関数化までできました。次に,シミュレーションと可視化(グラフ化)です。

# 可視化
#ggplot()+
  #geom_function(fun=pred_low,col="red")+  #preduhを図化する。colは色指定 colors()は関数
  #geom_function(fun=pred_high,col="blue")+
  #xlim(c(0,90))+ # 1分から90分までをグラフ化
  #labs(x="山手線からの所要時間", y="公示価格")+ 
  #ggtitle("市場地価と中心地からの時間距離の関係")+ #title はタイトル,ggtitleはタイトル指定
  #theme_bw()

 上記を実行すると右下のところに,図が表示されます。そして,グラフの上のメニュバーからExport→save image asとやると,いくつかの形式で名前を付けて保存ができます。これをみると,都心から数分のところで交わっており、都心では高層地よりも低層地のほうが1㎡あたりの土地の評価額(地価公示価格)は高く、郊外では高層地のほうが高いということが分かります。これは、低層地は閑静な住宅街であると解釈すると、都心に近い閑静な住宅街は限られており、需要も高いため価格が高いと解釈できます。具体的には、高級住宅街と呼ばれる松涛1・2丁目、恵比寿3丁目、広尾2・3丁目などは都心でありながら、容積率は200%未満となります。

**地価関数の可視化**

地価関数の可視化

 次に,分布を見てみましょう。可視化のついでに,ヒストグラムの描き方も学びましょう。

#ヒストグラム
#ggplot() +
  #geom_histogram(aes(x =koujitika_low$山手線からの所要時間), fill="red",alpha=0.5)+
  #geom_histogram(aes(x =koujitika_high$山手線からの所要時間),fill ="blue",alpha = 0.5)+
  #labs(x = "山手線からの所要時間", y = "サンプル数") +
  #theme_minimal()

 上記を実行すると右下のところに,図が表示されます。図から、都心では容積率が高い土地が多く、高層化されていることが分かります。郊外に向かっていくにつれて低層の土地が増えていき、住宅街が郊外に広がるという現実の都市構造と一致します。

**高層地と低層地のヒストグラム**

高層地と低層地のヒストグラム

作業 “山手線からの所要時間”ではなく,“最寄り駅までの距離”でシミュレーションして,市場地価と中心地からの時間距離の関係の図と、横軸を最寄り駅までの距離にしたヒストグラムを***rep 2_07に貼ってください。