【R】データの可視化（散布図）

この記事のコードをまとめたものは[Github](https://github.com/FruitGranola/R_Scatterplot)にあります。


# 使用するパッケージ

```{r}
library(tidyverse)
library(magrittr)
```

# 2005年にデータを絞る

```{r}
data_2005 <- data %>% 
  filter(year == 2005) %>%  # 2005年のデータに絞る
  drop_na()
```

# 上位4政党に絞る

今回は簡単のために上位4政党に絞る。

```{r}
data_2005 %>% 
  ggplot(aes(x = party_jpn)) +
  geom_bar() +
  labs(x = "")
```
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1025774/680d1bad-1fac-d7be-1833-6aed69068539.png)

```{r}
data_2005 %<>% filter(party_jpn %in% c("自民党", "民主党", "社民党", "共産党"))
```

# 散布図

## 何の変哲もない散布図

恐らく正の相関がみられる。ただ、左下の存在が気になる。
（[この記事](https://qiita.com/FruitGranola/items/d9acd187bf5e93e5c57e)を読んでいる人はこのクラスタがなにか知っていると思うが...）

```{r}
data_2005 %>% 
  ggplot(aes(x = exppv, y = voteshare)) +
  geom_point() +
  labs(x = "有権者一人当たりの選挙費用", y = "得票率", title = "選挙費用と得票率の散布図")
```
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1025774/31f2e7a2-132d-07b9-43df-3b8bff518b02.png)

## 回帰直線を引きたい(信頼区間あり)

とりま、どのような相関関係か知りたい場合は、回帰直線を引いてしまおう。

```{r}
data_2005 %>% 
  ggplot(aes(x = exppv, y = voteshare)) +
  geom_point() +
  geom_smooth(method = "lm") +
  labs(x = "有権者一人当たりの選挙費用", y = "得票率", title = "選挙費用と得票率の散布図")
```
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1025774/931a0cb2-af82-8c3a-1201-f8e65044e7dd.png)

## 回帰直線を引きたい(信頼区間なし)

信頼区間を出力したくない場合は、`se = F`を指定しよう。

```{r}
data_2005 %>% 
  ggplot(aes(x = exppv, y = voteshare)) +
  geom_point() +
  geom_smooth(method = "lm", se = F) +
  labs(x = "有権者一人当たりの選挙費用", y = "得票率", title = "選挙費用と得票率の散布図")
```
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1025774/c31232b1-a8bc-9851-6600-c0d06c272365.png)

## 多項式回帰の回帰直線を引く

今回は多項式回帰の回帰直線を引く有用性はなさそうだが...  
もし、引きたくなったら、`geom_smooth()`に`formula =`を使って、回帰直線の式を指定しよう。
とりあえず、2次式と3次式の回帰直線を引いた。

```{r}
data_2005 %>% 
  ggplot(aes(x = exppv, y = voteshare)) +
  geom_point() +
  geom_smooth(method = "lm", formula = y ~ poly(x, 2)) + # 二次式
  geom_smooth(method = "lm", formula = y ~ poly(x, 3)) + # 三次式
  labs(x = "有権者一人当たりの選挙費用", y = "得票率", title = "選挙費用と得票率の散布図")
```
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1025774/7aa546cf-fdcb-b41e-e619-7627f18e8fb5.png)

## クラスタごとに層化する

では実際に層化して散布図を作成する。
左下のクラスタは正の相関を見せているが、真ん中のクラスタでは無相関と小さな正の相関が見られる。
このことから、回帰分析をする際は交差項を含めた良さそうなことがわかる。（大政党ダミーと言ったところか...）

```{r}
data_2005 %>% 
  ggplot(aes(x = exppv, y = voteshare, color = party_jpn)) +
  geom_point() +
  geom_smooth(method = "lm") +
  labs(x = "有権者一人当たりの選挙費用", y = "得票率", 
       title = "選挙費用と得票率の散布図",　color = "政党") # labs()で"color = "hoge""を指定するとlegendのタイトルを変更できる
```
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1025774/aad76e62-6e8e-524d-f4fc-0f431546353c.png)

## 大政党ダミーを作成し、層化した散布図を作成する

実際に政党規模でダミー変数を作成し、層化した散布図を作成した。
大政党よりも小政党のほうが傾きが大きいとわかった。

```{r}
data_2005 %>% 
  mutate("dummy" = if_else(party_jpn %in% c("自民党", "民主党"), "大政党", "小政党")) %>% 
  ggplot(aes(x = exppv, y = voteshare, color = dummy)) +
  geom_point() +
  geom_smooth(method = "lm") +
  labs(x = "有権者一人当たりの選挙費用", y = "得票率", 
       title = "選挙費用と得票率の散布図", color = "政党規模")
```
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1025774/025d2872-f55c-92b7-d640-96a0208dfb1f.png)

## pointを工夫すると...
（2021年10月10日追記）あまり意味のある良い図形ではないと思うので、コードだけを参考にしてください。

`alpha =`と`size =`に過去の当選回数を指定した。当選回数が多いとpointの色が濃くなり、大きな点となる。
また、`geom_point()`で点を出力すると点が見ずらい。そのため、`geom_jitter()`で点を散らして出力する。
これを見ると、当選する政治家はしっかりと金を使っていることが分かる。

```{r}
set.seed(1) # geom_jitter()の散らばり方はランダムのため、散らばり方を固定する。

data_2005 %>% 
  ggplot(aes(x = exppv, y = smd)) +
  geom_smooth(method = "lm", se = F) +
  geom_jitter(aes(color = as.factor(smd), 
                  alpha = previous,
                  size = previous),
              show.legend = F) +
  labs(x = "有権者一人当たりの選挙費用", y = "当選したか否か", 
       title = "選挙費用と得票率の散布図")
```
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1025774/d5d77023-0c04-bde9-adcb-3924a4a9c6e9.png)