Chapter 3 統計学の基礎の復習

平均値の計算など、心理統計の基礎を復習する。また、R で平均値などの基礎統計量を計算する方法についても解説する。

  • 変数の区別
  • 基本統計
    • 代表値(平均、中央値)
    • 散布度(分散、標準偏差、分位数)
    • 共分散、相関

3.1 尺度水準

まず、統計学における変数の種類の区別について確認する。変数の種類は大きく分けて、数値である量的変数とカテゴリーを意味するカテゴリカル変数(質的変数)の2つに区別できる。

3.1.1 量的変数

数値として扱う変数。計算することができる。量的変数は更に、間隔尺度比率尺度に区別される。

間隔尺度

データの間隔に意味があるもの。ゼロが何もない状態を意味するものでないもの。例えば、摂氏温度など(0℃以下も-1℃があるように、ゼロは何もない状態を意味しない)。差には意味があるが、比率については意味を持たない。例えば、「10℃と20℃の差は10℃である」とはいえるが、「20℃は10℃の2倍の熱さである」とは言えない。

比率尺度

データの間隔に意味があるもの。ゼロがなにもない状態を意味するもの。例えば、身長、体重、絶対温度など。間隔を比率で表現できる。例えば、「体重100キロの人は体重50キロの人より2倍重い」といえる。

また、量的変数は離散値連続値かでも区別できる。

離散値

離散値とは、小数の間隔を持たない数値のこと。例えば個数。1個, 2個、3個と数えるが、1.1個, 1.2個などは存在しない。

連続値

連続値とは、小数の間隔を持つ数値のこと。例えば身長。150cmから151cmの間には小数で表現できる数値が連続的に並んでいる。

3.1.2 カテゴリカル変数(質的変数)

分類や種類などを意味するデータ。数量化して計算することはできない。
カテゴリカル変数も更に、いくつかに分類される。ここでは、名義尺度順序尺度の区別を挙げる。

名義尺度

性別(男、女)、血液型、出身地など。順序関係がないのが特徴である(男性<女性といった関係はない)。

順序尺度

「優、良、可、不可」といった成績、「1. 賛成、2. どちらでもない、3. 反対」といった尺度など。心理学ではよくリッカート尺度(*)で態度などを測定するが、これも順序尺度である。

*「1:そう思わない、2: 思わない、3: どちらでもない, 4: そう思う、5: 強くそう思う」といったように、自分の態度に当てはまる数字を選ばせて態度の強さを測定する方法。

順序尺度には順序関係があるが、間隔は定義されない。例えば、成績には優 > 良 > 可という順序関係があるが、優と良の間と良と可の間の幅は等しいといった定義はできない。また、良+可=優といった計算もできない。つまり、順序尺度は順序関係はあるがカテゴリカル変数である。

3.2 基本統計量

以下では、Rにもともと入っているirisデータをサンプルデータとして使いながら、平均値や中央値などの代表値や分散や標準偏差などの散布度について復習する。


irisと入力して実行すると、データの中身を確認できるが、これだとデータ全てが出力されて見やすくない。head()を使うとデータの変数を含めた上部数行を表示してくれる。また、str()を使うと、簡略化したデータの構成を表示してくれる。これらの関数は今後もよく出てくるのでここで覚えておこう。

head(iris)
##   Sepal.Length Sepal.Width Petal.Length Petal.Width Species
## 1          5.1         3.5          1.4         0.2  setosa
## 2          4.9         3.0          1.4         0.2  setosa
## 3          4.7         3.2          1.3         0.2  setosa
## 4          4.6         3.1          1.5         0.2  setosa
## 5          5.0         3.6          1.4         0.2  setosa
## 6          5.4         3.9          1.7         0.4  setosa
str(iris) 
## 'data.frame':    150 obs. of  5 variables:
##  $ Sepal.Length: num  5.1 4.9 4.7 4.6 5 5.4 4.6 5 4.4 4.9 ...
##  $ Sepal.Width : num  3.5 3 3.2 3.1 3.6 3.9 3.4 3.4 2.9 3.1 ...
##  $ Petal.Length: num  1.4 1.4 1.3 1.5 1.4 1.7 1.4 1.5 1.4 1.5 ...
##  $ Petal.Width : num  0.2 0.2 0.2 0.2 0.2 0.4 0.3 0.2 0.2 0.1 ...
##  $ Species     : Factor w/ 3 levels "setosa","versicolor",..: 1 1 1 1 1 1 1 1 1 1 ...

3.2.1 代表値

データの代表となる値のこと。平均や中央値などがよく用いられる。

平均値(mean)

\(n\)個の数値\(X_{1}, X_{2}, \cdots, X_{n}\)からなるデータの平均値\(\bar{X}\)は、以下の数式で求める。

\[ \bar{X} = \frac{1}{n}\sum_{k=1}^{n}X_{k}\\ \]

Rで平均値を求めるには、mean()関数を使う。カッコの中に、平均値を求めたいデータをベクトルの形式で入れる。

データフレームの場合は、「データ名$変数名」でベクトルを指定する。これはよく使う表記なので覚えておこう。

mean(iris$Sepal.Length)
## [1] 5.843333

データに欠損値が含まれている場合は、計算できない。オプションとしてna.rm = TRUEを指定すれば、欠損値を除いて平均値を算出してくれる。

a = c(1, 2, 3, NA, 4, 5)

mean(a)
## [1] NA
mean(a, na.rm = TRUE)
## [1] 3

中央値(median)

データを小さい順から並べた場合、つまり、\(X_{1} \le X_{2} \le ... \le X_{n}\)と並べた場合に、中央に位置する値を中央値という。 データの個数を\(n\)とした場合、\(n\)が奇数の場合は\(X_{(n+1)/2}\)\(n\)が偶数の場合は\((X_{n/2}+X_{n/2+1})/2\)が中央値となる。

Rで中央値を求めたい場合は、median()関数が使える。mean()と同じく、カッコ内にデータをベクトルの形式で入れる。

median(iris$Sepal.Length)
## [1] 5.8

3.2.2 散布度

データの散らばり具合を示す値のこと。分散、標準偏差などが知られる。

分散(variance)

分散(\(\sigma^2\))は、以下の式で定義される。すなわち、各変数が平均値から離れている程度を表現したものである。

\[ \sigma^2 = \frac{1}{n-1}\sum_{k=1}^{n}(X_{k}-\bar{X})^2\\ \]

Rで分散を求める際には、var()関数を使う。

var(iris$Sepal.Length)
## [1] 0.6856935

標準偏差(standard deviation)

分散の平方根が標準偏差(\(\sigma\))である。

Rで標準偏差を求める際には、sd()関数を使う。

sd(iris$Sepal.Length)
## [1] 0.8280661

分位数(quantile)

データを小さい順から大きい順に並べ替えたときに、データを分割する値を分位数という。一般的に、四分位数(25%点、50%点[中央値]、75%点で分割した値)が報告によく使われる。

Rでは、quantile()で分位数を求められる。

quantile(iris$Sepal.Length) #デフォルトだと、0%, 25%, 50%, 75%, 100%が表示される) 
##   0%  25%  50%  75% 100% 
##  4.3  5.1  5.8  6.4  7.9
quantile(iris$Sepal.Length, probs = c(0.1, 0.3, 0.5, 0.8, 1.0)) #オプションのprobsで、分割する点を任意に指定することができる。
##  10%  30%  50%  80% 100% 
## 4.80 5.27 5.80 6.52 7.90

3.2.3 要約統計量

以上のように、R には代表値や散布度を求めるための関数が標準で入っているが、これらをまとめて計算してくれるsummary()もある。

summary()に変数を入れると、最小値、最大値、平均、四分位数をまとめて算出してくれる。

summary(iris$Sepal.Length)
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
##   4.300   5.100   5.800   5.843   6.400   7.900

3.2.4 グループごとの集計

グループごとに統計量を集計する場合は、tapply関数を使う。tapply()に、最初に統計量を求めたい変数のベクトル、グループを意味するベクトル、求めたい統計量を入れる。

例えば、サンプルデータのirisには、種を意味するSpeciesが入っている。種ごとに平均や標準偏差などを求める場合には、以下のようにプログラムを書く。

tapply(iris$Sepal.Length, iris$Species, mean) #平均
##     setosa versicolor  virginica 
##      5.006      5.936      6.588
tapply(iris$Sepal.Length, iris$Species, median) #中央値
##     setosa versicolor  virginica 
##        5.0        5.9        6.5
tapply(iris$Sepal.Length, iris$Species, sd) #標準偏差
##     setosa versicolor  virginica 
##  0.3524897  0.5161711  0.6358796
tapply(iris$Sepal.Length, iris$Species, length) #サンプル数
##     setosa versicolor  virginica 
##         50         50         50

3.2.5 表の作り方

カテゴリカル変数の場合、データ全体を把握するために頻度やパーセンテージを知りたいときが多い。

table()関数を使うと、頻度を集計して表にしてくれる。

table(iris$Species) 
## 
##     setosa versicolor  virginica 
##         50         50         50

prop.table()を使うと、パーセンテージを求めてくれる。

tab_iris = table(iris$Species) #まず表を別の名前で保存する
prop.table(tab_iris) #カッコの中に、表を入れる
## 
##     setosa versicolor  virginica 
##  0.3333333  0.3333333  0.3333333

3.3 相関(correlation)

2変数間の関連のことを相関という。相関の強さは相関係数で示される。

変数\(x\)と変数\(y\)の相関係数(\(r\))は、以下の式で求められる。

\[ r = \frac{\sigma_{xy}}{\sigma_{x}\sigma_{y}} \]

\(\sigma_{xy}\)はxとyの共分散(covariance)で、\(\sigma_{xy} = \sum^n_{i=1}(x_{i}-\bar{x})(y_{i}-\bar{y})\)である(\(\bar{x}\)はxの平均)。\(\sigma_{x}\)\(\sigma_{y}\)はxとyそれぞれの標準偏差である。

相関係数は\(-1\)から\(1\)までの範囲をとり得る。相関係数の絶対値が大きいほど、相関関係が強いことを意味する。相関係数\(r\)\(r > 0\)のときは「正の相関」、つまり一方の変数の量が増えればもう一方の変数も増える関係にあることを意味する。\(r < 0\)のときは「負の相関」、つまり一方が増えればもう一方が減るという関係にあることを意味する。

Rで相関係数を求めるには、cor()が使える。カッコの中に、相関係数を求めたい2つの変数を入れれば良い。また、cor.test()を使うと、相関係数の検定などより詳細な結果を示してくれる。

cor(iris$Sepal.Length, iris$Sepal.Width) 
## [1] -0.1175698
cor.test(iris$Sepal.Length, iris$Sepal.Width) 
## 
##  Pearson's product-moment correlation
## 
## data:  iris$Sepal.Length and iris$Sepal.Width
## t = -1.4403, df = 148, p-value = 0.1519
## alternative hypothesis: true correlation is not equal to 0
## 95 percent confidence interval:
##  -0.27269325  0.04351158
## sample estimates:
##        cor 
## -0.1175698

なお、共分散はcov()で求められる。

cov(iris$Sepal.Length, iris$Sepal.Width) 
## [1] -0.042434

補足:

単に「相関係数」というと、一般的には「ピアソンの積率相関係数」のことを指す場合が多い。上で示した例も、ピアソンの積率相関係数を求めている。以降の章でも、特に断りがない限り「相関係数」は積率相関係数を指すものとする。

相関係数にもいくつか種類があり、例えばスピアマンの順位相関係数がある。順位相関係数は、変数を順位に変換した上で(大きい順から1, 2, …と順位を振る)その順位を使って相関係数を求めたものである。データに極端な値(外れ値)がある場合やデータ数が少ない場合は、外れ値を調整してくれる順位相関係数の方が望ましい。

cor()及びcor.test()のオプションで、method =で相関係数の算出法を指定することができる。

cor(iris$Sepal.Length, iris$Sepal.Width, method = "spearman") 
## [1] -0.1667777

何も指定しなければ、デフォルトでピアソンの積率相関係数を計算してくれる。


確認問題

irisデータを使って、代表値、散布度、相関係数の求め方を復習する。

問1

Petal.LengthPetal.Widthそれぞれの平均値と標準偏差を求めよう。

問2

Petal.LengthPetal.Widthの共分散を求めよう。

ヒント:cov()で2つの変数を入れると求まる。

問3

問1で求めた標準偏差と、問2で求めた共分散を使って、2変数の間の相関係数を求めよう。
また、cor()でもPetal.LengthPetal.Widthの相関係数を求め、値が一致することを確かめよう。

ヒント:相関係数の式を確認して、相関係数を求める。