この記事のコードをまとめたものはGithubにあります。
使用するパッケージ
library(tidyverse)
library(magrittr)
2005年にデータを絞る
data_2005 <- data %>%
filter(year == 2005) %>% # 2005年のデータに絞る
drop_na()
上位4政党に絞る
今回は簡単のために上位4政党に絞る。
data_2005 %>%
ggplot(aes(x = party_jpn)) +
geom_bar() +
labs(x = "")
data_2005 %<>% filter(party_jpn %in% c("自民党", "民主党", "社民党", "共産党"))
散布図
何の変哲もない散布図
恐らく正の相関がみられる。ただ、左下の存在が気になる。
(この記事を読んでいる人はこのクラスタがなにか知っていると思うが...)
data_2005 %>%
ggplot(aes(x = exppv, y = voteshare)) +
geom_point() +
labs(x = "有権者一人当たりの選挙費用", y = "得票率", title = "選挙費用と得票率の散布図")
回帰直線を引きたい(信頼区間あり)
とりま、どのような相関関係か知りたい場合は、回帰直線を引いてしまおう。
data_2005 %>%
ggplot(aes(x = exppv, y = voteshare)) +
geom_point() +
geom_smooth(method = "lm") +
labs(x = "有権者一人当たりの選挙費用", y = "得票率", title = "選挙費用と得票率の散布図")
回帰直線を引きたい(信頼区間なし)
信頼区間を出力したくない場合は、se = F
を指定しよう。
data_2005 %>%
ggplot(aes(x = exppv, y = voteshare)) +
geom_point() +
geom_smooth(method = "lm", se = F) +
labs(x = "有権者一人当たりの選挙費用", y = "得票率", title = "選挙費用と得票率の散布図")
多項式回帰の回帰直線を引く
今回は多項式回帰の回帰直線を引く有用性はなさそうだが...
もし、引きたくなったら、geom_smooth()
にformula =
を使って、回帰直線の式を指定しよう。
とりあえず、2次式と3次式の回帰直線を引いた。
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 = "選挙費用と得票率の散布図")
クラスタごとに層化する
では実際に層化して散布図を作成する。
左下のクラスタは正の相関を見せているが、真ん中のクラスタでは無相関と小さな正の相関が見られる。
このことから、回帰分析をする際は交差項を含めた良さそうなことがわかる。(大政党ダミーと言ったところか...)
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のタイトルを変更できる
大政党ダミーを作成し、層化した散布図を作成する
実際に政党規模でダミー変数を作成し、層化した散布図を作成した。
大政党よりも小政党のほうが傾きが大きいとわかった。
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 = "政党規模")
pointを工夫すると...
(2021年10月10日追記)あまり意味のある良い図形ではないと思うので、コードだけを参考にしてください。
alpha =
とsize =
に過去の当選回数を指定した。当選回数が多いとpointの色が濃くなり、大きな点となる。
また、geom_point()
で点を出力すると点が見ずらい。そのため、geom_jitter()
で点を散らして出力する。
これを見ると、当選する政治家はしっかりと金を使っていることが分かる。
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 = "選挙費用と得票率の散布図")