1. 統計学の種類

  • 統計学は記述統計学 (descriptive statistics) と推測統計学 (inferential statistics) の二つに分類できる
統計学の種類 特徴
記述統計学: 統計量を使ってデータ傾向や性質をつかむ
推測統計学: 母集団の母数(母平均や母分散)を検定し推定する

記述統計学

  • 集めたデータの統計量(平均、分散、標準偏差など)を計算して、そのデータを我々が理解できるような形で記述し要約する
  • データの分布を明らかにすることで、データ傾向や性質をつかむための統計手法 

推測統計学

  • 入手可能な記述統計量を使って未観測の事象を予測、推定するスキルが「推測統計学」
  • 母集団 (population) から標本 (sample) を無作為に抽出し、その標本によって得られた標本平均や不偏分散などの統計量を使って、母集団の母数(母平均や母分散)を検定し推定する 
  • 推測統計学の基本的な考えは、母集団からランダムに抽出した標本を増やし、無限に試行を繰り返せば、全体の一部である標本から、巨大で未知の母集団を推測できる、ということ 
  • 推測統計学では、分析対象が確率分布すると考える 

・ここでは両統計学で共通して使う基礎知識を解説・演習する

2. 記述統計量

  • 記述統計量(descriptive statistics)とは「ある変数が持つ情報を要約した数値」

代表的な記述統計量

記述統計量 解説
mean() 平均値 mean
median() 中央値 median
sd() 不偏標準偏差 standard deviation
var() 不偏分散 variance
IQR() 四分位範囲 Interquartile range*
min() 最小値 minimum
max() 最小値と最大値 maximum

* 四分位範囲とは、75パーセンタイルと25パーセンタイルの差のこと

  • 例えば、学生 9 人の TOEFL (iBT) の平均点が得られたとする
  • 2 番目の学生のスコアーは欠損値 (NA) とする
x <- c(22, 33, 44, 55, 66, 77, 88, 99, 100)
x
[1]  22  33  44  55  66  77  88  99 100
  • x を代表する値(=代表値)として平均値、中央値、分散、標準偏差、四分位範囲、範囲を求めてみる

2.1 平均値

  • 変数\(x\) の平均\(\bar{x}\) は次の式で求めることができる:
    \[\bar{x} = \frac{\sum_{i=1}^n x_i}{n}\]

  • R を使って平均点を計算する方法① 

  • 最も手間の掛かる方法

(22 + 33 + 44 + 55 + 66 + 77 + 88 + 99 + 100)/9
[1] 64.88889
  • R を使って平均点を計算する方法② 
  • sum( ) を使う
sum(x/9)
[1] 64.88889
  • R を使って平均点を計算する方法③ 
  • mean( ) を使う
mean(x)
[1] 64.88889

2.2 中央値(真ん中の値)

median(x)
[1] 66
  • x を小さい順にソートしてみる
sort(x)
[1]  22  33  44  55  66  77  88  99 100
  • 66 が真ん中にある(=中央値)だとわかる

2.3 分散(ばらつき)

  • 分散 (variance) とは数値データのばらつき具合を表すための指標

  • 分散は「平均値と個々のデータの差の2乗の平均」

  • 平均値から離れた値をとるデータが多い → 分散が大きい

  • 平均点付近の値をとるデータ多い → 分散が小さい

分散

  • 一般的に分散は次の式で求められる 
    \[分散 = \frac{\sum_{i=1}^N (個々のデータ - 平均)^2}{N}\]

  • 次のように表記されることが多い

  • 分散 \(σ^2\)(シグマ)は次のように表記されることが多い 
    \[σ^2 = \frac{\sum_{i=1}^N (x_i - \bar{x})^2}{N}\]

  • x が得られたサンプルデータだとする

分散を計算してみる

x
[1]  22  33  44  55  66  77  88  99 100
  • データ x の平均値を求めて x_mean と名前を付ける 
x_mean <- mean(x)
x_mean
[1] 64.88889
  • 平均からの偏差(個々のデータ - 平均)を求めて x1 と名前を付ける 
x1 <- x - x_mean
x1
[1] -42.888889 -31.888889 -20.888889  -9.888889   1.111111  12.111111  23.111111
[8]  34.111111  35.111111
  • 例えば、[1]の右隣にある数値 (-42.888889) は、データ x の先頭の値 (22) から平均値 (64.88889) を引いた値
22 - 64.88889 # x[1] - mean(x)でも同じ結果が得られる
[1] -42.88889
  • 次に、上で求めた「平均からの偏差」を 2 乗して x2 と名付ける 
x2 <- x1^2
x2
[1] 1839.456790 1016.901235  436.345679   97.790123    1.234568  146.679012
[7]  534.123457 1163.567901 1232.790123
  • 「平均からの偏差」の 2 乗和を求め sum_x2 と名付ける 
sum_x2 <- sum(x2)
sum_x2
[1] 6468.889
  • これで分散を求める式の分子は完成 

  • 分母の数 (N) は 9

  • 従って、x の分散 \(σ^2\) は、 \[σ^2 = \frac{\sum_{i=1}^N (x_i - \bar{x})^2}{N} = \frac{6468.889}{9} = 718.7654\]

  • ここで求めた分散は「標本分散」と呼ばれる

var() を使って分散を求めてみる

var(x)
[1] 808.6111

上で求めた分散 (718.7654) とは異なる値が出た

→ その理由: var() が計算するのは「標本分散 \(σ^2\)」 ではなく「不偏分散 \(S^2\)だから

・標本を使った通常の分析では「不偏分散 \(S^2\)」を使う方が一般的
R で分散を計算する関数 var() では不偏分散 \(S^2\) をデフォルトに設定している

不偏分散と標本分散

「不偏分散」「標本分散」は使い分ける必要がある 

不偏分散・・・「母集団に興味がある場合」に使う散(=標本不偏分散)
標本分散・・・「抽出したサンプルにだけ興味がある場合」に使う

不偏分散 \(S^2\)を使う場合 (R ではデフォルト):

・母集団データの一部だけが手元にあり、入手したデータの背後にある母集団データの散らばりを知りたい場合 

【不偏分散 \(S^2\) を求める式】:var() で計算可能

・仮に \(x\) が母集団から抽出された標本だとしよう 
・母分散は未知なので、標本として得られた統計量を使って未知の母分散を推定する
・母分散を推定するための統計量が不偏分散 \(S^2\)
・不偏分散 \(S^2\)は次の式で求められる 

\[S^2 = \frac{\sum_{i=1}^N (x_i - \bar{x})^2}{N-1}\]

\(\bar{x}\): 標本平均

・Rで計算してみる

sum((x - mean(x))^2) / (length(x) - 1) # var(x) でも同じ結果を得る  
[1] 808.6111
  • var() でも x の不偏分散 \((S^2)\) の値が出力される 
# 不偏分散
var(x)
[1] 808.6111
標本分散 \(σ^2\)を使う場合:

・母集団から抽出された標本(サンプル)が手元にある
・興味の対象が母集団ではなく、標本(サンプル)だけにあるとき
・そのサンプルがどの程度散らばっているかということだけを知りたい時 

【分散 \(σ^2\) を求める式】
・標本分散 \(\sigma^2\)(シグマ)は次の式で求められる 

\[\sigma^2 = \frac{\sum_{i=1}^N (x_i - \bar{x})^2}{N}\]

\(\bar{x}\): 標本平均

R には標本分散 \(\sigma^2\) を求める機能がない
\(\sigma^2\) は次の式を作って計算しなければならない 

# 標本分散
var(x) * (length(x) - 1) / length(x)
[1] 718.7654

標本分散 \(\sigma^2\ \) (718.7654) より、不偏分散 (808.6111) \(S_x^2\) の方が常に大きい

・標本分散 \(\sigma^2\) を求める式では分母が N なのに、不偏分散 \(S^2\) を求める式では分母が N - 1 だから 

分散の計算で2乗 (\(σ^2\)\(S^2\)) の和の平均をとる理由 ・1つの群における各データの数値の平均からの差(=偏差)はぞれが平均値からどれだけ離れているかを表す指標
→ 偏差はプラスとマイナス両方を取り得る
→ 各データが平均値からどれだけ離れているかを表す指標として不適切
偏差を2乗することにより、平均値からの距離の基準を絶対値に換算することで適切な指標に変換できる

2.4 標準偏差(ばらつき)

  • 標準偏差は分散の平方根

\[標準偏差 = \sqrt{分散}\]

  • 分散は、計算する過程で 2 乗されている
    → 本来の単位ではない
    → 数値の意味が変わってしまう
  • 平方根をとることによって単位を揃えた → 標準偏差

\[不偏標準偏差 (S) = \sqrt{不偏分散 (S^2)}\]

  • x の不偏標準偏差 (\(S\)) は次のいずれの式でも表せる
sqrt(var(x))
[1] 28.43609
sd(x)
[1] 28.43609

2.5 四分位範囲

  • データの75パーセンタイル (3rd Qu.) と25パーセンタイル (1st Qu.) の差
IQR(x)
[1] 44

2.6 範囲

max(x, na.rm = TRUE) - min(x)
[1] 78

2.7 記述統計をまとめて表示: summary()

  • 変数 x の統計量のサマリーを表示させる 
summary(x)
   Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
  22.00   44.00   66.00   64.89   88.00  100.00 
  • ここでは変数ごとに次の情報が表示されている 
記述統計量 解説
Min: 最小値
1st Qu.: 1st Quantile (25%)
Median: 中央値 (50%)
Mean: 平均値
3rd Qu: 3rd Quantile (75%)
Max: 最大値

3. dplyrを用いた記述統計量

  • dplyrパッケージを含む tidyverse パッケージをロード
library(tidyverse)

データの準備 (hr96-21.csv) hr96-21.csv をクリックしてデータをパソコンにダウンロード  

  • RProject フォルダ内に data という名称のフォルダを作成する
  • ダウンロードした hr96-21.csv を手動でRProject フォルダ内にある data フォルダに入れる
  • 選挙データの読み取る
hr <- read_csv("data/hr96-21.csv",
               na = ".")  
  • hr96_21.csv は1996年に衆院選挙に小選挙区が導入されて以来実施された 9 回の衆議院選挙(1996, 2000, 2003, 2005, 2009, 2012, 2014, 2017, 2021)の結果のデータ

  • 読み取った選挙データを確認

  • dim() 関数を使うと hr は9,660行、22列のデータであることが分かる

dim(hr)
[1] 9660   22
  • df1 には 22 個の変数が入っている
変数名 詳細
year 選挙年 (1996-2017)
pref 都道府県名
ku 小選挙区名
kun 小選挙区
rank 当選順位
wl 選挙の当落: 1 = 小選挙区当選、2 = 復活当選、0 = 落選
nocand 立候補者数
seito 候補者の所属政党
j_name 候補者の氏名(日本語)
name 候補者の氏名(ローマ字)
previous これまでの当選回数(当該総選挙結果は含まない)
gender 立候補者の性別: “male”, “female”
age 立候補者の年齢
exp 立候補者が使った選挙費用(総務省届け出)
status 候補者のステータス: 0 = 非現職、1 現職、2 = 元職
vote 得票数
voteshare 得票率 (%)
eligible 小選挙区の有権者数
turnout 小選挙区の投票率 (%)
seshu_dummy 世襲候補者ダミー: 1 = 世襲、0 = 非世襲(地盤世襲 or 非世襲)
jiban_seshu 地盤の受け継ぎ元の政治家の氏名と関係
nojiban_seshu 世襲元の政治家の氏名と関係

dfSummary() を使った記述統計の可視化

  • summarytools パッケージを読み込む
library(summarytools)

hr に含まれている変数を可視化する

  • year, kun, wl, rank, status, を factor に変換する  
hr$year <- as.factor(hr$year)
hr$kun <- as.factor(hr$kun)
hr$wl <- as.factor(hr$wl)
hr$rank <- as.factor(hr$rank)
hr$status <- as.factor(hr$status)
dfSummary(hr, 
          style = "grid", plain.ascii = FALSE,
            graph.magnif = 0.75, valid.col = FALSE, tmp.img.dir = "/tmp")

Data Frame Summary

hr

Dimensions: 9660 x 22
Duplicates: 0

No Variable Stats / Values Freqs (% of Valid) Graph Missing
1 year
[factor]
1. 1996
2. 2000
3. 2003
4. 2005
5. 2009
6. 2012
7. 2014
8. 2017
9. 2021
1261 (13.1%)
1199 (12.4%)
1026 (10.6%)
989 (10.2%)
1139 (11.8%)
1294 (13.4%)
959 ( 9.9%)
936 ( 9.7%)
857 ( 8.9%)
0
(0.0%)
2 pref
[character]
1. 東京
2. 大阪
3. 神奈川
4. 愛知
5. 埼玉
6. 千葉
7. 兵庫
8. 北海道
9. 福岡
10. 静岡
[ 37 others ]
953 ( 9.9%)
635 ( 6.6%)
632 ( 6.5%)
521 ( 5.4%)
498 ( 5.2%)
444 ( 4.6%)
407 ( 4.2%)
369 ( 3.8%)
353 ( 3.7%)
264 ( 2.7%)
4584 (47.5%)
0
(0.0%)
3 ku
[character]
1. tokyo
2. osaka
3. kanagawa
4. aichi
5. saitama
6. chiba
7. hyogo
8. hokkaido
9. fukuoka
10. shizuoka
[ 38 others ]
953 ( 9.9%)
635 ( 6.6%)
632 ( 6.5%)
521 ( 5.4%)
498 ( 5.2%)
444 ( 4.6%)
407 ( 4.2%)
369 ( 3.8%)
353 ( 3.7%)
264 ( 2.7%)
4584 (47.5%)
0
(0.0%)
4 kun
[factor]
1. 1
2. 2
3. 3
4. 4
5. 5
6. 6
7. 7
8. 8
9. 9
10. 10
[ 15 others ]
1626 (16.8%)
1456 (15.1%)
1337 (13.8%)
980 (10.1%)
730 ( 7.6%)
501 ( 5.2%)
418 ( 4.3%)
330 ( 3.4%)
308 ( 3.2%)
308 ( 3.2%)
1666 (17.2%)
0
(0.0%)
5 wl
[factor]
1. 0
2. 1
3. 2
6001 (62.1%)
2674 (27.7%)
985 (10.2%)
0
(0.0%)
6 rank
[factor]
1. 1
2. 2
3. 3
4. 4
5. 5
6. 6
7. 7
8. 8
9. 9
10. 2003
2673 (27.7%)
2673 (27.7%)
2459 (25.5%)
1255 (13.0%)
444 ( 4.6%)
122 ( 1.3%)
25 ( 0.3%)
6 ( 0.1%)
2 ( 0.0%)
1 ( 0.0%)
0
(0.0%)
7 nocand
[numeric]
Mean (sd) : 3.9 (1.1)
min < med < max:
2 < 4 < 9
IQR (CV) : 1 (0.3)
2 : 421 ( 4.4%)
3 : 3609 (37.4%)
4 : 3244 (33.6%)
5 : 1609 (16.7%)
6 : 582 ( 6.0%)
7 : 140 ( 1.4%)
8 : 37 ( 0.4%)
9 : 18 ( 0.2%)
0
(0.0%)
8 seito
[character]
1. 自民
2. 共産
3. 民主
4. 無所
5. 社民
6. 幸福
7. 立憲
8. 新進
9. 自由連合
10. 希望
[ 41 others ]
2542 (26.3%)
2228 (23.1%)
1654 (17.1%)
641 ( 6.6%)
316 ( 3.3%)
312 ( 3.2%)
277 ( 2.9%)
235 ( 2.4%)
212 ( 2.2%)
199 ( 2.1%)
1044 (10.8%)
0
(0.0%)
9 j_name
[character]
1. 伊藤達也
2. 三原朝彦
3. 上川陽子
4. 下村博文
5. 中川正春
6. 中谷元
7. 二階俊博
8. 伴野豊
9. 佐藤勉
10. 前原誠司
[ 4610 others ]
10 ( 0.1%)
9 ( 0.1%)
9 ( 0.1%)
9 ( 0.1%)
9 ( 0.1%)
9 ( 0.1%)
9 ( 0.1%)
9 ( 0.1%)
9 ( 0.1%)
9 ( 0.1%)
9568 (99.1%)
1
(0.0%)
10 gender
[character]
1. female
2. male
1323 (13.7%)
8333 (86.3%)
4
(0.0%)
11 name
[character]
1. KATO, KOICHI
2. ITO, TATSUYA
3. ABE, SHINZO
4. AISAWA, ICHIRO
5. AMARI, AKIRA
6. ASO, TARO
7. AZUMI, JUN
8. BANNO, YUTAKA
9. EDANO, YUKIO
10. ENDO, TOSHIAKI
[ 4737 others ]
11 ( 0.1%)
10 ( 0.1%)
9 ( 0.1%)
9 ( 0.1%)
9 ( 0.1%)
9 ( 0.1%)
9 ( 0.1%)
9 ( 0.1%)
9 ( 0.1%)
9 ( 0.1%)
9567 (99.0%)
0
(0.0%)
12 previous
[numeric]
Mean (sd) : 1.5 (2.5)
min < med < max:
0 < 0 < 19
IQR (CV) : 2 (1.7)
19 distinct values 0
(0.0%)
13 age
[numeric]
Mean (sd) : 51.2 (11.1)
min < med < max:
25 < 52 < 94
IQR (CV) : 16 (0.2)
64 distinct values 4
(0.0%)
14 exp
[numeric]
Mean (sd) : 7551392 (5482684)
min < med < max:
535 < 6566110 < 27462362
IQR (CV) : 8240845 (0.7)
6753 distinct values