• 分析に必要なパッケージをロードする
library(broom)
library(ggstance)
library(interplot)
library(margins)
library(msm)
library(patchwork)
library(stargazer)
library(tidyverse)

調整変数はカテゴリカル変数か連続変数か?

  • 調整変数がカテゴリカル変数なのか連続変数なのか?
    → それぞれ限界効果の可視化方法が異なる

例)

  • 候補者の所属政党ごと、選挙費用が得票率に与える影響(カテゴリカル変数:左の図)
  • 有権者数の規模ごと、選挙費用が得票率に与える影響(連続変数:右の図)   

1. 1. 交差項を使った回帰分析モデル

ここで知りたいこと

  • 「選挙費用が得票率に与える影響は、有権者数によって変わるのか?」

1.1 データの準備 (hr96-21.csv)

  • 次のいずれかの方法で csv ファイルを取り込む

選挙データの読み取り方法 (1)

download.file(url = "http://www.ner.takushoku-u.ac.jp/masano/class_material/waseda/keiryo/Data/hr96-21.csv",
              destfile = "data/hr96-21.csv")
  • dataフォルダ内から read_csv で読み取る
df1 <- read_csv("data/hr96-21.csv", na = ".")            

選挙データの読み取り方法 (2)

  • hr96-21.csv をダウンロードして RProject フォルダ 内の data フォルダに入れる

  • dataフォルダ内から read_csv で読み取る

df1 <- read_csv("data/hr96-21.csv", na = ".")           
  • hr96_17.csv は1996年に衆院選挙に小選挙区が導入されて以来実施された 9 回の衆議院選挙(1996, 2000, 2003, 2005, 2009, 2012, 2014, 2017, 2021)の結果のデータ

  • データフレーム df1 の変数名を確認/

names(df1)
 [1] "year"          "pref"          "ku"            "kun"          
 [5] "wl"            "rank"          "nocand"        "seito"        
 [9] "j_name"        "gender"        "name"          "previous"     
[13] "age"           "exp"           "status"        "vote"         
[17] "voteshare"     "eligible"      "turnout"       "seshu_dummy"  
[21] "jiban_seshu"   "nojiban_seshu"
  • 分析には候補者が有権者一人あたりに費やした選挙費用データが必要
  • しかし、この変数がないので exppv という名称で新たに変数を作り df1 に上書きする
df1 <- mutate(df1, exppv = exp / eligible)
  • 分析に必要な変数だけに絞る
df1 <- df1 %>% 
  dplyr::filter(year == 2005) %>%    # 2005年のデータだけを選ぶ
  dplyr::select(year, ku, kun, j_name, age, rank, previous, voteshare, eligible, exppv, nocand) # 10の変数だけを選ぶ
  • df1に含まれる変数を確認する
names(df1)
 [1] "year"      "ku"        "kun"       "j_name"    "age"       "rank"     
 [7] "previous"  "voteshare" "eligible"  "exppv"     "nocand"   
  • データの最初の 6 行を表示させる
head(df1)
# A tibble: 6 × 11
   year ku      kun j_name    age  rank previous voteshare eligible exppv nocand
  <dbl> <chr> <dbl> <chr>   <dbl> <dbl>    <dbl>     <dbl>    <dbl> <dbl>  <dbl>
1  2005 aichi     1 河村た…    56     1        4      50     360007 17.0       4
2  2005 aichi     1 篠田陽…    32     2        0      39.1   360007 40.0       4
3  2005 aichi     1 木村恵…    55     3        0       7.4   360007  6.05      4
4  2005 aichi     1 小林正…    56     4        0       3.6   360007 13.1       4
5  2005 aichi     2 古川元…    39     1        3      52     366121 30.2       3
6  2005 aichi     2 岡田裕…    27     2        0      39.1   366121 14.4       3

1.2 データの記述統計

library(stargazer)
stargazer(as.data.frame(df1), 
          type = "html")
Statistic N Mean St. Dev. Min Max
year 989 2,005.000 0.000 2,005 2,005
kun 989 5.563 4.916 1 25
age 989 50.292 10.871 25 81
rank 989 2.217 1.041 1 6
previous 989 1.550 2.412 0 15
voteshare 989 30.333 19.230 0.600 73.600
eligible 989 344,654.300 63,898.230 214,235 465,181
exppv 985 24.627 17.907 0.148 89.332
nocand 989 3.435 0.740 2 6
  • 分析に必要な変数だけに絞る
df1 <- df1 %>% 
  dplyr::filter(year == 2005) %>%    # 2005年のデータだけを選ぶ
  dplyr::select(ku, kun, j_name, age, rank, previous, voteshare, eligible, exppv, nocand) # 10の変数だけを選ぶ
  • df1に含まれる変数を確認する
names(df1)
 [1] "ku"        "kun"       "j_name"    "age"       "rank"      "previous" 
 [7] "voteshare" "eligible"  "exppv"     "nocand"   
  • データの最初の 6 行を表示させる
head(df1)
# A tibble: 6 × 10
  ku      kun j_name       age  rank previous voteshare eligible exppv nocand
  <chr> <dbl> <chr>      <dbl> <dbl>    <dbl>     <dbl>    <dbl> <dbl>  <dbl>
1 aichi     1 河村たかし    56     1        4      50     360007 17.0       4
2 aichi     1 篠田陽介      32     2        0      39.1   360007 40.0       4
3 aichi     1 木村恵美      55     3        0       7.4   360007  6.05      4
4 aichi     1 小林正和      56     4        0       3.6   360007 13.1       4
5 aichi     2 古川元久      39     1        3      52     366121 30.2       3
6 aichi     2 岡田裕二      27     2        0      39.1   366121 14.4       3
  • データの記述統計を示す
library(stargazer)
stargazer(as.data.frame(df1), 
          type = "html")
Statistic N Mean St. Dev. Min Max
kun 989 5.563 4.916 1 25
age 989 50.292 10.871 25 81
rank 989 2.217 1.041 1 6
previous 989 1.550 2.412 0 15
voteshare 989 30.333 19.230 0.600 73.600
eligible 989 344,654.300 63,898.230 214,235 465,181
exppv 985 24.627 17.907 0.148 89.332
nocand 989 3.435 0.740 2 6

1.2 変数間の散布図を確認

ここで知りたいこと

  • 「選挙費用が得票率に与える影響は、有権者数によって変わるのかどうか」

  • 2 つの散布図を確認

  • 選挙費用(説明変数)と得票率(応答変数)- - - F1

  • 有権者数(調整変数)と得票率(応答変数)- - - F2

  • ggplot で日本語を表示させるため、マックユーザーは以下のいずれかのコマンドを入力

theme_set(theme_bw(base_size = 10,
                     base_family = "HiraginoSans-W3"))
theme_bw(base_family = "HiraKakuProN-W3")
F1 <- ggplot(df1, aes(exppv, voteshare)) +
  geom_point() +
  labs(x = "選挙費用(円:有権者一人あたり)", y = "得票率 (%)",
         title = "選挙費用と得票率") + 
  stat_smooth(method = lm, se = FALSE) +
  theme_bw(base_family = "HiraKakuProN-W3")
F2 <- ggplot(df1, aes(eligible, voteshare)) +
  geom_point() +
  labs(x = "有権者数", y = "得票率 (%)",
         title = "有権者数と得票率") + 
  stat_smooth(method = lm, se = FALSE) +
  theme_bw(base_family = "HiraKakuProN-W3")
F1 + F2 + plot_layout(ncol = 2)