-
Notifications
You must be signed in to change notification settings - Fork 8
/
Copy pathch11-answers.Rmd
123 lines (99 loc) · 7.12 KB
/
ch11-answers.Rmd
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
---
title: "Rによる計量政治学:練習問題の解答例"
subtitle: "第11章 回帰分析による統計的推定"
author: "浅野正彦, 矢内勇生"
date: "2018-11-28"
output:
html_document:
theme: united
highlight: tango
css: my-markdown.css
toc: true
self_contained: true
---
```{r global_option, include = FALSE}
knitr::opts_chunk$set(warning = FALSE, echo = TRUE, message = FALSE,
fig.width = 5, fig.height = 4, cache = TRUE)
```
## パッケージの読み込み
```{r load-packs}
library("tidyverse")
if (capabilities("aqua")) { # Macかどうか判定し、Macの場合のみ実行
theme_set(theme_gray(base_size = 10, base_family = "HiraginoSans-W3"))
}
library("coefplot")
```
## Q11-1
Rds形式の衆院選データ (hr-data.Rds) を読み込む。
手元にない場合はまずダウンロードする。
```{r read-HR-data}
# dir.create("data") # dataディレクトリがない場合は作る
#download.file(url = "https://git.io/fp00p",
# destfile = "data/hr-data.Rds")
HR <- read_rds("data/hr-data.Rds")
## Rdsファイルの読み込みがうまくいかない場合は以下を実行してCSVファイルを使う
#download.file(url = "https://git.io/fxhQU",
# destfile = "data/hr-data.csv")
#HR <- read_csv("data/hr-data.csv")
```
正しく読み込めたかどうか確認する。
```{r check-HR}
glimpse(HR)
```
2012年衆院選の民主党候補だけを抜き出してデータフレームを作る。
```{r dpj2012}
DPJ2012 <- filter(HR, year == 2012, party_jpn == "民主党")
```
### Q11-1-1
得票率 voteshare、当選回数 previous 、年齢 age の関係を、次の線形モデルで表す($\epsilon_i$は誤差項)。
$$
得票率_i = \beta_0 + \beta_1 当選回数_i + \beta_2 年齢_i + \epsilon_i.
$$
母数について、以下の2組の仮説を立てる。
1. 係数を包括的に検定するための仮説
- 帰無仮説:$\beta_1 = \beta_2 = 0$
- 対立仮説:$\beta_1$と$\beta_2$のうち、少なくとも一つは0ではない
2. 係数を個別に検定するための仮説($k \in \{1, 2\}$)
- 帰無仮説:$\beta_k = 0$
- 対立仮説:$\beta_k \neq 0$
回帰分析で、このモデルの母数である $\beta_0$、$\beta_1$、$\beta_2$ を推定する。
```{r fit-q11}
fit_q11 <- lm(voteshare ~ previous + age, data = DPJ2012)
summary(fit_q11)
```
包括的な仮説から検定しよう。上で示された結果のうち、最後の行にある$F$統計量の$p値$ を見ると、2.2e-16$ = 2.2 \cdot 10^{-16} \approx 0$未満であり、$p$値が$0.05$より小さいので、有意水準5\%で帰無仮説を棄却する。すなわち、$\beta_1$と$\beta_2$のうち、少なくとも一方は0ではない。言い換えると、(**上で想定したモデルが正しいなら**)当選回数と年齢のうち少なくとも一方は得票率に影響を与える。
次に、係数を個別に検定しよう。まず、過去の当選回数 (previous) の係数の$p$値は、2e-16 $= 2\cdot10^{-16} \approx 0$未満であり、$p$値が$0.05$より小さいので、有意水準5\%で帰無仮説を棄却する。すなわち、過去の当選回数は、得票率に影響を与える。$\beta_1$の推定値は約$`r round(coef(fit_q11)[2], 2)`$だから、年齢を一定に保つと、過去の当選回数が1回増えるごとに、得票率は平均すると$`r round(coef(fit_q11)[2], 2)`$パーセントポイントずつ上昇すると考えられる。過去の当選回数が3回異なると、$`r round(3 *coef(fit_q11)[2], 2)`$パーセントポイント得票率に差が出るということなので、この効果は実質的にも意味がある(つまり、選挙結果を左右し得る)効果であると考えられる。
同様に、年齢 (age) の係数の$p$値は、2.55e-05 $= 2.55 \cdot 10^{-5} \approx 0 < 0.05$だから、有意水準5%で帰無仮説を棄却する。すなわち、年齢は得票率に影響を与える。$\beta_2$の推定値は約$`r round(coef(fit_q11)[3], 2)`$だから、過去の当選回数を一定に保つと、年齢が1歳上がるごとに得票率が$`r round(coef(fit_q11)[3], 2)`$パーセントポイントずつ上がる、つまり、$`r abs(round(coef(fit_q11)[3], 2))`$パーセントポイントずつ**下がる**ことが予測される。
一回り年齢が違うと、$`r abs(round(12 * coef(fit_q11)[3], 2))`$パーセントポイントだけ得票率に差が出るということなので、無視できるほど小さい差ではないが、実質的に大きな効果があると言い切ることは難しい。30歳の候補と60歳の候補を比べると、$`r abs(round(30 * coef(fit_q11)[3], 2))`$パーセントポイントの差になるので、年齢差が大きければ実質的に意味がある違いが出ることがわかる(2012年の民主党候補のうち、最年少候補は`r min(DPJ2012$age)`歳、最年長候補は`r max(DPJ2012$age)`歳である)。
最後に、分析結果を図にまとめる。
```{r coefplot-q11, fig.width = 8}
coefs_q11 <- coefplot(
model = fit_q11, # 図示するモデルを指定
intercept = FALSE, # 切片を表示しない
pointSize = 4, # 点の大きさを4に
## 内側の線を50%信頼区間にする。既定値は1(「点推定値±1標準誤差」)
innerCI = qt(df = summary(fit_q11)$df[2],
p = 0.25, lower.tail = FALSE),
lwdInner = 2.5, # 内側の線の太さを2.5に
## 外側の線を95%信頼区間にする。既定値は2(「点推定値±2標準誤差」)
outerCI = qt(df = summary(fit_q11)$df[2],
p = 0.025, lower.tail = FALSE),
lwdOuter = 0.5, # 外側の線の太さを0.5に
## 説明変数を日本語で表示する
newNames = list(previous = "過去の当選回数", age = "年齢"),
xlab = "係数の推定値",
ylab = "説明変数",
title = "2012年衆院選における民主党候補の得票率 (%)を予測するモデル"
)
print(coefs_q11)
```
この図が推定結果をまとめている。縦軸にはモデルに含まれる説明変数が並んでいる。横軸は、係数の推定値の大きさを表している。図中の点は、各説明変数の係数の点推定値である。また、水平に引かれた線は、内側の太い線が50パーセント信頼区間、外側の細い線が95パーセント信頼区間である。いずれの変数についても、95パーセント信頼区間がゼロを跨いでいないので、5%の有意水準で、推定された効果は統計的に有意であることがわかる。この分析の標本サイズは`r length(summary(fit_q11)$residuals)`、自由度調整済み決定係数は`r round(summary(fit_q11)$adj.r.squared, 2)`である。
### Q11-1-2
得票率 voteshare を応答変数、選挙費用 expm(100万円)を説明変数と想定して散布図を描き、回帰直線とその95%信頼区間を示す。
```{r scat-q11}
scat_q11 <- ggplot(DPJ2012, aes(x = expm, y = voteshare)) +
geom_point() +
geom_smooth(method = "lm") +
labs(x = "選挙費用(100万円)", y = "得票率 (%)")
print(scat_q11)
```