Rで学ぶ統計学(平均・分散・標準偏差)

プログラミング

R言語を用いて、実践的に統計学を解説します。

今回は一つの変数について、資料を特徴付ける指標を学びます。これにより、手持ちのデータについて、どのような特徴をもつのかを客観的に記述することができるでしょう。

まずは統計の理論的な話を解説し、次にRを用いてアウトプットしていきます。

その他の記事はこちらから↓

Rで学ぶ統計学 基本から統計とプログラミングを学ぶ!
はじめての人でもわかるように、Rで統計学を実践的に解説します!

統計の理論

記述統計と推測統計とは

統計学は記述統計と推測統計にわかれます。

  • 記述統計は、「持っているデータの特徴を抽出し、記述するため」
  • 推測統計は、「持っているデータから、次に得られるデータの特徴を推測するため」

にあります。

統計学において重要なのが推測統計です。ですが基本となる記述統計を勉強していないと、推測統計を理解することができません。

今回は、記述統計の中でも、1変数の場合について解説します。重要な統計指標を確認しつつ、Rの使い方に慣れていきましょう!

重要統計指標

平均値

平均については、知っている人も多いでしょう。平均点というのは、合計を個数で割り、ひとつあたりの数を計算したものです。


$$平均値 = \frac{データ総和}{データ個数}$$


例えば、\([ 3, 6, 2, 10, 4 ]\)という5つの数字のデータがあった場合、平均値は

\begin{align}
平均値 &= \frac{3+6+2+10+4}{5} \\
&= 5
\end{align}

となります。

平均値は、データの分布を考えたときに中心的な位置を表します。このように、データを代表する値のことを代表値といいます。平均値は代表値の1種ということです。

データの持つ特徴を一つの数値にまとめることを数値要約といいます。この場合は、代表値である平均値をもって数値要約をしているのです。

数値要約の詳しいことはこちら↓
Rで学ぶ統計学(数値要約)

分散

「それぞれのデータ」と「平均」との差を偏差と言います

先程の [ 3, 6, 2, 10, 4 ] という5つの数字のデータがあった場合、平均値は5でした。5つのデータすべてから、5を引くと偏差が求まります。
ここでは [ -2, 1, -3, 5, -1 ] という5つの値がそれぞれ偏差となります。

これらの偏差を2乗してから全て足して、個数の5で割ったものが分散です。


\begin{align}
分散 &= 偏差^2 の平均\\
&= \frac{偏差^2の総和}{データ個数}
\end{align}


[ 3, 6, 2, 10, 4 ]というデータで具体的に計算してみると、

\begin{align}
分散 &= [-2, 1, -3, 5, -1]の2乗 の平均\\
&= \frac{4+1+9+25+1}{5} \\
&= 8
\end{align}

となり、分散が求まりました。

標準偏差

分散の平方根を取ったものを標準偏差といいます。


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


先程の具体例では分散が8とわかったので、このときの標準偏差は

\begin{align}
標準偏差 &= \sqrt{8}\\
&= 2\sqrt{2}
\end{align}

となります。

分散と標準偏差の意味

データの特徴を調べるなら、平均値だけわかれば良さそうなのに、なぜ分散と標準偏差を求めるのでしょうか?

平均値のような代表値は「分布の中心的位置を表す代表的な値」のことです。しかし、データにどれだけの散らばりがあるか、ということは代表値だけではわかりません

例えば、平均点が50点のテストについて考えてみましょう。
「0点の人と100点の人がたくさんいた結果、平均が50になる」のと、「50点の人がたくさんいた結果、平均が50点になる」のでは、データの分布が全く異なります。

このように、どれだけデータが「散らばりを持つのか」を散布度といいます。この散布度を表す統計量が分散標準偏差なのです。

Rでの練習

まずはRを起動しましょう。もととなるデータを変数に格納します。今回は、説明のときに使った具体例を使用しました。

> test <- c(3,6,2,10,4)
> test
[1]  3  6  2 10  4

testという変数に、[3,6,2,10,4]というベクトルを代入しました。

データをc( )で囲むことでベクトルになります。これに、「<-」を使うことでtestに代入できるのです。これで、複数の値を同時に操作する準備が整いました。

最後にtestにベクトルが代入できたかを確認しています。

Rで平均値

次にRで平均値を求めてみます。

> sum(test) #合計を求める
[1] 25
> length(test) #要素数を求める
[1] 5
> sum(test)/length(test) #平均を求める
[1] 5

sum( )を使うと、ベクトルの合計値を得られます。
length( )はベクトルの要素の数を求める関数です。

これによって、平均値の計算ができました。しかし、毎回この計算をするのは面倒なので、一発で平均値を求める関数「mean( )」があります。

> mean(test) #平均を求める
[1] 5

Rで分散

まずは偏差(deviation)を求めてみましょう。

> test_deviation <- test - mean(test)
> test_deviation
[1] -2  1 -3  5 -1

ここでは、ベクトルであるtestから、平均値 を引いています。

ベクトルから一つの値を引くときは、ベクトルの全ての要素から引かれます。つまり、
[3, 6, 2, 10, 4] – 5

[3-5, 6-5, 2-5, 10-5, 4-5]

[-2, 1, -3, 5, -1]
となります。

これで、全ての偏差を持つ変数test_deviationができました。次は分散(variance)を計算しましょう。

> test_variance <-  mean(test_deviation^2)
> test_variance
[1] 8

偏差の2乗の平均を計算し、test_varianceに代入しています。

^2をつけることで、2乗を計算することができます。 test_deviation^2により、ベクトルの全ての要素の2乗を計算してベクトル化しています。その後、平均をとって分散を計算しているのです。

分散も一発で求める関数があります。var( )です。

> var(test)
[1] 10

しかし先程と答えが変わってしまいました。実はvar( )で求める分散は不偏分散と呼ばれるもので、 先程計算した\(8\)とは異なっているのです。

8と求められた分散は標本分散といい、偏差の2乗の平均のことです。つまり、偏差2乗の合計を「データの個数」で割っています。
不偏分散は、偏差の2乗の合計を「データの個数-1」で割って求めています。実際に計算してみると、10で正しいことがわかりますね。

難しくなってしまうので、不偏分散の解説は別の記事で行います。

Rで標準偏差

分散をもとめたので、ルートを取ることで標準偏差(standard deviation)を求めましょう。

> test_sd <- sqrt(test_variance) 
> test_sd
[1] 2.828427

sqrt( )で平方根を計算することができます。今回のように、答えが無理数となる場合は、上記の様に途中で値が終わってしまいます。\(2\sqrt{2}\)が答えとなるはずでしたが、\(2.828427\)となりました。

分散を用いなくても、sd()を使うとすぐに計算することができます。

> sd(test)
[1] 3.162278

これも値が異なってしまいました。先程の不偏分散の値を使って計算しているので、先程計算した標準偏差の値は、sd()を使って求めた値から\(\sqrt{\frac{データ数-1}{データ数}}\)倍した値になっています。実際に確かめてみると

> sd(test) * (sqrt((length(test)-1) / length(test)))
[1] 2.828427

となり、正しい値が得られました。

おわりに

基本的な統計指標と、Rでの実践を解説しました。

自分の手を動かしてアウトプットすることで知識は定着していきます。統計とRの勉強が同時にできるので、ぜひ頑張ってください!

 

次の記事はこちらから↓

Rで学ぶ統計学(数値要約)
統計学の【数値要約】について、Rで実践しながら解説!

コメント・質問