重回帰分析で頑張りたい
Tokyo.R 初心者セッション3
Shota Yasui
About My Self
安井翔太 / Shota Salmon Yasui
Twitter: @housecat442
<けーれき>
 日本のド文系経済学部
 アメリカで計量経済学1年
 ノルウェーで資源・環境経済学修士取得
 SNF研究所でデータ分析(環境税作成)
 広告関係のデータ分析やってます。
今日の内容
1. 簡単なコードで、
2. シンプルな手法(重回帰)を使って、
3. 因果推論っぽい事をする。
簡単な事だけで何かを分析する!という例を紹介したい。
Rを使ってやれる事の例を紹介したい。
紹介するサンプルのデータ
 Introductory Econometrics: A Modern Approach
 http://www.cengage.com/aise/economics/wooldri
dge_3e_datasets/
 今日使うデータはここからDLできます
 Textファイルやexcelファイルやstataファイルの形式で
置いてあります。
 Textならread.table
 Stataならforeignパッケージを利用して読み込みます
1.会社の規模がR&Dの規模を
左右するのかを知りたい。
 Introductory Econometrics p.139
 rdchem.dtaを利用
 企業の規模とResearch & Developmentの関係性
 企業の規模を表すデータとして売上を使用
 利益率がR&Dに関係しているかも知りたい
 アメリカの化学業界32社のデータを利用
 以下のモデルを重回帰で推定。
Log(rd) = a + b*log(sales) + c*profmarg + error
データの読み込み
 STATAのデータを読み込む。
 Foreignパッケージを利用(stata/sas/spssのデータ
を読み込む為のパッケージ)
install.packages(“foreign”)
library(foreign)
data <- read.dta("data/rdchem.dta")
重回帰 lm()
データを読み込み
data <- read.dta("data/rdchem.dta”)
lmで線形回帰、結果をresultに入れる。
result <- lm(lrd ~ lsales + profmarg, data = data)
Summaryで結果のサマリーを表示。
summary(result)
結果
• Log(sales)の係数が1.084、売上が1%高いとR&Dが1.08%高くなる。
• Profmarg:利益率の係数は有意じゃない。さらにパラメータのサイズも経済
的な側面からから見てもあまり重要でない。
• Intercept(定数項:a)は売上と利益率が0の時のR&Dの値
Plotしてみる
plot(data$lsales, data$lrd, xlab = "sales", ylab = "log(R&D)")
推定された線を上に書く
plot(data$lsales, data$lrd, xlab = "sales", ylab = "log(R&D)")
abline(a = result$coefficients["(Intercept)"], b=result$coefficients["lsales"])
ablineで指定した傾きと定数を持った線をかける。
aは定数なので、回帰分析の結果から定数項の値を持ってくる。
bは傾きなので、回帰分析の結果からlsalesの結果を持ってくる。
2.授業の参加が、期末試験に与
える影響を知りたい。
 Introductory Econometrics p.198
 attend.dtaを利用
 授業の参加の期末試験の成績への影響
期末の成績 = a + b参加率 + c*過去GPA + d*ACT + e*過去GPA^2 + f*ACT^2 + g*過去
GPA*参加率 + error
 授業に参加する程成績が良さそう
 過去GPAが高ければ成績が良さそう
 ACT(センター試験みたいなの)が高い程良さそう。
でもACTの点の効果は高い程小さそう。
 参加する事の効果は人によって違いそう。
また重回帰
data <- read.dta("data/attend.dta”)
result <- lm(stndfnl ~ atndrte + priGPA + ACT + I(priGPA^2) +
I(ACT^2) + I(priGPA*atndrte), data = data)
summary(result)
モデルを記述する際にI()で囲むとその中で^2とかの計算が出来る。
結果
取り敢えずt検定で有意なパラメータだけ見ると過去のGPAとACTが意味ありそう。
授業参加の効果を知りたい・・・
Atndrateのパラメータは有意でない。(単体としての解釈はするべきでない)
F-test anova()
full <- lm(stndfnl ~ atndrte + priGPA + ACT + I(priGPA^2) + I(ACT^2) + I(priGPA*atndrte), data = data)
reduced <- lm(stndfnl ~ priGPA + ACT + I(priGPA^2) + I(ACT^2), data = data)
anova(reduced,full)
モデル1とモデル2は有意に違う。
モデル2はモデル1からatndrteとpriGPA*atndrteを抜いたもの。
▶︎atndrteとpriGPA*atndrteをセットで解釈する事は問題無さそう
授業参加の効果(atndrte)
• 期末成績への効果 = -0.0067*参加率 + 0.0056*参加率*priGPA
• 参加率単体のパラメーターはpriGPAが0の時の参加率の効果となる。
• priGPAの平均は2.59。この時の参加率の効果を知りたい。
> mean(data$priGPA)
[1] 2.586775
• 平均的な成績の生徒が10%多く授業に参加すると、平均して成績は0.078上
がる。
• 成績は平均からの乖離を標準偏差で割った値のデータなので、10%の参加率
の上昇で成績は0.078標準偏差上がる。
• この結果は有意に0と異なるのだろうか?
授業参加の効果(atndrte)
• priGPA*atndrteを(priGPA-mean(priGPA))*atndrteに変える。
result2 <- lm(stndfnl ~ atndrte + priGPA + ACT + I(priGPA^2) + I(ACT^2) +
I((priGPA-mean(priGPA))*atndrte), data = data)
summary(result2)
• priGPAが平均値なら、atndrteのパラメーターはpriGPAが平均値の時の効
果として解釈&検定する事が出来る。
3.補助金の効果
 Introductory Econometrics p.231
 JTRAIN.dtaを利用
 職業訓練補助金が、企業の従業員への職業訓練を促進しているか
をしりたい。
 1988年のミシガン州の製造業の会社105社のデータ。
 訓練時間=a + b*補助金 + c*log(売上) + d*log(雇用者数) + error
3.Effects of Training Grants
data <- read.dta("data/JTRAIN.dta")
data1988 <- subset(data, data$year == 1988)
data1988 <- subset(data1988, is.na(data1988$hrsemp) != TRUE)
result <- lm(hrsemp ~ grant + lsales + lemploy, data = data1988)
summary(result)
 Subsetをつかってdataを1988年の物に限定し、さらに従業員教育の
時間のデータが無い物を除いている。
3.Effects of Training Grants
 補助金(Grant)のパラメーターは有意
 補助金を与えられている企業は平均して26時間多く従業員の教育に費やしている事が解る。
 会社の売上(sales)の効果は小さい。
3.Effects of Training Grants
 この推定自体は結果が因果なのかどうかは教えてくれない。
 推定結果が因果かどうかを判断するには、政府がどのようにして
補助金を与える企業を選んでいるかを知らなくてはならない。
 元々従業員を教育する事に熱心な企業に補助金を与えているだけ
かもしれない。
4.ゴミ焼却場の不動産価格への
影響を知りたい。
 House Prices during Siting Decision Stages: The Case of an
Incinerator from Rumor through Operation
http://www.fsb.miamioh.edu/lij14/420_paper_house.pdf
 KIELMC.dtaを利用
 North Andoverで1978年以降に将来ゴミ焼却場が建設されるとい
う噂が流れ始め、実際に1981年に建設が始まった。
 1978年と1981年の家の取引データから、ゴミ焼却場の建設によっ
て、家の価格が落ちたかを検証したい。また、建設地に近い程強
い影響を受けているかを知りたい。
 この研究の単純化ver
Simple Model
 price = a + b*nearinc + error を1981年のデータで推定
 Nearinc(ゴミ焼却場に近いか?のダミー)で価格に影響がある
のか?
data <- read.dta("data/KIELMC.dta")
data1981 <- subset(data, year == 1981)
reg.1 <- lm(rprice ~ nearinc, data = data1981)
summary(reg.1)
1981年のデータでの結果
nearincが有意でマイナス!
▶︎ゴミ処理場による効果が3万ドルだと言えるのだろうか?
1978年のデータでの結果
1978年のデータで推定してもnearincが有意でマイナス!
▶︎じゃぁゴミ焼却場の効果はなんなんだろう?
Difference in difference
estimator
 price = a + b*nearinc + c*nearinc*dy81 + d*dy81 + error
 を1978&1981年のデータで推定
 a: 1978年の全エリアの平均価格
 b: 1978&81年で予定地付近に共通な特徴が価格に与える影響
 c: 1981年に予定地付近に新たに追加された特徴が価格に与える影響
 d: 1981年に全ての地域で新たに追加された特徴が価格に与える影響
 家ごとの特徴は加味されていない。
Difference in difference
estimator
 price = a + b*nearinc + c*nearinc*dy81 + d*dy81 + error
a
a+b
a+d
a+b+c+d
1978(dy=0) 1981(dy=1)
予定地付近
(nearinc=1)
予定地付近でない
(nearinc=0)
Difference in difference
estimator
y81*nearincのパラメーターは0と変わらない。
経済的に豊な人の方が流出し易い等の傾向があれば、高い家が売り出され、家の価格を
決める他の要素を加味しないモデルでは効果を上手く推定出来ない。
Housing price model
 price = a + b*nearinc + c*nearinc*dy81 + d*dy81 + e*intst +
f*land + g*area + h*rooms + i*baths + j*age + k*age^2 + error
 e: 高速道路からの距離の与える影響
 f: 土地のサイズの与える影響
 g: 家のサイズの与える影響
 i: バスルームの数の与える影響
 j+k: 築年数の与える影響
reg.5 <- lm(rprice ~ y81 + nearinc + nearinc*y81 + age + agesq
+ intst + land + area + rooms + baths, data = data)
summary(reg.5)
Housing price model
• 推定されたy81*nearincのパラメーターの標準偏差が小さくなった。
• 家の特徴をコントロール変数としていれる。
• 結果ゴミ処理場の効果が-14000ドル程度と推定された。
• 価格に対数を取ったモデルの場合、価格の14%程度下落したという結果になる。
まとめ
 4つのサンプルを紹介しました。
 どれも政策に繋がるお話でした。
 こういった方法をビジネス場の試作に適応するのは、ドメイン知識さ
えあればそれなりにできてしまう。
 色々悩んだらまずは簡単な事から入って行ったらどうでしょう?
手前味噌ですが、最後のモデルを参考に部屋探してみたりしました。
▶︎http://www.slideshare.net/shotayasui/for-slide-share-32879487

重回帰分析で頑張る