---
title: "Rによる計量政治学：練習問題の解答例"
subtitle: "第6章 記述統計とデータの可視化・視覚化"
author: "浅野正彦, 矢内勇生"
date: "2018-11-24"
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)
```

## パッケージの読み込み

```{r load-packs}
library("tidyverse")
if (capabilities("aqua")) { # Macかどうか判定し、Macの場合のみ実行
  theme_set(theme_gray(base_size = 10, base_family = "HiraginoSans-W3"))
}                                             
```

## 衆院選データの読み込み

本章の6.1.3節で保存したRds形式の衆院選データ (hr-data.Rds) を読み込む。
手元にない場合はまずダウンロードする。
```{r read-HR-data}
# dir.create("data") # データディレクトリがない場合は作る
#download.file(url = "https://git.io/fp00p",
#              destfile = "data/hr-data.Rds")
HR <- read_rds("data/hr-data.Rds")
## Rdsファイルの読み込みがうまくいかない場合は以下を実行
#download.file(url = "https://git.io/fxhQU",
#              destfile = "data/hr-data.csv")
#HR <- read_csv("data/hr-data.csv")
```

正しく読み込めたかどうか確認する。
```{r check-HR}
glimpse(HR)
```

## Q6-1

候補者の年齢 age、得票率 voteshare、選挙費用 exp の記述統計を求めてみよう。
```{r desc-HR-1}
HR %>% 
  select(age, voteshare, exp) %>% 
  summary()
```

選挙費用をもう少し詳しく見てみよう。
まず、分散と標準偏差を求める。
```{r desc-HR-exp}
var(HR$exp, na.rm = TRUE)  # 分散
sd(HR$exp, na.rm = TRUE)   # 標準偏差
```

次に、選挙の年 year ごとに、選挙費用の中央値 (median)、平均値 (mean)、標準偏差 (sd) を求めてみよう。
```{r desc-HR-exp-year}
HR %>% 
  group_by(year) %>% 
  summarize(median = median(exp, na.rm = TRUE),
            mean = mean(exp, na.rm = TRUE),
            sd = sd(exp, na.rm = TRUE))
```

2014年と2017年の選挙については、選挙費用が記録されていない（このデータに含まれていないだけ）ことがわかる。


## Q6-2

2012年の選挙だけを取り出し、HR2012というデータフレームを作る。
```{r HR2012}
HR2012 <- filter(HR, year == 2012)
```

### Q6-2-1

小選挙区の当落と復活当選は wl に保存されているので、次のようにすればよい。
```{r wl-ldp-2012}
HR2012 %>% 
  filter(party_jpn == "自民党") %>% 
  with(table(wl))
```

### Q6-2-3

上と問題の「自民党」を「民主党」に変えればよい。
```{r wl-dpj-2012}
HR2012 %>% 
  filter(party_jpn == "民主党") %>% 
  with(table(wl))
```


## Q6-3

候補者の名前は、nameにローマ字表記で記載されている。いくつか確認してみよう。
```{r check-name}
head(HR$name)
```
すべて大文字で、"LAST, FIRST" と保存されていることがわかる。歴代の民主党首相もこの表記で表そう。
```{r dpj-pm}
pm_dpj <- c("HATOYAMA, YUKIO", "KAN, NAOTO", "NODA, YOSHIHIKO")
```

衆院選データのうち、200年から2009年までの指定された変数を、歴代民主党首相について表示する。
```{r dpj-pm-vars}
HR %>% 
  filter(year >= 2000 & year <= 2009) %>% 
  filter(name %in% pm_dpj) %>% 
  select(name, year, ku, kun, party, age, nocand, rank, voteshare) %>% 
  arrange(name)
```

## Q6-4

### Q6-4-1

政党別に獲得票数 vote の箱ひげ図を作る。
```{r boxplot-vote, fig.width = 9, fig.height = 6}
p <- ggplot(data = HR2012, aes(x = party_jpn, y = vote)) +
  geom_boxplot() +
  labs(x = "政党", y = "獲得票数")
print(p)
```

獲得票数の中央値が小さい順に並べるには、次のようにする。
```{r boxplot-vote2, fig.width = 9, fig.height = 6}
p2 <- ggplot(HR2012, 
             aes(x = reorder(x = party_jpn, X = vote, FUN = median),
                 y = vote)) +
  geom_boxplot() +
  labs(x = "政党", y = "獲得票数")
print(p2)
```


### Q6-4-2

自民党の獲得票数の五数要約。
```{r ldp-fivenum}
fn_names <- c("min", "Q1", "median", "Q3", "max")
ldp_fn <- HR2012 %>% 
  filter(party_jpn == "自民党") %>% 
  with(fivenum(vote))
names(ldp_fn) <- fn_names
ldp_fn
```

民主党の獲得票数の五数要約。
```{r dpj-fivenum}
dpj_fn <- HR2012 %>% 
  filter(party_jpn == "民主党") %>% 
  with(fivenum(vote))
names(dpj_fn) <- fn_names
dpj_fn
```
