【第1章イントロダクション】練習問題1.5.1「自己申告に基づく投票率のバイアス」

1.書籍・著書の紹介

 データ分析を学ぼうと今井耕介先生の「社会科学のためのデータ分析」(以下、本書)を読んでいます。本書を選んだ理由は、今井先生自身が教鞭を取った米国トップスクールの講義の内容をもとに執筆された定評のある教科書のようだからです(今井先生の経歴は以下のリンク先参照)。

 本書が評価されている理由は主に以下の3つだと思います。
  ①分析の具体例としてパブリッシュされた論文を再現できること
  ②データ分析手法を幅広くカバーしていること
  ③サポートページが充実しており、自主学習のハードルが低いこと

 単なるデータ分析の手法の紹介だけでなく、学術の知見にも触れられ、一挙両得であるのは大変嬉しいです。また、線形回帰に始まり、クラスター分析やテキストマイニングといった様々な手法を一気通貫で学べるのも魅力的だと思います。そして、書籍の内容を簡単に再現できる以下のサポートページが用意されているので独学者にとっても優しいと思います。

2.記事の狙い

 本書には、各章末に2〜3題からなる練習問題が付いており、サポートページで対象データセットをダウンロードすることで、実際に手を動かしてデータ分析を学ぶことができます。

 どうせ練習問題を解くためにRのコードを書くのであれば、noteの記事にしようと思い、この記事を書き始めました。当初は1つの記事に章単位の練習問題全てを記載しようと思いましたが、1つの練習問題だけでもかなりのボリュームになったので、章別練習問題別に記事にまとめることにしました。

3.練習問題1.5.1「自己申告に基づく投票率のバイアス」

(1)データセットの読込・概要の確認
・データ構造はデータフレーム型で観察数14×変数9個のデータセットです。
・データの期間は1980〜2008年までの28年間で2年毎になっています。但し、2006 年のみデータが存在しません。

> turnout <- read.csv("turnout.csv") 
> class(turnout) 
[1] "data.frame"

> dim(turnout)
[1] 14  9

> summary(turnout)
      year           VEP              VAP             total             ANES           felons    
 Min.   :1980   Min.   :159635   Min.   :164445   Min.   : 64991   Min.   :47.00   Min.   : 802  
 1st Qu.:1986   1st Qu.:171192   1st Qu.:178930   1st Qu.: 73179   1st Qu.:57.00   1st Qu.:1424  
 Median :1993   Median :181140   Median :193018   Median : 89055   Median :70.50   Median :2312  
 Mean   :1993   Mean   :182640   Mean   :194226   Mean   : 89778   Mean   :65.79   Mean   :2177  
 3rd Qu.:2000   3rd Qu.:193353   3rd Qu.:209296   3rd Qu.:102370   3rd Qu.:73.75   3rd Qu.:3042  
 Max.   :2008   Max.   :213314   Max.   :230872   Max.   :131304   Max.   :78.00   Max.   :3168  
                                                                                                 
     noncit         overseas       osvoters  
 Min.   : 5756   Min.   :1803   Min.   :263  
 1st Qu.: 8592   1st Qu.:2236   1st Qu.:263  
 Median :11972   Median :2458   Median :263  
 Mean   :12229   Mean   :2746   Mean   :263  
 3rd Qu.:15910   3rd Qu.:2937   3rd Qu.:263  
 Max.   :19392   Max.   :4972   Max.   :263  
                                NA's   :13

> turnout$year
[1] 1980 1982 1984 1986 1988 1990 1992 1994 1996 1998 2000 2002 2004 2008

(2)選挙年齢人口(VAP)投票率・有権者人口(VEP)投票率
  ①全期間にわたってVAP(青●)は、VEP(赤▲)より低い値になる。
  ②VAPとVEPは平均的に3.49%程度の差が生じる。
  ③差の範囲は、最小1.89%〜最大5.88%とバラつきがある。
  ④またVAPとVEPの差の特徴として以下の2つがある。
   1)時間の経過により差が大きくなる傾向にある。
   2)但し、単調増加ではなく周期性を持っている。

> VAP.rate <- (turnout[,4]/(turnout[,3]+turnout[,8]))*100
> summary(VAP.rate)
   Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
  34.83   36.57   48.44   45.46   52.41   55.67  

> VEP.rate <- (turnout[,4]/(turnout[,2]))*100
> summary(VEP.rate)
   Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
  38.09   39.91   52.21   48.95   54.99   61.55 

> par(mfrow = c(1,2))

> plot(turnout$year,VAP.rate,col = "blue",pch = 16,ylim = c(30,65),xlab = "year",ylab = "vote.rate",main = "Comparison VAP and VEP")
> points(turnout$year,VEP.rate,col = "red",pch = 17)
> text(1983,60,"VEP",col = "red")
> text(1983,35,"VAP",col = "blue")

> plot(turnout$year,VEP.rate-VAP.rate,type = "l",xlab = "year",ylab = "vote.rate diff",main = "Difference VAP and VEP")

> summary(VEP.rate-VAP.rate)
   Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
  1.892   2.538   3.178   3.493   4.111   5.880 

画像1

(3)VAP投票率・VEP投票率とANES投票率推定値の差
  ①VAPとANESは、平均して20.3%程度の差がある。
  ②その差の範囲は、最小11%〜最大26.1%程度。
  ③VEPとANESは、平均して16.8%程度の差がある。
  ④その差の範囲は、最小8.6%〜最大22.5%程度。
  ⑤VEPの方が、VAPよりもANESと近い値にある傾向がみられる。

> summary(turnout[,5]-VAP.rate)
   Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
  11.06   18.22   20.62   20.33   22.42   26.17 

> summary(turnout[,5]-VEP.rate)
   Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
  8.581  15.267  16.893  16.836  18.529  22.489 

> par(mfrow=c(1,2))
> plot(turnout$year,turnout[,5]-VAP.rate,type = "l",ylim = c(5,30),xlab = "year",ylab = "diff vote.rate",main = "Difference VAP and ANES")
> plot(turnout$year,turnout[,5]-VEP.rate,type = "l",ylim = c(5,30),xlab = "year",ylab = "diff vote.rate",main = "Difference VEP and ANES")

画像2

(4)大統領選挙と中間選挙のANES推定値のバイアス
 <米国選挙に関する前提>
  ①大統領選挙は4年毎に実施。データセットでの開始年は1980年。
  ②中間選挙も4年毎に実施。データセットの開始年は1982年。
   但し、2006年の中間選挙のデータは、データセットに無い。
 <大統領選挙におけるVEPとANESの比較>
  ①VEPとANESは、平均して17.9%程度の差がある。
  ②その差の範囲は、最大16.4~21.3%程度。標準偏差は、1.65%程度。

> turnout.pre <- turnout[seq(from = 1,to = nrow(turnout),by = 2),]
> x <- turnout[nrow(turnout),]
> turnout.pre <- rbind(turnout.pre,x)
> turnout.pre

   year    VEP    VAP  total ANES felons noncit overseas osvoters
1  1980 159635 164445  86515   71    802   5756     1803       NA
3  1984 167702 173995  92653   74   1165   7482     2361       NA
5  1988 173579 181955  91595   70   1594   9280     2257       NA
7  1992 179656 190778 104405   75   2183  11447     2418       NA
9  1996 186347 200016  96263   73   2586  13601     2499       NA
11 2000 194331 210623 105375   73   3083  16218     2937       NA
13 2004 203483 220336 122295   77   3158  18068     3862       NA
14 2008 213314 230872 131304   78   3145  19392     4972      263

> VEP.rate.pre <- (turnout.pre$total/turnout.pre$VEP)*100
> summary(turnout.pre$ANES - VEP.rate.pre)
   Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
  16.45   16.87   17.07   17.89   18.76   21.34 

> sd(turnout.pre$ANES - VEP.rate.pre)
[1] 1.653152

  <中間選挙におけるVEPとANESの比較>
  ①VEPとANESは、平均して15.4%程度の差がある。
  ②その差の範囲は、最大8.6~22.5%程度。標準偏差は、4.59%程度。

> turnout.mid <- turnout[seq(from = 2, to = 12,by = 2),]
> turnout.mid
   year    VEP    VAP total ANES felons noncit overseas osvoters
2  1982 160467 166028 67616   60    960   6641     1982       NA
4  1986 170396 177922 64991   53   1367   8362     2216       NA
6  1990 176629 186159 67859   47   1901  10239     2659       NA
8  1994 182623 195258 75106   56   2441  12497     2229       NA
10 1998 190420 205313 72537   52   2920  14988     2937       NA
12 2002 198382 215462 78382   62   3168  17237     3308       NA

> VEP.rate.mid <- (turnout.mid$total/turnout.mid$VEP)*100
> summary(turnout.mid$ANES - VEP.rate.mid)
   Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
  8.581  14.145  14.866  15.429  17.116  22.489 

> sd(turnout.mid$ANES - VEP.rate.mid)
[1] 4.596035

(5)時間の経過によるANESのバイアス変化
 <データ分割の前提>
  ・前半(1980~1992年)と後半(1994~2008年)の2グループに分割。
 <前半(1980~1992年)におけるVEPとANESの比較>
  ①VEPとANESは、平均して15.8%程度の差がある。
  ②その差の範囲は、最小8.58〜18.7%程度。標準偏差は3.42%程度。

> turnout.old <- turnout[seq(from = 1 , to = nrow(turnout)/2 , by =1 ),]
> turnout.old
  year    VEP    VAP  total ANES felons noncit overseas osvoters
1 1980 159635 164445  86515   71    802   5756     1803       NA
2 1982 160467 166028  67616   60    960   6641     1982       NA
3 1984 167702 173995  92653   74   1165   7482     2361       NA
4 1986 170396 177922  64991   53   1367   8362     2216       NA
5 1988 173579 181955  91595   70   1594   9280     2257       NA
6 1990 176629 186159  67859   47   1901  10239     2659       NA
7 1992 179656 190778 104405   75   2183  11447     2418       NA

> VEP.rate.old <- (turnout.old$total/turnout.old$VEP)*100
> summary(turnout.old$ANES - VEP.rate.old)
   Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
  8.581  15.832  16.886  15.854  17.547  18.751 

> sd(turnout.old$ANES - VEP.rate.old)
[1] 3.420122

 <後半(1994~2008年)におけるVEPとANESの比較>
  ①VEPとANESは、平均して17.8%程度の差がある。
  ②その差の範囲は、最小13.8〜22.5%程度。標準偏差は3.21%程度。
 <前半(1980~1992年)と後半(1994~2008年)のANESのバイアス>
  ・平均的な差が大きく、なおかつ差の最小値・最大値共に大きくなっているため、後半の方がANESのバイアスが大きくなっていると思われる。

> turnout.new <- turnout[seq(from = nrow(turnout)/2+1 , to = nrow(turnout) , by =1 ),]
> turnout.new
   year    VEP    VAP  total ANES felons noncit overseas osvoters
8  1994 182623 195258  75106   56   2441  12497     2229       NA
9  1996 186347 200016  96263   73   2586  13601     2499       NA
10 1998 190420 205313  72537   52   2920  14988     2937       NA
11 2000 194331 210623 105375   73   3083  16218     2937       NA
12 2002 198382 215462  78382   62   3168  17237     3308       NA
13 2004 203483 220336 122295   77   3158  18068     3862       NA
14 2008 213314 230872 131304   78   3145  19392     4972      263

> VEP.rate.new <- (turnout.new$total/turnout.new$VEP)*100
> summary(turnout.new$ANES - VEP.rate.new)
   Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
  13.91   15.66   16.90   17.82   20.06   22.49 

> sd(turnout.new$ANES - VEP.rate.new)
[1] 3.210682

(6)補正済VAPとVAP・VEP・ANES推定値の比較
 <補正済VAP算出時の前提>
  ①osvoters(在外有権者投票数合計)は、2008年を除いてNA。
  ②計算を円滑に行うため、NAは「0」に置換する。
 <補正済VAPと各投票率の比較>
  ①補正済VAPとANES
   1)ANESの方が常に大きく、平均して16%程度の差がある。
   2)その差の範囲は最小8%〜最大21.8%程度。
  ②補正済VAPとVAP
           1) 補正済VAPの方が常に大きく、平均して4.25%程度の差がある。
   2)その差の範囲は最小2.43%〜最大7.22%程度。
  ③補正済VAPとVEP
   1)補正済VAPの方が常に大きく、平均して0.75% 程度の差がある。
   2)その差の範囲は最小0.49%〜最大1.34%程度。

> turnout$osvoters <- ifelse(is.na(turnout$osvoters),0,turnout$osvoters)
> VAP.rate.mod <- ((turnout$total - turnout$osvoters)/(turnout$VAP - turnout$felons - turnout$noncit))*100
> summary(VAP.rate.mod)
   Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
  38.64   40.55   52.95   49.71   55.80   62.90 

> summary(turnout$ANES - VAP.rate.mod)
   Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
  8.005  14.545  16.134  16.077  17.772  21.816 

> summary(VAP.rate - VAP.rate.mod)
   Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
 -7.225  -4.880  -3.845  -4.252  -3.167  -2.434 

> summary(VEP.rate - VAP.rate.mod)
   Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
-1.3448 -0.8137 -0.6905 -0.7596 -0.5822 -0.4996 

> par(mfrow = c(1,1))
> plot(turnout$year,turnout$ANES - VAP.rate.mod,col = "blue",pch = 16,ylim = c(-8,25),xlab = "year",ylab = "diff.vote.rate",main = "Comparison Vote Rate")
> points(turnout$year,VAP.rate - VAP.rate.mod,col = "red",pch = 17)
> points(turnout$year,VEP.rate - VAP.rate.mod,col = "black",pch = 18)
> text(1983,20,"ANES-VAPmod",col = "blue")
> text(1983,-6,"VAP-VAPmod",col = "red")
> text(1983,3,"VEP-VAPmod",col = "black")

画像3

4.練習問題を解いた感想

 ・ANESと他の投票率の乖離が大きいので、投票率の算定式を間違えている気がして不安。誰か、練習問題を解いている人は居ないだろうか。

 ・データセットを作成した都度、summary関数で全体感を確認した方が良い。想定と処理の作業結果に相違点が無いか、相違がある場合その理由は何故かを考えるきっかけになる。

 ・データを可視化すると見えていないことがわかる時がある。まだ、Rでデータをグラフ化するコードを書くことに慣れていないので、これから習熟したい。

この記事が気に入ったらサポートをしてみませんか?