1 データセットの作成

  • 前回までは、Excelを用いて地価関数を推定しましたが、Excelではdata数の制約や各種検定ができないので、経済データ分析Ⅱでは地価関数をRで推定します。
  • 公示地価の読み込み
    • 前回まででダウンロードしたExcelファイルは東京都が独自に編集したものです。
    • 一般的には国土交通省の不動産情報ライブラリ(アクセス日:2024-04-30)から、「地価の情報をご覧になりたい方へ」→「データのダウンロード」→「鑑定評価書情報(CSVファイル)をダウンロード」から地域と価格時点を選んでCSVファイルでdownloadします。
    • このファイルは公示地価データすべてが掲載されていますので、AXG列までデータが入っています。
    • 以下は,やや高度な方法なので困難な人は1.3節に飛んでください。
      • やや高度な分析(例えば公園やゴミ処理施設の外部性を測るといった分析)を行う際は、個々の地点の緯度経度が添付されている国土数値情報(アクセス日:2024-04-30)データを使うことをお薦めします。
      • このサイトで開示されているデータは、シェープファイル形式になっており、データ属性に地理空間情報が付されているのが特徴です。
      • これにより、GISソフトを使わずにRをもちいて地図上にデータを可視することが容易になります。
        • シェープファイルは地物・属性情報を含む複数のファイルから構成されます。拡張子は.shp,.shx,.dbfなどになります。
        • 読み込む際は.shpを使いますが、ファイルから他の拡張子(.shx,.dbfなど)をもつファイルを削除すると、図形・属性情報を表現できなくなります。削除しないようにしましょう。
      • ダウンロードは、「国土数値情報」→「地価公示」→「東京」→「ダウンロード」とすると、「L01-23_13_GML.zip」というフォルダーが作成され、その中に7種類のファイルが入っています。
      • 2の操作でデータとして分析が可能になります。利用するファイルは作業用フォルダーに入れたほうが楽になります。

1.1 データファイルの読み込み(Excel)

  • Rで読み込んでみましょう。読み込みコマンドは前々回と同様です。
    • なお、前回はstationデータをExcelファイル内でマージしましたが、ここではRのコマンドでマージします。
  • 編集していない11_R7kouji_chiten_data_excelを用いてください。
    • 上記の地価公示を用いる場合は、csvデータなのでコマンドが変わってきます。
#install.packages("readxl") これはすでにインストールされています。
#library(readxl)
#koujitika <- read_excel("11_R7kouji_chiten_data_excel.xls", sheet = "地点一覧",skip = 1)
  • 作業フォルダーを指定していないケースでは、ファイルの場所のパスを完全に書く必要があります。 R6kouji_chiten_data.xlsの前に、“c:/ファイルの保存先/”を追記指定ください。
  • 元のデータファイルで1行目は表題であり、読み込むとデータ処理に問題が出るので、1行飛ばして読み込みました。それがskip = 1です。
  • 左辺はオブジェクト(koujitika)としてRに取り入れたことを意味します。
  • これでデータ構造を調べるコマンドを使って、構造を調べてみてください。
Rスクリプトのコマンドの注意点

1. Rコマンドの区切りは改行です。改行すれば、1つのコマンドが終了したと認識されます。実行する際はその行をアクティブ化してrunをクリックします。1行に複数のコマンドを書きたいときは ; で区切ります。

2. # はコメントの開始として扱われ、行頭に#を書くとその行すべてがコメントとして扱われます。行の途中に# を書くと、# 以降がコメントとして扱われます。何をやっているコマンドか書いておくには重要です。

3. インストール済みのパッケージを利用するときは、library(“パッケージ名”) とします

1.2 データファイルの読み込み(シェープファイル)

  • シェープファイルを読み込んで①Excelやcsvファイルに変換する方法とそのまま②Rデータ(R Workspace)にして分析に入る方法があります。
  • なれればデータの構造や傾向をRで図示したり統計量を検討して理解できるようになりますが、いまのところはExcelで読み込みましょう。
# 必要なパッケージのインストール (初回のみ)
#install.packages("sf")
#install.packages("writexl")
#library(sf)
#library(writexl)
#   シェープファイルからのデータ読み込み。このままRデータとして使うことも可能です。
#koujitika2<- read_sf("L01-23_13_GML/L01-23_13.shp", options="ENCODING=CP932")
# csvで保存:write.csv("保存するデータ名", "保存場所")
#write.csv(koujitika2, "koujitika2.csv")
# excelで保存:write_xlsx("保存するデータ名", "保存場所")
#write_xlsx(koujitika2, "landprice.xlsx")
  • 保存場所については、ファイル名のみであれば現在の作業フォルダになります。もし、別な場所に保存したければ正確なパスを書いて下さい。
  • シェープファイルでの読み込みでは変数名を変える必要がありますが,経度緯度が入っているので,様々なデータとマージすることができます。

1.3 変数名の変換

  • 元データの変数名に問題があったり,わかりにくい場合は,使いやすい変数名に変える必要があります。
    • まず,変数名に()があると数式として扱われる場合があります。当年価格(円)がそれにあたります。
    • また,主要交通施設も何を意味しているわかりませんので最寄り駅に変えましょう。
    • 下記のように”,”で連結すると複数の変数名を変更できます。
#必要なパッケージのインストール
# install.packages("dplyr") 
#library(dplyr) 
#koujitika <- rename(koujitika, "当年価格" ="当年価格(円)","地積面積" ="地積(㎡)", "最寄り駅" ="主要交通施設","最寄り駅までの距離" ="交通施設までの道路距離(m)")

1.4 データのマージ

  • 次に,このデータオブジェクトkoujitikaに駅情報(路線名や、運賃等が駅データに入っています)のデータを加えます。このように,他のファイルのデータを結合することをマージ(merge)といいます。これもRエディタに記述して、実行してください。
# 駅データ.xlsxをstationdataをデータセットとして読み込む
#stationdata <- read_excel("駅データ.xlsx", sheet = "距離・時間")
#   データをマージします。
#koujitika_merge<- merge(koujitika, stationdata, by="最寄り駅", all=T)
  • これは、データオブジェクトkoujitikaにデータオブジェクトファイルstationdataを変数最寄り駅でマージさせるコマンドです。

  • データオブジェクトkoujitika_mergeの構造を出力させてみましょう。路線,便数,が追加されていることを確認してください。

  • データのマージとは複数のデータ(プログラムをマージするときもあります)を統合することです。

  • イメージとしては,図2- 1のようになります。元の公示地価データ(koujitika)と駅データ(stationdata)をマージさせますが、公示地価データの最寄り駅を基軸に、駅データの当該駅の他の変数(路線,都心,運賃,・・・)を追加していきます。その際に公示地価データの最寄り駅が駅データにない場合はNAとなります。

**図2-1 データのマージ**

図2-1 データのマージ

1.5 ダミー変数の作成と検討対象路線抽出

  • 各自の検討対象路線を抽出するために,先にダミー変数を作成します。
    • 検討対象の3路線(JR中央線、西武池袋線、東武東上線) で作成してください。
    • 複数の条件でダミー変数を作るときは|を入れる
  • データの抽出
    • 検討対象路線以外のデータは削除した方が、基礎統計量の出力等が楽になりますので検討対象のみを抽出します。
    • filter関数で対象路線のみ抽出します。。
    • なお、|は複数の条件を意味しています。
#koujitika_merge <- filter(koujitika_merge, d_JR中央線==1 | 
                            #d_西武池袋線==1 | d_東武東上線==1 )

2 重回帰分析

では、簡単に重回帰分析をやりましょう。下記のように、基礎統計も出力してみましょう。

  • 第2回講義で説明したように、以下のようなコマンドで重回帰分析を行います。
    • これは、被説明変数を当年価格として、dataオブジェクト名koujitika内の都心までの時間最寄り駅までの距離地積面積の3つを用いてreg1(自由にオブジェクト名を付けてください)という名のオブジェクトとして重回帰分析を行うよう命令したコマンドです。変数名以外は半角で。 - summaryは,オブジェクトreg1を出力させる命令です。
#reg1 <- lm(当年価格 ~ 都心までの時間 +  最寄り駅までの距離 + 地積面積,data = koujitika_merge)
#summary(reg1)
  • 提出課題は最低でも5つの説明変数を用いてください。

  • データの一部で推定したいときは下記のようにsubsetを作って推定します。

    • 下記は価格が20000円以上のサブサンプルで推定するときのコマンドです。
#result <- lm(当年価格 ~ 都心までの時間 +  最寄り駅までの距離 + 地積面積,subset=(当年価格>=20000),data = koujitika_merge)

2.1 回帰分析の表をまとめる(modelsummary)

  • Rを用いて推定結果をsummary関数を使って表示すると情報量が多すぎます(前節出力参照)。読者にやさしく整理しなおします。

  • modelsummaryパッケージを用いて、回帰分析の結果をまとめた表を作成してみる方法を説明します。

  • パッケージをインストールし、呼び出しておきましょう。

install.packages(“modelsummary”)

install.package(“tidyverse”)

#library(modelsummary)
#regs <- list()
#regs[['Model A']] <-  lm(当年価格 ~ 都心までの時間 +  最寄り駅までの距離 + 地積面積,data = koujitika_merge)
#msummary(regs, #regsというオブジェクトを指定
         #stars= c("*" = .1, "**" = .05, "***" = .01) , #有意水準を示す星をつける
         #gof_omit='RMSE|AIC|BIC|Log.Lik.' #ここでは使わない統計量を非表示 
         #)
  • デフォルトで表示されるのは係数と標準誤差(かっこ内)です。 統計量としては、Num.Obs.が観測数、R2が決定係数、R2 Adj.が調整済み決定係数を表します。(その他の説明は省略)

  • 表はさまざまな形式で出力できます。例えばExcel形式で保存したい場合は、以下のようにオプションを加えます。

#library(modelsummary)
#regs <- list()
#regs[['Model A']] <-  lm(当年価格 ~ 都心までの時間 +  最寄り駅までの距離 + 地積面積,data = koujitika_merge)
#msummary(regs, stars= c("*" = .1, "**" = .05, "***" = .01) , gof_omit='RMSE|AIC|BIC|Log.Lik.', 'result.xlsx')

#datasummary_skim(histogram = FALSE, output='summary.xlsx', regs$`Model A`$model, fun_numeric = list( 平均 = Mean, 標準偏差 = SD, 最小値 = Min, 最大値 = Max) )

2.2 記述統計の表示

  • 記述統計作成のコマンドは以下の通りです。全変数の記述統計ではなく推定に使用した説明変数と被説明変数の基礎統計をだしましょう。
  • 記述統計は推定使ったサンプルに対して表示します。欠損値を含むサンプルは計算から除外します。
  • 記述統計は以下のdatasummay_skimコマンドで出力します
#library(modelsummary)
#datasummary_skim(histogram = FALSE, #ヒストグラムを表示しない
                 #output='summary.xlsx', #Excelファイルに出力 
                 #regs$`Model A`$model, #regsオブジェクトのModel Aの分析に使ったデータを指定
                # fun_numeric = list( 平均 = Mean, 標準偏差 = SD, 最小値 = Min, 最大値 = Max) #表示する項目を指定
                # )

課題 [学籍番号]rep2_04を提出して下さい。