日本選挙学会の機関誌「選挙研究」に掲載される予定の論文「旧統一教会が参院選に与えた影響の推定 自民党・井上義行氏の得票を例に」の分析手法や結果について、もとになったデータやRのコードとともに公開します。なお、以下のコードはR version 4.2.2とRStudio 2023.06.0 Build 421で動くことを確認しています。
library(tidyverse)
library(modelsummary)
library(MatchIt)
library(rgenoud)
library(cobalt)
library(zipangu)
library(estimatr)
library(gt)
if (!require("broom", character.only = TRUE)) {
install.packages("broom")
library("broom", character.only = TRUE)
}
以下の四つのファイルを読み込み、分析用に加工する。
・各市区町村に割り振られたコード
・旧統一教会がウェブサイトで公表している「家庭教会」の所在地
・参院選における井上義行氏の得票記録
・e-Statから取得した各市区町村の「社会・人口統計体系」データ
# 市区町村ごとに割り振られたコード
jiscode <- read_csv("data/提出用/jiscode.csv")
## Rows: 1896 Columns: 4
## ── Column specification ────────────────────────────────────────────────────────
## Delimiter: ","
## chr (3): code, pref, pref_city
## dbl (1): asahicode
##
## ℹ Use `spec()` to retrieve the full column specification for this data.
## ℹ Specify the column types or set `show_col_types = FALSE` to quiet this message.
#旧統一教会の拠点289カ所がおかれた259自治体にタグを振る
church <- read_csv("data/提出用/教会所在地.csv") %>%
mutate(address_components=separate_address(address)) %>%
unnest_wider(col = address_components) %>%
select(-address) %>%
mutate(prefecture=str_sub(prefecture,start=11,end=-1),
pref_city=str_c(prefecture,city),
uc=1) %>%
distinct(pref_city,uc) %>%
left_join(jiscode %>% select(code,pref_city)) %>%
select(code,uc)
## Rows: 289 Columns: 1
## ── Column specification ────────────────────────────────────────────────────────
## Delimiter: ","
## chr (1): address
##
## ℹ Use `spec()` to retrieve the full column specification for this data.
## ℹ Specify the column types or set `show_col_types = FALSE` to quiet this message.
## Joining with `by = join_by(pref_city)`
# 井上氏の得票データを読み込み、「社会・人口統計体系」データを合体
inoue <- read_csv("data/提出用/votes.csv") %>%
mutate(inoue_ratio=井上得票*100/投票者数,
exp_inoue_ratio=(自民得票計-井上得票)*100/投票者数,
ldp_ratio=自民_党_の得票*100/投票者数) %>%
select(year,code,pref_city,inoue_ratio,exp_inoue_ratio,ldp_ratio) %>%
pivot_wider(names_from = year,
values_from = c(inoue_ratio,exp_inoue_ratio,ldp_ratio)) %>%
mutate(inoue_ratio_change=inoue_ratio_2022-inoue_ratio_2019,
exp_inoue_ratio_change=exp_inoue_ratio_2022-exp_inoue_ratio_2019,
ldp_ratio_change=ldp_ratio_2022-ldp_ratio_2019) %>%
dplyr::select(-inoue_ratio_2022,
-inoue_ratio_2019,
-exp_inoue_ratio_2022,
-exp_inoue_ratio_2019,
-ldp_ratio_2022,
-ldp_ratio_2019) %>%
left_join(church) %>%
mutate(uc=ifelse(is.na(uc),0,1)) %>%
left_join(read_csv("data/提出用/mun_data.csv") %>% # 各市区町村の「社会・人口統計体系」データ
select(-地域),
by=c("code"="area_code")) %>%
select_if(negate(anyNA)) %>% # NAを含む列を除外
select(-contains("(男)"), # 意味が重複する列を除外
-contains("(女)"),
-contains("(外国人)"),
-contains("その他")) %>%
dplyr::select(code,pref_city,uc,inoue_ratio_change,exp_inoue_ratio_change,
ldp_ratio_change,`A2301_住民基本台帳人口(総数)`,everything())
## Rows: 3792 Columns: 8
## ── Column specification ────────────────────────────────────────────────────────
## Delimiter: ","
## chr (2): code, pref_city
## dbl (6): year, 有権者数, 投票者数, 井上得票, 自民得票計, 自民_党_の得票
##
## ℹ Use `spec()` to retrieve the full column specification for this data.
## ℹ Specify the column types or set `show_col_types = FALSE` to quiet this message.
## Joining with `by = join_by(code)`
## Rows: 1917 Columns: 263
## ── Column specification ────────────────────────────────────────────────────────
## Delimiter: ","
## chr (2): area_code, 地域
## dbl (261): A2101_住民基本台帳人口(日本人), A210101_住民基本台帳人口(日本人)(男), A210102_住民基本台帳人口(日...
##
## ℹ Use `spec()` to retrieve the full column specification for this data.
## ℹ Specify the column types or set `show_col_types = FALSE` to quiet this message.
glimpse(inoue)
## Rows: 1,896
## Columns: 105
## $ code <chr> "011…
## $ pref_city <chr> "北…
## $ uc <dbl> 0, 1…
## $ inoue_ratio_change <dbl> 0.00…
## $ exp_inoue_ratio_change <dbl> -0.0…
## $ ldp_ratio_change <dbl> 1.77…
## $ `A2301_住民基本台帳人口(総数)` <dbl> 2381…
## $ `A2101_住民基本台帳人口(日本人)` <dbl> 2352…
## $ A4101_出生数 <dbl> 1560…
## $ A4200_死亡数 <dbl> 2177…
## $ `A5101_転入者数(日本人移動者)` <dbl> 2095…
## $ `A5102_転出者数(日本人移動者)` <dbl> 1782…
## $ A5103_転入者数 <dbl> 2145…
## $ A5104_転出者数 <dbl> 1835…
## $ `A7103_住民基本台帳世帯数(日本人)` <dbl> 1417…
## $ A9101_婚姻件数 <dbl> 1650…
## $ A9201_離婚件数 <dbl> 567,…
## $ `B1101_総面積(北方地域及び竹島を除く)` <dbl> 4642…
## $ `B1102_総面積(北方地域及び竹島を含む)` <dbl> 4642…
## $ B1103_可住地面積 <dbl> 2685…
## $ B1104_主要湖沼面積 <dbl> 0, 0…
## $ B1105_林野面積 <dbl> 2039…
## $ B1106_森林面積 <dbl> 2038…
## $ B1107_森林以外の草生地面積 <dbl> 1, 1…
## $ `C2109_事業所数(国・地方公共団体)(経済センサス‐基礎調査結果)` <dbl> 178,…
## $ `C310201_農家数(販売農家)` <dbl> 6, 6…
## $ `C310202_農家数(自給的農家)` <dbl> 4, 4…
## $ C3403_製造業事業所数 <dbl> 85, …
## $ C3404_製造業従業者数 <dbl> 1651…
## $ E1101_幼稚園数 <dbl> 14, …
## $ E1501_幼稚園在園者数 <dbl> 1677…
## $ E2101_小学校数 <dbl> 16, …
## $ E2401_小学校教員数 <dbl> 491,…
## $ E2501_小学校児童数 <dbl> 9719…
## $ E3101_中学校数 <dbl> 10, …
## $ E3401_中学校教員数 <dbl> 278,…
## $ E3501_中学校生徒数 <dbl> 4233…
## $ E3901_義務教育学校数 <dbl> 0, 0…
## $ E3902_義務教育学校前期課程学級数 <dbl> 0, 0…
## $ E3903_義務教育学校後期課程学級数 <dbl> 0, 0…
## $ E3904_義務教育学校教員数 <dbl> 0, 0…
## $ E3905_義務教育学校前期課程児童数 <dbl> 0, 0…
## $ E3906_義務教育学校後期課程生徒数 <dbl> 0, 0…
## $ E4101_高等学校数 <dbl> 8, 9…
## $ E4501_高等学校生徒数 <dbl> 6305…
## $ F1101_労働力人口 <dbl> 1088…
## $ F1102_就業者数 <dbl> 1037…
## $ `F1103_就業者数・主に仕事` <dbl> 8793…
## $ `F1104_就業者数・家事のほか仕事` <dbl> 1076…
## $ `F1105_就業者数・通学のかたわら仕事` <dbl> 2247…
## $ `F1106_就業者数・休業者` <dbl> 2765…
## $ F1107_完全失業者数 <dbl> 5099…
## $ F1108_非労働力人口 <dbl> 6551…
## $ `F1109_非労働力人口・家事` <dbl> 2549…
## $ `F1110_非労働力人口・通学` <dbl> 9619…
## $ `F2116_就業者数(65歳以上)` <dbl> 1198…
## $ F2201_第1次産業就業者数 <dbl> 303,…
## $ F2211_第2次産業就業者数 <dbl> 8534…
## $ F2221_第3次産業就業者数 <dbl> 9159…
## $ `F2401_雇用者数(国勢調査結果)` <dbl> 8373…
## $ F2402_役員数 <dbl> 8752…
## $ F2403_雇人のある業主数 <dbl> 2156…
## $ F2404_雇人のない業主数 <dbl> 5865…
## $ `F2405_家族従業者数(国勢調査結果)` <dbl> 1187…
## $ F2406_自営業主及び家族従業者数 <dbl> 9208…
## $ `F2409_雇用者数(正規の職員・従業員)` <dbl> 5665…
## $ `F2410_雇用者数(労働者派遣事業所の派遣社員)` <dbl> 3074…
## $ F2701_自市区町村で従業している就業者数 <dbl> 7283…
## $ F2702_県内他市区町村で従業している就業者数 <dbl> 2747…
## $ F2703_他県で従業している就業者数 <dbl> 260,…
## $ F2705_他市区町村への通勤者数 <dbl> 2773…
## $ F2801_従業地による就業者数 <dbl> 2470…
## $ F2802_他県に常住している就業者数 <dbl> 466,…
## $ F2803_他市区町村からの通勤者数 <dbl> 1710…
## $ G1201_公民館数 <dbl> 0, 0…
## $ G1401_図書館数 <dbl> 2, 1…
## $ H7701_テレビ放送受信契約数 <dbl> 1094…
## $ H770101_衛星放送受信契約数 <dbl> 6770…
## $ I5101_病院数 <dbl> 39, …
## $ I510110_精神科病院数 <dbl> 4, 5…
## $ I510120_一般病院数 <dbl> 35, …
## $ I510150_療養病床を有する病院数 <dbl> 10, …
## $ I5102_一般診療所数 <dbl> 371,…
## $ I510201_有床一般診療所数 <dbl> 26, …
## $ I5103_歯科診療所数 <dbl> 285,…
## $ I5211_病院病床数 <dbl> 8590…
## $ I5212_一般診療所病床数 <dbl> 264,…
## $ `I5511_介護老人保健施設数(基本票)` <dbl> 5, 7…
## $ `I5512_介護老人保健施設定員数(基本票)` <dbl> 491,…
## $ `J2221_保護施設数(基本票)(医療保護施設を除く)` <dbl> 0, 0…
## $ `J230127_介護老人福祉施設数(基本票)` <dbl> 6, 1…
## $ `J230128_介護老人福祉施設定員数(基本票)` <dbl> 513,…
## $ `J2304_老人福祉施設数(基本票)` <dbl> 4, 4…
## $ `J230411_養護老人ホーム数(基本票)` <dbl> 2, 0…
## $ `J230412_養護老人ホーム定員数(基本票)` <dbl> 130,…
## $ `J230421_有料老人ホーム数(基本票)` <dbl> 43, …
## $ `J230422_有料老人ホーム定員数(基本票)` <dbl> 2342…
## $ `J230431_軽費老人ホーム数(基本票)` <dbl> 1, 3…
## $ `J230432_軽費老人ホーム定員数(基本票)` <dbl> 100,…
## $ `J250204_児童福祉施設等数(基本票)` <dbl> 80, …
## $ `J250302_保育所等数(基本票)` <dbl> 38, …
## $ `J250303_公営保育所等数(基本票)` <dbl> 1, 4…
## $ `J2804_母子・父子福祉施設数(基本票)` <dbl> 2, 0…
## $ `J2905_障害者支援施設等数(基本票)` <dbl> 12, …
## $ `J2906_婦人保護施設数(基本票)` <dbl> 0, 0…
各変数を標準化したうえで、井上氏の得票率変化量を目的変数とした単回帰分析をして、それぞれの効果量を調べる。
# 得票率とUC有無以外のすべての説明変数を人口で割る
for(i in 8:105){
inoue[,i] <- inoue[,i]/inoue[,7]
}
# 井上氏の得票率変化量とUC有無以外のすべての変数を標準化
for(i in 5:105){
inoue[,i] <- inoue[,i] %>%
scale()
}
# 分析のためにデータフレーム形式に変える
inoue <- inoue %>%
as.data.frame()
# 各変数と井上氏の得票率変化量との単回帰分析をする
resFrame1<-data.frame() # forループのたびに上書きする一時的なデータフレーム
resFrame2<-data.frame() # 最終結果を書き込むデータフレーム
for(i in 5:105){
result <- summary(lm(inoue$inoue_ratio_change~inoue[,i]))
coef <- result$coefficients
resFrame1 <- coef # i番目の出力結果を代入
resFrame2 <- rbind(resFrame2,resFrame1) # resFrame2の末行にresFrame1を代入
}
効果量の大きい順に変数を並べると以下のようになる。
resFrame2 %>%
as_tibble() %>%
mutate(num=row_number()/2,
int=ifelse(str_sub(num,-2,-2)==".",0,1)) %>%
filter(int==1) %>%
select(-int) %>%
left_join(names(inoue) %>%
as_tibble() %>%
mutate(num=row_number()-4) %>%
filter(num>=1) %>%
rename(variable=value)) %>%
mutate(abs_estimate=abs(Estimate)) %>%
select(num,variable,everything()) %>%
arrange(desc(abs_estimate)) %>%
knitr::kable()
## Joining with `by = join_by(num)`
| num | variable | Estimate | Std. Error | t value | Pr(>|t|) | abs_estimate |
|---|---|---|---|---|---|---|
| 73 | H7701_テレビ放送受信契約数 | -0.0438120 | 0.0067474 | -6.4931276 | 0.0000000 | 0.0438120 |
| 11 | A7103_住民基本台帳世帯数(日本人) | -0.0344873 | 0.0067759 | -5.0896695 | 0.0000004 | 0.0344873 |
| 58 | F2403_雇人のある業主数 | -0.0312255 | 0.0067843 | -4.6026146 | 0.0000044 | 0.0312255 |
| 54 | F2211_第2次産業就業者数 | 0.0280497 | 0.0067916 | 4.1300541 | 0.0000378 | 0.0280497 |
| 74 | H770101_衛星放送受信契約数 | -0.0271988 | 0.0067934 | -4.0036895 | 0.0000648 | 0.0271988 |
| 5 | A4101_出生数 | 0.0265545 | 0.0067948 | 3.9080719 | 0.0000963 | 0.0265545 |
| 51 | F1110_非労働力人口・通学 | 0.0261241 | 0.0067957 | 3.8442263 | 0.0001249 | 0.0261241 |
| 1 | exp_inoue_ratio_change | -0.0251714 | 0.0067976 | -3.7029965 | 0.0002192 | 0.0251714 |
| 88 | J230128_介護老人福祉施設定員数(基本票) | -0.0251376 | 0.0067976 | -3.6980006 | 0.0002235 | 0.0251376 |
| 10 | A5104_転出者数 | -0.0234283 | 0.0068009 | -3.4449041 | 0.0005837 | 0.0234283 |
| 30 | E2501_小学校児童数 | 0.0233908 | 0.0068009 | 3.4393573 | 0.0005957 | 0.0233908 |
| 8 | A5102_転出者数(日本人移動者) | -0.0221734 | 0.0068031 | -3.2593279 | 0.0011366 | 0.0221734 |
| 67 | F2705_他市区町村への通勤者数 | 0.0216796 | 0.0068039 | 3.1863491 | 0.0014643 | 0.0216796 |
| 65 | F2702_県内他市区町村で従業している就業者数 | 0.0216616 | 0.0068039 | 3.1836868 | 0.0014777 | 0.0216616 |
| 6 | A4200_死亡数 | -0.0208530 | 0.0068053 | -3.0642363 | 0.0022130 | 0.0208530 |
| 3 | A2301_住民基本台帳人口(総数) | 0.0205608 | 0.0068057 | 3.0211013 | 0.0025523 | 0.0205608 |
| 16 | B1103_可住地面積 | -0.0203284 | 0.0068061 | -2.9867843 | 0.0028555 | 0.0203284 |
| 64 | F2701_自市区町村で従業している就業者数 | -0.0201710 | 0.0068064 | -2.9635530 | 0.0030790 | 0.0201710 |
| 85 | I5512_介護老人保健施設定員数(基本票) | -0.0201636 | 0.0068064 | -2.9624560 | 0.0030900 | 0.0201636 |
| 33 | E3501_中学校生徒数 | 0.0199719 | 0.0068067 | 2.9341615 | 0.0033847 | 0.0199719 |
| 21 | C2109_事業所数(国・地方公共団体)(経済センサス‐基礎調査結果) | -0.0193451 | 0.0068076 | -2.8416816 | 0.0045357 | 0.0193451 |
| 25 | C3404_製造業従業者数 | 0.0191186 | 0.0068080 | 2.8082732 | 0.0050319 | 0.0191186 |
| 87 | J230127_介護老人福祉施設数(基本票) | -0.0185773 | 0.0068088 | -2.7284404 | 0.0064223 | 0.0185773 |
| 15 | B1102_総面積(北方地域及び竹島を含む) | -0.0185752 | 0.0068088 | -2.7281357 | 0.0064282 | 0.0185752 |
| 14 | B1101_総面積(北方地域及び竹島を除く) | -0.0185647 | 0.0068088 | -2.7265875 | 0.0064583 | 0.0185647 |
| 61 | F2406_自営業主及び家族従業者数 | -0.0182216 | 0.0068093 | -2.6760066 | 0.0075147 | 0.0182216 |
| 95 | J230432_軽費老人ホーム定員数(基本票) | 0.0181220 | 0.0068094 | 2.6613200 | 0.0078493 | 0.0181220 |
| 60 | F2405_家族従業者数(国勢調査結果) | -0.0177122 | 0.0068100 | -2.6009188 | 0.0093698 | 0.0177122 |
| 23 | C310202_農家数(自給的農家) | 0.0176357 | 0.0068101 | 2.5896446 | 0.0096811 | 0.0176357 |
| 28 | E2101_小学校数 | -0.0174986 | 0.0068103 | -2.5694459 | 0.0102620 | 0.0174986 |
| 53 | F2201_第1次産業就業者数 | -0.0174842 | 0.0068103 | -2.5673235 | 0.0103248 | 0.0174842 |
| 18 | B1105_林野面積 | -0.0172838 | 0.0068106 | -2.5377911 | 0.0112350 | 0.0172838 |
| 20 | B1107_森林以外の草生地面積 | -0.0169612 | 0.0068110 | -2.4902657 | 0.0128499 | 0.0169612 |
| 19 | B1106_森林面積 | -0.0168347 | 0.0068111 | -2.4716402 | 0.0135368 | 0.0168347 |
| 52 | F2116_就業者数(65歳以上) | -0.0165184 | 0.0068116 | -2.4250547 | 0.0153990 | 0.0165184 |
| 62 | F2409_雇用者数(正規の職員・従業員) | 0.0163157 | 0.0068118 | 2.3952032 | 0.0167078 | 0.0163157 |
| 84 | I5511_介護老人保健施設数(基本票) | -0.0158665 | 0.0068124 | -2.3290672 | 0.0199602 | 0.0158665 |
| 98 | J250303_公営保育所等数(基本票) | -0.0158038 | 0.0068125 | -2.3198453 | 0.0204551 | 0.0158038 |
| 83 | I5212_一般診療所病床数 | -0.0154813 | 0.0068128 | -2.2723658 | 0.0231761 | 0.0154813 |
| 29 | E2401_小学校教員数 | -0.0153856 | 0.0068130 | -2.2582834 | 0.0240414 | 0.0153856 |
| 27 | E1501_幼稚園在園者数 | 0.0150361 | 0.0068134 | 2.2068487 | 0.0274442 | 0.0150361 |
| 56 | F2401_雇用者数(国勢調査結果) | 0.0142447 | 0.0068143 | 2.0904178 | 0.0367133 | 0.0142447 |
| 94 | J230431_軽費老人ホーム数(基本票) | 0.0134095 | 0.0068152 | 1.9675919 | 0.0492607 | 0.0134095 |
| 99 | J2804_母子・父子福祉施設数(基本票) | 0.0133887 | 0.0068152 | 1.9645433 | 0.0496131 | 0.0133887 |
| 63 | F2410_雇用者数(労働者派遣事業所の派遣社員) | 0.0133843 | 0.0068152 | 1.9638904 | 0.0496889 | 0.0133843 |
| 89 | J2304_老人福祉施設数(基本票) | 0.0123567 | 0.0068162 | 1.8128385 | 0.0700150 | 0.0123567 |
| 40 | E4101_高等学校数 | -0.0123261 | 0.0068162 | -1.8083432 | 0.0707117 | 0.0123261 |
| 57 | F2402_役員数 | -0.0122691 | 0.0068163 | -1.7999659 | 0.0720251 | 0.0122691 |
| 49 | F1108_非労働力人口 | -0.0120455 | 0.0068165 | -1.7671079 | 0.0773712 | 0.0120455 |
| 82 | I5211_病院病床数 | 0.0120096 | 0.0068165 | 1.7618278 | 0.0782597 | 0.0120096 |
| 55 | F2221_第3次産業就業者数 | -0.0117624 | 0.0068168 | -1.7255163 | 0.0845976 | 0.0117624 |
| 24 | C3403_製造業事業所数 | 0.0117517 | 0.0068168 | 1.7239426 | 0.0848814 | 0.0117517 |
| 32 | E3401_中学校教員数 | -0.0110308 | 0.0068174 | -1.6180300 | 0.1058226 | 0.0110308 |
| 68 | F2801_従業地による就業者数 | -0.0107887 | 0.0068176 | -1.5824796 | 0.1137071 | 0.0107887 |
| 46 | F1105_就業者数・通学のかたわら仕事 | 0.0107674 | 0.0068176 | 1.5793448 | 0.1144240 | 0.0107674 |
| 31 | E3101_中学校数 | -0.0106863 | 0.0068177 | -1.5674378 | 0.1171794 | 0.0106863 |
| 59 | F2404_雇人のない業主数 | -0.0102719 | 0.0068180 | -1.5065799 | 0.1320851 | 0.0102719 |
| 97 | J250302_保育所等数(基本票) | -0.0102150 | 0.0068181 | -1.4982230 | 0.1342420 | 0.0102150 |
| 7 | A5101_転入者数(日本人移動者) | -0.0095574 | 0.0068186 | -1.4016648 | 0.1611792 | 0.0095574 |
| 9 | A5103_転入者数 | -0.0095374 | 0.0068186 | -1.3987274 | 0.1620585 | 0.0095374 |
| 72 | G1401_図書館数 | 0.0088796 | 0.0068191 | 1.3021686 | 0.1930171 | 0.0088796 |
| 45 | F1104_就業者数・家事のほか仕事 | -0.0088695 | 0.0068191 | -1.3006915 | 0.1935223 | 0.0088695 |
| 12 | A9101_婚姻件数 | 0.0083544 | 0.0068194 | 1.2250869 | 0.2206948 | 0.0083544 |
| 71 | G1201_公民館数 | 0.0082674 | 0.0068195 | 1.2123160 | 0.2255426 | 0.0082674 |
| 96 | J250204_児童福祉施設等数(基本票) | -0.0082506 | 0.0068195 | -1.2098607 | 0.2264833 | 0.0082506 |
| 90 | J230411_養護老人ホーム数(基本票) | 0.0081618 | 0.0068195 | 1.1968292 | 0.2315229 | 0.0081618 |
| 17 | B1104_主要湖沼面積 | -0.0081448 | 0.0068196 | -1.1943260 | 0.2325000 | 0.0081448 |
| 80 | I510201_有床一般診療所数 | -0.0076444 | 0.0068199 | -1.1209064 | 0.2624698 | 0.0076444 |
| 2 | ldp_ratio_change | -0.0073203 | 0.0068201 | -1.0733531 | 0.2832495 | 0.0073203 |
| 76 | I510110_精神科病院数 | 0.0070016 | 0.0068202 | 1.0265957 | 0.3047420 | 0.0070016 |
| 79 | I5102_一般診療所数 | -0.0067542 | 0.0068204 | -0.9902992 | 0.3221544 | 0.0067542 |
| 81 | I5103_歯科診療所数 | -0.0065236 | 0.0068205 | -0.9564794 | 0.3389522 | 0.0065236 |
| 93 | J230422_有料老人ホーム定員数(基本票) | -0.0063223 | 0.0068206 | -0.9269494 | 0.3540709 | 0.0063223 |
| 78 | I510150_療養病床を有する病院数 | 0.0063174 | 0.0068206 | 0.9262267 | 0.3544462 | 0.0063174 |
| 69 | F2802_他県に常住している就業者数 | -0.0062431 | 0.0068206 | -0.9153257 | 0.3601372 | 0.0062431 |
| 47 | F1106_就業者数・休業者 | -0.0061459 | 0.0068207 | -0.9010641 | 0.3676688 | 0.0061459 |
| 91 | J230412_養護老人ホーム定員数(基本票) | 0.0059050 | 0.0068208 | 0.8657396 | 0.3867426 | 0.0059050 |
| 36 | E3903_義務教育学校後期課程学級数 | -0.0049706 | 0.0068212 | -0.7287078 | 0.4662705 | 0.0049706 |
| 13 | A9201_離婚件数 | -0.0048021 | 0.0068212 | -0.7039948 | 0.4815226 | 0.0048021 |
| 34 | E3901_義務教育学校数 | -0.0047784 | 0.0068212 | -0.7005220 | 0.4836874 | 0.0047784 |
| 4 | A2101_住民基本台帳人口(日本人) | -0.0046982 | 0.0068213 | -0.6887547 | 0.4910620 | 0.0046982 |
| 70 | F2803_他市区町村からの通勤者数 | -0.0046321 | 0.0068213 | -0.6790653 | 0.4971795 | 0.0046321 |
| 92 | J230421_有料老人ホーム数(基本票) | 0.0044267 | 0.0068214 | 0.6489474 | 0.5164511 | 0.0044267 |
| 37 | E3904_義務教育学校教員数 | -0.0041806 | 0.0068214 | -0.6128586 | 0.5400434 | 0.0041806 |
| 22 | C310201_農家数(販売農家) | 0.0038978 | 0.0068215 | 0.5713973 | 0.5677981 | 0.0038978 |
| 39 | E3906_義務教育学校後期課程生徒数 | -0.0037786 | 0.0068216 | -0.5539129 | 0.5797038 | 0.0037786 |
| 38 | E3905_義務教育学校前期課程児童数 | -0.0037783 | 0.0068216 | -0.5538749 | 0.5797299 | 0.0037783 |
| 66 | F2703_他県で従業している就業者数 | 0.0037620 | 0.0068216 | 0.5514856 | 0.5813659 | 0.0037620 |
| 35 | E3902_義務教育学校前期課程学級数 | -0.0036613 | 0.0068216 | -0.5367275 | 0.5915189 | 0.0036613 |
| 101 | J2906_婦人保護施設数(基本票) | 0.0034579 | 0.0068217 | 0.5068994 | 0.6122844 | 0.0034579 |
| 100 | J2905_障害者支援施設等数(基本票) | -0.0033062 | 0.0068217 | -0.4846526 | 0.6279788 | 0.0033062 |
| 26 | E1101_幼稚園数 | 0.0032439 | 0.0068217 | 0.4755188 | 0.6344721 | 0.0032439 |
| 42 | F1101_労働力人口 | -0.0031255 | 0.0068217 | -0.4581673 | 0.6468848 | 0.0031255 |
| 43 | F1102_就業者数 | -0.0028581 | 0.0068218 | -0.4189663 | 0.6752882 | 0.0028581 |
| 77 | I510120_一般病院数 | -0.0022168 | 0.0068219 | -0.3249564 | 0.7452500 | 0.0022168 |
| 48 | F1107_完全失業者数 | -0.0021213 | 0.0068220 | -0.3109486 | 0.7558739 | 0.0021213 |
| 44 | F1103_就業者数・主に仕事 | -0.0015716 | 0.0068220 | -0.2303774 | 0.8178234 | 0.0015716 |
| 41 | E4501_高等学校生徒数 | 0.0013567 | 0.0068221 | 0.1988688 | 0.8423868 | 0.0013567 |
| 50 | F1109_非労働力人口・家事 | -0.0006041 | 0.0068221 | -0.0885447 | 0.9294531 | 0.0006041 |
| 86 | J2221_保護施設数(基本票)(医療保護施設を除く) | 0.0005347 | 0.0068221 | 0.0783794 | 0.9375345 | 0.0005347 |
| 75 | I5101_病院数 | -0.0000993 | 0.0068221 | -0.0145578 | 0.9883865 | 0.0000993 |
以下の3モデルのそれぞれについて、最近傍マッチングと遺伝的マッチングを行う。つまり計6パターンのマッチングをする。
まずは最近傍マッチングをする。
# 各モデルで使う変数を指定する
varsA <- c("exp_inoue_ratio_change",
"`A2301_住民基本台帳人口(総数)`",
"`A2101_住民基本台帳人口(日本人)`",
"`A4101_出生数`",
"`A4200_死亡数`",
"`A5101_転入者数(日本人移動者)`",
"`A5102_転出者数(日本人移動者)`",
"`A5103_転入者数`",
"`A5104_転出者数`",
"`A7103_住民基本台帳世帯数(日本人)`",
"`A9101_婚姻件数`",
"`A9201_離婚件数`",
"`B1101_総面積(北方地域及び竹島を除く)`",
"`B1102_総面積(北方地域及び竹島を含む)`",
"`B1103_可住地面積`",
"`B1104_主要湖沼面積`",
"`B1105_林野面積`",
"`B1106_森林面積`",
"`B1107_森林以外の草生地面積`",
"`C2109_事業所数(国・地方公共団体)(経済センサス‐基礎調査結果)`",
"`C310201_農家数(販売農家)`",
"`C310202_農家数(自給的農家)`",
"`C3403_製造業事業所数`",
"`C3404_製造業従業者数`",
"`E1101_幼稚園数`",
"`E1501_幼稚園在園者数`",
"`E2101_小学校数`",
"`E2401_小学校教員数`",
"`E2501_小学校児童数`",
"`E3101_中学校数`",
"`E3401_中学校教員数`",
"`E3501_中学校生徒数`",
"`E3901_義務教育学校数`",
"`E3902_義務教育学校前期課程学級数`",
"`E3903_義務教育学校後期課程学級数`",
"`E3904_義務教育学校教員数`",
"`E3905_義務教育学校前期課程児童数`",
"`E3906_義務教育学校後期課程生徒数`",
"`E4101_高等学校数`",
"`E4501_高等学校生徒数`",
"`F1101_労働力人口`",
"`F1102_就業者数`",
"`F1103_就業者数・主に仕事`",
"`F1104_就業者数・家事のほか仕事`",
"`F1105_就業者数・通学のかたわら仕事`",
"`F1106_就業者数・休業者`",
"`F1107_完全失業者数`",
"`F1108_非労働力人口`",
"`F1109_非労働力人口・家事`",
"`F1110_非労働力人口・通学`",
"`F2116_就業者数(65歳以上)`",
"`F2201_第1次産業就業者数`",
"`F2211_第2次産業就業者数`",
"`F2221_第3次産業就業者数`",
"`F2401_雇用者数(国勢調査結果)`",
"`F2402_役員数`",
"`F2403_雇人のある業主数`",
"`F2404_雇人のない業主数`",
"`F2405_家族従業者数(国勢調査結果)`",
"`F2406_自営業主及び家族従業者数`",
"`F2409_雇用者数(正規の職員・従業員)`",
"`F2410_雇用者数(労働者派遣事業所の派遣社員)`",
"`F2701_自市区町村で従業している就業者数`",
"`F2702_県内他市区町村で従業している就業者数`",
"`F2703_他県で従業している就業者数`",
"`F2705_他市区町村への通勤者数`",
"`F2801_従業地による就業者数`",
"`F2802_他県に常住している就業者数`",
"`F2803_他市区町村からの通勤者数`",
"`G1201_公民館数`",
"`G1401_図書館数`",
"`H7701_テレビ放送受信契約数`",
"`H770101_衛星放送受信契約数`",
"`I5101_病院数`",
"`I510110_精神科病院数`",
"`I510120_一般病院数`",
"`I510150_療養病床を有する病院数`",
"`I5102_一般診療所数`",
"`I510201_有床一般診療所数`",
"`I5103_歯科診療所数`",
"`I5211_病院病床数`",
"`I5212_一般診療所病床数`",
"`I5511_介護老人保健施設数(基本票)`",
"`I5512_介護老人保健施設定員数(基本票)`",
"`J2221_保護施設数(基本票)(医療保護施設を除く)`",
"`J230127_介護老人福祉施設数(基本票)`",
"`J230128_介護老人福祉施設定員数(基本票)`",
"`J2304_老人福祉施設数(基本票)`",
"`J230411_養護老人ホーム数(基本票)`",
"`J230412_養護老人ホーム定員数(基本票)`",
"`J230421_有料老人ホーム数(基本票)`",
"`J230422_有料老人ホーム定員数(基本票)`",
"`J230431_軽費老人ホーム数(基本票)`",
"`J230432_軽費老人ホーム定員数(基本票)`",
"`J250204_児童福祉施設等数(基本票)`",
"`J250302_保育所等数(基本票)`",
"`J250303_公営保育所等数(基本票)`",
"`J2804_母子・父子福祉施設数(基本票)`",
"`J2905_障害者支援施設等数(基本票)`",
"`J2906_婦人保護施設数(基本票)`")
varsB <- c("exp_inoue_ratio_change",
"`A4101_出生数`",
"`A5104_転出者数`",
"`A7103_住民基本台帳世帯数(日本人)`",
"`E2501_小学校児童数`",
"`F1110_非労働力人口・通学`",
"`F2211_第2次産業就業者数`",
"`F2403_雇人のある業主数`",
"`H7701_テレビ放送受信契約数`",
"`H770101_衛星放送受信契約数`",
"`J230128_介護老人福祉施設定員数(基本票)`")
varsC <- c("exp_inoue_ratio_change",
"`A7103_住民基本台帳世帯数(日本人)`",
"`B1103_可住地面積`",
"`C2109_事業所数(国・地方公共団体)(経済センサス‐基礎調査結果)`",
"`E2501_小学校児童数`",
"`F2403_雇人のある業主数`",
"`G1401_図書館数`",
"`H7701_テレビ放送受信契約数`",
"`I5512_介護老人保健施設定員数(基本票)`",
"`J230128_介護老人福祉施設定員数(基本票)`")
# モデルAの最近傍マッチング
model_a_n <- matchit(as.formula(paste("uc ~", paste(varsA, collapse = " + "))),
mehod = "nearest",
distance = "mahalanobis",
data=inoue)
# モデルBの最近傍マッチング
model_b_n <- matchit(as.formula(paste("uc ~", paste(varsB, collapse = " + "))),
mehod = "nearest",
distance = "mahalanobis",
data=inoue)
# モデルCの最近傍マッチング
model_c_n <- matchit(as.formula(paste("uc ~", paste(varsC, collapse = " + "))),
mehod = "nearest",
distance = "mahalanobis",
data=inoue)
次に遺伝的マッチングをする。コードはチャンクの中に埋め込んでいるが、チャンクの中身を表示すると、膨大な計算の途中経過まで出力されてしまうため、やむを得ず非表示にしてある。マッチングのための様々なパラメータは以下の通り。
method = “genetic”,
distance = “mahalanobis”,
pop.size = 1000,
nboots = 1000,
replace = TRUE,
verbose = TRUE,
estimand = “ATT”
共変量のバランスを確かめる。いずれのモデルでも遺伝的マッチングのほうがAbsolute Standardized Mean Differencesの平均値が小さくなる。つまり、よりよいマッチングができている。
# モデルA、最近傍
balance_a_n <- bal.tab(model_a_n,un=TRUE)
balance_a_n$Balance %>%
as_tibble() %>%
mutate(un_abs_mean_dif=abs(Diff.Un),
adj_abs_mean_dif=abs(Diff.Adj)) %>%
summarize(mean(un_abs_mean_dif),
mean(adj_abs_mean_dif))
## # A tibble: 1 × 2
## `mean(un_abs_mean_dif)` `mean(adj_abs_mean_dif)`
## <dbl> <dbl>
## 1 1.26 0.151
# モデルA、遺伝的
balance_a_g <- bal.tab(model_a_g,un=TRUE)
balance_a_g$Balance %>%
as_tibble() %>%
mutate(un_abs_mean_dif=abs(Diff.Un),
adj_abs_mean_dif=abs(Diff.Adj)) %>%
summarize(mean(un_abs_mean_dif),
mean(adj_abs_mean_dif))
## # A tibble: 1 × 2
## `mean(un_abs_mean_dif)` `mean(adj_abs_mean_dif)`
## <dbl> <dbl>
## 1 1.26 0.118
# モデルB、最近傍
balance_b_n <- bal.tab(model_b_n,un=TRUE)
balance_b_n$Balance %>%
as_tibble() %>%
mutate(un_abs_mean_dif=abs(Diff.Un),
adj_abs_mean_dif=abs(Diff.Adj)) %>%
summarize(mean(un_abs_mean_dif),
mean(adj_abs_mean_dif))
## # A tibble: 1 × 2
## `mean(un_abs_mean_dif)` `mean(adj_abs_mean_dif)`
## <dbl> <dbl>
## 1 0.723 0.122
# モデルB、遺伝的
balance_b_g <- bal.tab(model_b_g,un=TRUE)
balance_b_g$Balance %>%
as_tibble() %>%
mutate(un_abs_mean_dif=abs(Diff.Un),
adj_abs_mean_dif=abs(Diff.Adj)) %>%
summarize(mean(un_abs_mean_dif),
mean(adj_abs_mean_dif))
## # A tibble: 1 × 2
## `mean(un_abs_mean_dif)` `mean(adj_abs_mean_dif)`
## <dbl> <dbl>
## 1 0.723 0.0456
# モデルC、最近傍
balance_c_n <- bal.tab(model_c_n,un=TRUE)
balance_c_n$Balance %>%
as_tibble() %>%
mutate(un_abs_mean_dif=abs(Diff.Un),
adj_abs_mean_dif=abs(Diff.Adj)) %>%
summarize(mean(un_abs_mean_dif),
mean(adj_abs_mean_dif))
## # A tibble: 1 × 2
## `mean(un_abs_mean_dif)` `mean(adj_abs_mean_dif)`
## <dbl> <dbl>
## 1 1.79 0.127
# モデルC、遺伝的
balance_c_g <- bal.tab(model_c_g,un=TRUE)
balance_c_g$Balance %>%
as_tibble() %>%
mutate(un_abs_mean_dif=abs(Diff.Un),
adj_abs_mean_dif=abs(Diff.Adj)) %>%
summarize(mean(un_abs_mean_dif),
mean(adj_abs_mean_dif))
## # A tibble: 1 × 2
## `mean(un_abs_mean_dif)` `mean(adj_abs_mean_dif)`
## <dbl> <dbl>
## 1 1.79 0.0441
マッチングした市区町村を比べ、教団施設の有無によって井上氏の得票率変化量がどれだけ変わるかを見てみる。いずれのモデル、マッチング法でも0.07%ポイント前後で、有意な値となっている。
# モデルA、最近傍
data_a_n <- get_matches(model_a_n) %>%
as_tibble() %>%
left_join(read_csv("data/提出用/votes.csv") %>%
filter(year==2022) %>%
dplyr::select(code,投票者数))
## Rows: 3792 Columns: 8
## ── Column specification ────────────────────────────────────────────────────────
## Delimiter: ","
## chr (2): code, pref_city
## dbl (6): year, 有権者数, 投票者数, 井上得票, 自民得票計, 自民_党_の得票
##
## ℹ Use `spec()` to retrieve the full column specification for this data.
## ℹ Specify the column types or set `show_col_types = FALSE` to quiet this message.
## Joining with `by = join_by(code)`
summary(lm(inoue_ratio_change ~ uc, data = data_a_n, weights = 投票者数))
##
## Call:
## lm(formula = inoue_ratio_change ~ uc, data = data_a_n, weights = 投票者数)
##
## Weighted Residuals:
## Min 1Q Median 3Q Max
## -452.28 -16.68 -0.52 19.20 221.42
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 0.10751 0.01098 9.788 < 2e-16 ***
## uc 0.06556 0.01388 4.724 2.98e-06 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 41.41 on 516 degrees of freedom
## Multiple R-squared: 0.04146, Adjusted R-squared: 0.0396
## F-statistic: 22.32 on 1 and 516 DF, p-value: 2.985e-06
confint(lm(inoue_ratio_change ~ uc, data = data_a_n, weights = 投票者数))
## 2.5 % 97.5 %
## (Intercept) 0.08592909 0.12908308
## uc 0.03829490 0.09282246
# モデルA、遺伝的
data_a_g <- get_matches(model_a_g) %>%
as_tibble() %>%
left_join(read_csv("data/提出用/votes.csv") %>%
filter(year==2022) %>%
dplyr::select(code,投票者数))
## Rows: 3792 Columns: 8
## ── Column specification ────────────────────────────────────────────────────────
## Delimiter: ","
## chr (2): code, pref_city
## dbl (6): year, 有権者数, 投票者数, 井上得票, 自民得票計, 自民_党_の得票
##
## ℹ Use `spec()` to retrieve the full column specification for this data.
## ℹ Specify the column types or set `show_col_types = FALSE` to quiet this message.
## Joining with `by = join_by(code)`
summary(lm(inoue_ratio_change ~ uc, data = data_a_g, weights = 投票者数))
##
## Call:
## lm(formula = inoue_ratio_change ~ uc, data = data_a_g, weights = 投票者数)
##
## Weighted Residuals:
## Min 1Q Median 3Q Max
## -452.28 -18.85 -2.13 20.28 221.42
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 0.11446 0.01086 10.535 < 2e-16 ***
## uc 0.05861 0.01412 4.151 3.88e-05 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 44.03 on 516 degrees of freedom
## Multiple R-squared: 0.03231, Adjusted R-squared: 0.03043
## F-statistic: 17.23 on 1 and 516 DF, p-value: 3.88e-05
confint(lm(inoue_ratio_change ~ uc, data = data_a_g, weights = 投票者数))
## 2.5 % 97.5 %
## (Intercept) 0.09311206 0.13580107
## uc 0.03086718 0.08634922
# モデルB、最近傍
data_b_n <- get_matches(model_b_n) %>%
as_tibble() %>%
left_join(read_csv("data/提出用/votes.csv") %>%
filter(year==2022) %>%
dplyr::select(code,投票者数))
## Rows: 3792 Columns: 8
## ── Column specification ────────────────────────────────────────────────────────
## Delimiter: ","
## chr (2): code, pref_city
## dbl (6): year, 有権者数, 投票者数, 井上得票, 自民得票計, 自民_党_の得票
##
## ℹ Use `spec()` to retrieve the full column specification for this data.
## ℹ Specify the column types or set `show_col_types = FALSE` to quiet this message.
## Joining with `by = join_by(code)`
summary(lm(inoue_ratio_change ~ uc, data = data_b_n, weights = 投票者数))
##
## Call:
## lm(formula = inoue_ratio_change ~ uc, data = data_b_n, weights = 投票者数)
##
## Weighted Residuals:
## Min 1Q Median 3Q Max
## -452.28 -13.89 -0.32 18.79 221.42
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 0.09898 0.01228 8.064 5.20e-15 ***
## uc 0.07408 0.01498 4.946 1.03e-06 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 41.9 on 516 degrees of freedom
## Multiple R-squared: 0.04526, Adjusted R-squared: 0.04341
## F-statistic: 24.46 on 1 and 516 DF, p-value: 1.026e-06
confint(lm(inoue_ratio_change ~ uc, data = data_b_n, weights = 投票者数))
## 2.5 % 97.5 %
## (Intercept) 0.07486919 0.1230994
## uc 0.04465560 0.1035053
# モデルB、遺伝的
data_b_g <- get_matches(model_b_g) %>%
as_tibble() %>%
left_join(read_csv("data/提出用/votes.csv") %>%
filter(year==2022) %>%
dplyr::select(code,投票者数))
## Rows: 3792 Columns: 8
## ── Column specification ────────────────────────────────────────────────────────
## Delimiter: ","
## chr (2): code, pref_city
## dbl (6): year, 有権者数, 投票者数, 井上得票, 自民得票計, 自民_党_の得票
##
## ℹ Use `spec()` to retrieve the full column specification for this data.
## ℹ Specify the column types or set `show_col_types = FALSE` to quiet this message.
## Joining with `by = join_by(code)`
summary(lm(inoue_ratio_change ~ uc, data = data_b_g, weights = 投票者数))
##
## Call:
## lm(formula = inoue_ratio_change ~ uc, data = data_b_g, weights = 投票者数)
##
## Weighted Residuals:
## Min 1Q Median 3Q Max
## -452.28 -14.22 -1.10 19.77 221.42
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 0.10507 0.01133 9.277 < 2e-16 ***
## uc 0.06799 0.01418 4.795 2.14e-06 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 41.66 on 516 degrees of freedom
## Multiple R-squared: 0.04265, Adjusted R-squared: 0.04079
## F-statistic: 22.99 on 1 and 516 DF, p-value: 2.136e-06
confint(lm(inoue_ratio_change ~ uc, data = data_b_g, weights = 投票者数))
## 2.5 % 97.5 %
## (Intercept) 0.08282280 0.12732505
## uc 0.04013147 0.09585021
# モデルC、最近傍
data_c_n <- get_matches(model_c_n) %>%
as_tibble() %>%
left_join(read_csv("data/提出用/votes.csv") %>%
filter(year==2022) %>%
dplyr::select(code,投票者数))
## Rows: 3792 Columns: 8
## ── Column specification ────────────────────────────────────────────────────────
## Delimiter: ","
## chr (2): code, pref_city
## dbl (6): year, 有権者数, 投票者数, 井上得票, 自民得票計, 自民_党_の得票
##
## ℹ Use `spec()` to retrieve the full column specification for this data.
## ℹ Specify the column types or set `show_col_types = FALSE` to quiet this message.
## Joining with `by = join_by(code)`
summary(lm(inoue_ratio_change ~ uc, data = data_c_n, weights = 投票者数))
##
## Call:
## lm(formula = inoue_ratio_change ~ uc, data = data_c_n, weights = 投票者数)
##
## Weighted Residuals:
## Min 1Q Median 3Q Max
## -452.28 -14.49 0.10 18.12 221.42
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 0.10120 0.01202 8.420 3.74e-16 ***
## uc 0.07186 0.01475 4.871 1.48e-06 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 41.75 on 516 degrees of freedom
## Multiple R-squared: 0.04397, Adjusted R-squared: 0.04212
## F-statistic: 23.73 on 1 and 516 DF, p-value: 1.476e-06
confint(lm(inoue_ratio_change ~ uc, data = data_c_n, weights = 投票者数))
## 2.5 % 97.5 %
## (Intercept) 0.07758941 0.1248145
## uc 0.04288199 0.1008436
# モデルC、遺伝的
data_c_g <- get_matches(model_c_g) %>%
as_tibble() %>%
left_join(read_csv("data/提出用/votes.csv") %>%
filter(year==2022) %>%
dplyr::select(code,投票者数))
## Rows: 3792 Columns: 8
## ── Column specification ────────────────────────────────────────────────────────
## Delimiter: ","
## chr (2): code, pref_city
## dbl (6): year, 有権者数, 投票者数, 井上得票, 自民得票計, 自民_党_の得票
##
## ℹ Use `spec()` to retrieve the full column specification for this data.
## ℹ Specify the column types or set `show_col_types = FALSE` to quiet this message.
## Joining with `by = join_by(code)`
summary(lm(inoue_ratio_change ~ uc, data = data_c_g, weights = 投票者数))
##
## Call:
## lm(formula = inoue_ratio_change ~ uc, data = data_c_g, weights = 投票者数)
##
## Weighted Residuals:
## Min 1Q Median 3Q Max
## -452.28 -16.70 0.09 20.28 221.42
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 0.09917 0.01198 8.28 1.06e-15 ***
## uc 0.07389 0.01484 4.98 8.69e-07 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 42.76 on 516 degrees of freedom
## Multiple R-squared: 0.04586, Adjusted R-squared: 0.04401
## F-statistic: 24.8 on 1 and 516 DF, p-value: 8.692e-07
confint(lm(inoue_ratio_change ~ uc, data = data_c_g, weights = 投票者数))
## 2.5 % 97.5 %
## (Intercept) 0.07564407 0.1227052
## uc 0.04474013 0.1030401
モデルAの遺伝的マッチングを例に、共変量のバランスがマッチングによって大幅に改善されていることを確認する。
love.plot(model_a_g,
threshold = 0.1,
abs = TRUE,
colors=c("black","black"),
shapes = c("triangle filled", "circle filled"),
sample.names = c("マッチングなし","マッチングあり"),
title="Figure1 共変量のバランス(モデルA、遺伝的)") +
theme(legend.position = c(0.8, 0.05),
axis.text.y = element_text(size = 6)) # 縦軸のテキストサイズを小さくする
## Warning: Large mean differences detected; you may not be using standardized
## mean differences for continuous variables.
## Warning: A numeric `legend.position` argument in `theme()` was deprecated in ggplot2
## 3.5.0.
## ℹ Please use the `legend.position.inside` argument of `theme()` instead.
## This warning is displayed once every 8 hours.
## Call `lifecycle::last_lifecycle_warnings()` to see where this warning was
## generated.

モデルAで遺伝的マッチングをした各市区町村のペアをみると、教団施設のある自治体のほうが、ない自治体より井上氏の得票率増え幅が大きいケースが多い。
data_a_g %>%
select(subclass, uc, inoue_ratio_change, 投票者数) %>%
group_by(subclass) %>%
mutate(mean_vote = mean(投票者数)) %>%
select(subclass, uc, inoue_ratio_change, mean_vote) %>%
pivot_wider(names_from = uc, values_from = inoue_ratio_change) %>%
rename(平均投票者数 = mean_vote, 教団施設あり = `1`, 教団施設なし = `0`) %>%
ggplot(aes(x = 教団施設なし, y = 教団施設あり, size = 平均投票者数)) +
geom_point(alpha = .1) +
geom_abline(slope = 1, intercept = 0) +
scale_size_continuous(breaks = c(10000, 50000, 100000),
labels = c("10,000", "50,000", "100,000")) +
scale_x_continuous(breaks = seq(-0.3,0.7,by=0.2)) +
scale_y_continuous(breaks = seq(-1.5,2, by = 0.2)) +
theme(legend.title = element_text(size = 12),
legend.text = element_text(size = 10)) +
labs(title = "マッチングした各自治体での得票率変化量",
subtitle = "%ポイント。教団施設「あり」のほうが「なし」を上回るケースが多い")

DID分析をする。
inoue2019_2022 <- read_csv("data/提出用/votes.csv") %>%
select(-自民_党_の得票) %>%
left_join(church)
## Rows: 3792 Columns: 8
## ── Column specification ────────────────────────────────────────────────────────
## Delimiter: ","
## chr (2): code, pref_city
## dbl (6): year, 有権者数, 投票者数, 井上得票, 自民得票計, 自民_党_の得票
##
## ℹ Use `spec()` to retrieve the full column specification for this data.
## ℹ Specify the column types or set `show_col_types = FALSE` to quiet this message.
## Joining with `by = join_by(code)`
did <- inoue2019_2022 %>%
mutate(inoue_ratio=井上得票*100/投票者数,
exp_inoue_ratio=(自民得票計-井上得票)*100/投票者数,
uc=ifelse(is.na(uc),0,1),
year_dummy=ifelse(year==2022,1,0)) %>%
select(-有権者数,-井上得票,-自民得票計) %>%
select(year,code,pref_city,inoue_ratio,everything()) %>%
left_join(read_csv("data/提出用/mun_data.csv") %>%
select(-地域),
by=c("code"="area_code")) %>%
select_if(negate(anyNA))
## Rows: 1917 Columns: 263
## ── Column specification ────────────────────────────────────────────────────────
## Delimiter: ","
## chr (2): area_code, 地域
## dbl (261): A2101_住民基本台帳人口(日本人), A210101_住民基本台帳人口(日本人)(男), A210102_住民基本台帳人口(日...
##
## ℹ Use `spec()` to retrieve the full column specification for this data.
## ℹ Specify the column types or set `show_col_types = FALSE` to quiet this message.
controls <- colnames(did)[9:128] %>%
sapply(function(x) {
x <- sub("^", "`", x)
sub("$", "`", x)
})
# DID分析
lm(as.formula(paste("inoue_ratio ~ year_dummy + uc + year_dummy:uc + exp_inoue_ratio +",
paste(controls, collapse = " + "))),
data = did, weights = 投票者数) %>%
tidy() %>%
mutate(across(estimate:statistic, ~format(., scientific = FALSE, digits = 3))) %>%
mutate(across(estimate:p.value, ~format(., scientific = TRUE, digits = 3))) %>%
gt()
| term | estimate | std.error | statistic | p.value |
|---|---|---|---|---|
| (Intercept) | 0.46508188 | 0.08512869 | 5.4633 | 4.98e-08 |
| year_dummy | 0.09415377 | 0.02647046 | 3.5569 | 3.80e-04 |
| uc | 0.12601879 | 0.03626945 | 3.4745 | 5.18e-04 |
| exp_inoue_ratio | -0.00505216 | 0.00218096 | -2.3165 | 2.06e-02 |
| `A2101_住民基本台帳人口(日本人)` | -0.00001867 | 0.00001630 | -1.1452 | 2.52e-01 |
| `A210101_住民基本台帳人口(日本人)(男)` | 0.00003434 | 0.00002978 | 1.1530 | 2.49e-01 |
| `A210102_住民基本台帳人口(日本人)(女)` | NA | NA | NA | NA |
| `A2201_住民基本台帳人口(外国人)` | -0.00005219 | 0.00001066 | -4.8950 | 1.02e-06 |
| `A2301_住民基本台帳人口(総数)` | NA | NA | NA | NA |
| A4101_出生数 | 0.00063645 | 0.00016397 | 3.8815 | 1.06e-04 |
| A4200_死亡数 | 0.00033109 | 0.00012519 | 2.6446 | 8.21e-03 |
| `A5101_転入者数(日本人移動者)` | -0.00023901 | 0.00006712 | -3.5611 | 3.74e-04 |
| `A5102_転出者数(日本人移動者)` | -0.00005526 | 0.00004165 | -1.3268 | 1.85e-01 |
| A5103_転入者数 | 0.00019497 | 0.00006014 | 3.2418 | 1.20e-03 |
| A5104_転出者数 | 0.00005962 | 0.00003059 | 1.9491 | 5.14e-02 |
| `A7103_住民基本台帳世帯数(日本人)` | -0.00000471 | 0.00000659 | -0.7155 | 4.74e-01 |
| A9101_婚姻件数 | 0.00027608 | 0.00019644 | 1.4055 | 1.60e-01 |
| A9201_離婚件数 | -0.00111297 | 0.00048200 | -2.3091 | 2.10e-02 |
| `B1101_総面積(北方地域及び竹島を除く)` | -0.00005367 | 0.00008773 | -0.6117 | 5.41e-01 |
| `B1102_総面積(北方地域及び竹島を含む)` | 0.00000552 | 0.00007487 | 0.0737 | 9.41e-01 |
| B1103_可住地面積 | 0.00004181 | 0.00004475 | 0.9342 | 3.50e-01 |
| B1104_主要湖沼面積 | 0.00002539 | 0.00004524 | 0.5612 | 5.75e-01 |
| B1105_林野面積 | 0.00003784 | 0.00004916 | 0.7698 | 4.41e-01 |
| B1106_森林面積 | 0.00000909 | 0.00002738 | 0.3321 | 7.40e-01 |
| B1107_森林以外の草生地面積 | NA | NA | NA | NA |
| `C2109_事業所数(国・地方公共団体)(経済センサス‐基礎調査結果)` | 0.00125924 | 0.00047212 | 2.6672 | 7.68e-03 |
| `C310201_農家数(販売農家)` | 0.00001300 | 0.00004117 | 0.3157 | 7.52e-01 |
| `C310202_農家数(自給的農家)` | 0.00000901 | 0.00003500 | 0.2575 | 7.97e-01 |
| C3403_製造業事業所数 | -0.00004077 | 0.00014897 | -0.2737 | 7.84e-01 |
| C3404_製造業従業者数 | 0.00000127 | 0.00000413 | 0.3070 | 7.59e-01 |
| E1101_幼稚園数 | 0.00977053 | 0.00301707 | 3.2384 | 1.21e-03 |
| E1501_幼稚園在園者数 | -0.00012426 | 0.00002916 | -4.2619 | 2.08e-05 |
| E2101_小学校数 | 0.00082431 | 0.00531792 | 0.1550 | 8.77e-01 |
| E2401_小学校教員数 | 0.00014228 | 0.00047999 | 0.2964 | 7.67e-01 |
| E2501_小学校児童数 | 0.00000304 | 0.00003168 | 0.0960 | 9.24e-01 |
| E3101_中学校数 | 0.02079237 | 0.00780731 | 2.6632 | 7.77e-03 |
| E3401_中学校教員数 | -0.00254183 | 0.00073229 | -3.4711 | 5.24e-04 |
| E3501_中学校生徒数 | 0.00004987 | 0.00004306 | 1.1582 | 2.47e-01 |
| E3901_義務教育学校数 | 0.16278597 | 0.13276421 | 1.2261 | 2.20e-01 |
| E3902_義務教育学校前期課程学級数 | -0.03099479 | 0.03663169 | -0.8461 | 3.98e-01 |
| E3903_義務教育学校後期課程学級数 | 0.01209698 | 0.05515083 | 0.2193 | 8.26e-01 |
| E3904_義務教育学校教員数 | 0.00046792 | 0.00709723 | 0.0659 | 9.47e-01 |
| E3905_義務教育学校前期課程児童数 | 0.00067233 | 0.00101395 | 0.6631 | 5.07e-01 |
| E3906_義務教育学校後期課程生徒数 | -0.00019045 | 0.00129637 | -0.1469 | 8.83e-01 |
| E4101_高等学校数 | 0.00848925 | 0.01144459 | 0.7418 | 4.58e-01 |
| E4501_高等学校生徒数 | -0.00001358 | 0.00001313 | -1.0345 | 3.01e-01 |
| F1101_労働力人口 | -0.00107849 | 0.00018993 | -5.6783 | 1.47e-08 |
| `F110101_労働力人口(男)` | 0.00156571 | 0.00028451 | 5.5032 | 3.98e-08 |
| `F110102_労働力人口(女)` | NA | NA | NA | NA |
| F1102_就業者数 | 0.00146232 | 0.00024622 | 5.9390 | 3.13e-09 |
| `F110201_就業者数(男)` | -0.00168460 | 0.00034773 | -4.8445 | 1.32e-06 |
| `F110202_就業者数(女)` | NA | NA | NA | NA |
| `F1103_就業者数・主に仕事` | -0.00028570 | 0.00010924 | -2.6154 | 8.95e-03 |
| `F1104_就業者数・家事のほか仕事` | -0.00024138 | 0.00011271 | -2.1417 | 3.23e-02 |
| `F1105_就業者数・通学のかたわら仕事` | -0.00033173 | 0.00012629 | -2.6267 | 8.66e-03 |
| `F1106_就業者数・休業者` | NA | NA | NA | NA |
| F1107_完全失業者数 | NA | NA | NA | NA |
| `F110701_完全失業者数(男)` | NA | NA | NA | NA |
| `F110702_完全失業者数(女)` | NA | NA | NA | NA |
| F1108_非労働力人口 | 0.00003340 | 0.00002432 | 1.3731 | 1.70e-01 |
| `F110801_非労働力人口(男)` | -0.00011066 | 0.00004228 | -2.6173 | 8.90e-03 |
| `F110802_非労働力人口(女)` | NA | NA | NA | NA |
| `F1109_非労働力人口・家事` | -0.00000242 | 0.00002626 | -0.0921 | 9.27e-01 |
| `F1110_非労働力人口・通学` | 0.00000118 | 0.00002689 | 0.0438 | 9.65e-01 |
| `F1111_非労働力人口・その他` | NA | NA | NA | NA |
| `F2116_就業者数(65歳以上)` | -0.00000158 | 0.00002382 | -0.0661 | 9.47e-01 |
| F2201_第1次産業就業者数 | 0.00016244 | 0.00007688 | 2.1130 | 3.47e-02 |
| F2211_第2次産業就業者数 | 0.00006170 | 0.00006591 | 0.9361 | 3.49e-01 |
| F2221_第3次産業就業者数 | 0.00008615 | 0.00006788 | 1.2691 | 2.04e-01 |
| `F2401_雇用者数(国勢調査結果)` | -0.00020368 | 0.00011095 | -1.8358 | 6.65e-02 |
| F2402_役員数 | -0.00012263 | 0.00011351 | -1.0804 | 2.80e-01 |
| F2403_雇人のある業主数 | -0.00043535 | 0.00016053 | -2.7119 | 6.72e-03 |
| F2404_雇人のない業主数 | -0.00035804 | 0.00010693 | -3.3483 | 8.21e-04 |
| `F2405_家族従業者数(国勢調査結果)` | -0.00032485 | 0.00014614 | -2.2229 | 2.63e-02 |
| F2406_自営業主及び家族従業者数 | NA | NA | NA | NA |
| `F2409_雇用者数(正規の職員・従業員)` | -0.00009131 | 0.00002319 | -3.9369 | 8.41e-05 |
| `F2410_雇用者数(労働者派遣事業所の派遣社員)` | 0.00017677 | 0.00004897 | 3.6101 | 3.10e-04 |
| `F2411_雇用者数(パート・アルバイト・その他)` | NA | NA | NA | NA |
| F2701_自市区町村で従業している就業者数 | 0.00014328 | 0.00015351 | 0.9333 | 3.51e-01 |
| `F270101_自市区町村で従業している就業者数(男)` | 0.00000447 | 0.00025621 | 0.0175 | 9.86e-01 |
| `F270102_自市区町村で従業している就業者数(女)` | NA | NA | NA | NA |
| F2702_県内他市区町村で従業している就業者数 | 0.00010134 | 0.00015412 | 0.6575 | 5.11e-01 |
| `F270201_県内他市区町村で従業している就業者数(男)` | 0.00006622 | 0.00025843 | 0.2563 | 7.98e-01 |
| `F270202_県内他市区町村で従業している就業者数(女)` | NA | NA | NA | NA |
| F2703_他県で従業している就業者数 | 0.00013440 | 0.00015670 | 0.8577 | 3.91e-01 |
| `F270301_他県で従業している就業者数(男)` | 0.00000671 | 0.00026276 | 0.0255 | 9.80e-01 |
| `F270302_他県で従業している就業者数(女)` | NA | NA | NA | NA |
| F2705_他市区町村への通勤者数 | NA | NA | NA | NA |
| `F270501_他市区町村への通勤者数(男)` | NA | NA | NA | NA |
| `F270502_他市区町村への通勤者数(女)` | NA | NA | NA | NA |
| F2801_従業地による就業者数 | 0.00000300 | 0.00000126 | 2.3724 | 1.77e-02 |
| F2802_他県に常住している就業者数 | -0.00000902 | 0.00000237 | -3.8082 | 1.42e-04 |
| F2803_他市区町村からの通勤者数 | NA | NA | NA | NA |
| G1201_公民館数 | -0.00064366 | 0.00079625 | -0.8084 | 4.19e-01 |
| G1401_図書館数 | -0.01783976 | 0.00490428 | -3.6376 | 2.79e-04 |
| H7701_テレビ放送受信契約数 | -0.00000127 | 0.00000497 | -0.2558 | 7.98e-01 |
| H770101_衛星放送受信契約数 | 0.00000248 | 0.00000408 | 0.6076 | 5.44e-01 |
| I5101_病院数 | 0.02390061 | 0.00606458 | 3.9410 | 8.26e-05 |
| I510110_精神科病院数 | 0.00924477 | 0.01320591 | 0.7000 | 4.84e-01 |
| I510120_一般病院数 | NA | NA | NA | NA |
| I510150_療養病床を有する病院数 | -0.02833900 | 0.00732401 | -3.8693 | 1.11e-04 |
| I5102_一般診療所数 | -0.00046843 | 0.00062193 | -0.7532 | 4.51e-01 |
| I510201_有床一般診療所数 | -0.01980398 | 0.00900608 | -2.1990 | 2.79e-02 |
| I5103_歯科診療所数 | 0.00191198 | 0.00094580 | 2.0216 | 4.33e-02 |
| I5211_病院病床数 | -0.00006467 | 0.00002349 | -2.7534 | 5.93e-03 |
| I5212_一般診療所病床数 | 0.00078916 | 0.00057799 | 1.3654 | 1.72e-01 |
| `I5511_介護老人保健施設数(基本票)` | -0.01564718 | 0.01241654 | -1.2602 | 2.08e-01 |
| `I5512_介護老人保健施設定員数(基本票)` | 0.00000395 | 0.00014904 | 0.0265 | 9.79e-01 |
| `J2221_保護施設数(基本票)(医療保護施設を除く)` | -0.02398622 | 0.02083427 | -1.1513 | 2.50e-01 |
| `J230127_介護老人福祉施設数(基本票)` | -0.02612838 | 0.00720151 | -3.6282 | 2.89e-04 |
| `J230128_介護老人福祉施設定員数(基本票)` | 0.00033874 | 0.00010156 | 3.3353 | 8.60e-04 |
| `J2304_老人福祉施設数(基本票)` | -0.00412936 | 0.00428149 | -0.9645 | 3.35e-01 |
| `J230411_養護老人ホーム数(基本票)` | -0.00927873 | 0.02846338 | -0.3260 | 7.44e-01 |
| `J230412_養護老人ホーム定員数(基本票)` | -0.00055414 | 0.00034365 | -1.6125 | 1.07e-01 |
| `J230421_有料老人ホーム数(基本票)` | -0.00410053 | 0.00149486 | -2.7431 | 6.12e-03 |
| `J230422_有料老人ホーム定員数(基本票)` | 0.00014063 | 0.00004567 | 3.0792 | 2.09e-03 |
| `J230431_軽費老人ホーム数(基本票)` | 0.00087507 | 0.01214587 | 0.0720 | 9.43e-01 |
| `J230432_軽費老人ホーム定員数(基本票)` | -0.00008059 | 0.00023057 | -0.3495 | 7.27e-01 |
| `J250204_児童福祉施設等数(基本票)` | 0.00151380 | 0.00087670 | 1.7267 | 8.43e-02 |
| `J250302_保育所等数(基本票)` | -0.00313912 | 0.00219546 | -1.4298 | 1.53e-01 |
| `J250303_公営保育所等数(基本票)` | -0.01029339 | 0.00268479 | -3.8340 | 1.28e-04 |
| `J2804_母子・父子福祉施設数(基本票)` | -0.08989745 | 0.04154522 | -2.1638 | 3.05e-02 |
| `J2905_障害者支援施設等数(基本票)` | 0.00008769 | 0.00334738 | 0.0262 | 9.79e-01 |
| `J2906_婦人保護施設数(基本票)` | -0.10429151 | 0.05009789 | -2.0818 | 3.74e-02 |
| year_dummy:uc | 0.07664716 | 0.04008132 | 1.9123 | 5.59e-02 |
inoue2013 <- read_csv("data/提出用/福元データ23.csv") %>%
mutate(年=(as.double(as.double(str_sub(選挙回,-2,-1)))-19)*3+2001) %>%
mutate(名前=str_replace(名前," ","")) %>%
filter(名前=="井上義行") %>%
rename(pref=都道府県名,
city=市区町村名,
井上得票=市区町村別得票数,
party="党派・会派等",
name=名前,
year=年,
code=JISコード) %>%
select(year,
code,
pref,
city,
name,
井上得票,
投票者数,
有権者数) %>%
mutate(code=as.character(ifelse(str_length(code)==4,str_c(0,code),code))) %>%
mutate(city=str_replace(city,"ケ","ヶ"))
## Rows: 307314 Columns: 17
## ── Column specification ────────────────────────────────────────────────────────
## Delimiter: ","
## chr (6): 選挙回, 都道府県名, 市区町村名, 名前, 党派・会派等, 現新
## dbl (10): 都道府県コード, JISコード, 有権者数, 投票者数, 有効投票数, 定数, 候補者数, 市区町村別得票数, 得票総数, 年齢...
## lgl (1): 順位
##
## ℹ Use `spec()` to retrieve the full column specification for this data.
## ℹ Specify the column types or set `show_col_types = FALSE` to quiet this message.
did_chart <- bind_rows(inoue2013, read_csv("data/提出用/votes.csv") %>%
select(-自民_党_の得票)) %>%
left_join(church) %>%
group_by(year,uc) %>%
summarize(井上得票=sum(井上得票),
投票者数=sum(投票者数)) %>%
mutate(inoue_ratio=井上得票*100/投票者数) %>%
mutate(uc=ifelse(is.na(uc), "なし", "あり")) %>%
ggplot(aes(year,inoue_ratio,color=uc))+geom_line() +
scale_x_continuous(breaks = c(2013, 2019, 2022)) +
scale_color_manual(name = "教団施設",
values = c("あり" = "red", "なし" = "blue")) +
labs(title="3回の参院選における井上氏の得票率の推移",
x="年",
y="得票率(%)")
## Rows: 3792 Columns: 8
## ── Column specification ────────────────────────────────────────────────────────
## Delimiter: ","
## chr (2): code, pref_city
## dbl (6): year, 有権者数, 投票者数, 井上得票, 自民得票計, 自民_党_の得票
##
## ℹ Use `spec()` to retrieve the full column specification for this data.
## ℹ Specify the column types or set `show_col_types = FALSE` to quiet this message.
## Joining with `by = join_by(code)`
## `summarise()` has grouped output by 'year'. You can override using the `.groups` argument.
# Define the points and the slope for the new line
x1 <- 2019
y1 <- 0.19
slope <- 0.03266667
x2 <- 2022
y2 <- y1 + slope * (x2 - x1)
# Add the line segment to the plot
did_chart + geom_segment(aes(x = x1, y = y1, xend = x2, yend = y2),
color = "black", linetype = "dotted")
## Warning in geom_segment(aes(x = x1, y = y1, xend = x2, yend = y2), color = "black", : All aesthetics have length 1, but the data has 6 rows.
## ℹ Did you mean to use `annotate()`?

以上。