Skip to Main Content

★手計算とRで学ぶ統計学: 統計量の基本

「なぜ統計学が必要か」という問いをひもとき,実践を通じて読者の方と統計学の心理的距離を縮めるガイドです。

記述統計と推測統計

統計解析には,図示やデータの特徴を表す数値の算出によって実際に取ってきたデータの特徴をとらえる記述統計と実際に取ってきたデータ (母集団の一部から抽出) を用いて母集団の特性を推定・推測する推測統計の大きく2つに分けられます。

「統計学」というとついつい推測統計を重要視してしまいがちです。しかし,「この実験で使用したサンプルはどのような特徴を持っているのか」「なにかおかしいデータ (※1) はないか」をみることができる記述統計もまた重要です。
ここでは,記述統計で用いられるデータの代表値 (要約統計量) をいくつか紹介します。

(※1) ここでいう「なにかおかしいデータ」は実験前の仮説にそぐわないデータではなく,明らかに実験時の不都合によって生じたと考えられるデータを指します。心理学の実験や調査を例にすると,「明らかに教示を理解していないな」「同じ選択肢を連打したな」という参加者のデータは,一発でそれとわかる特徴的なパターンをとるため,「なにかおかしいデータ」と判断して削除します。

要約統計量

ここでは,以下の表に示すデータを使って要約統計量とその計算方法を紹介します。みなさん大嫌い\(\sum \)記号も登場しますが心配ご無用です。
ここでは,とある大学院生が10日間で使った昼食代のデータを例に要約統計量を紹介します。

数字の羅列である生データだけを見て,そのデータの特徴を推測することは容易ではありません。
これから紹介する要約統計量を見ることで,今手元にあるデータがどのような特徴を持っているのかを容易に把握することができるようになります。

平均は,データの総和をデータの個数で割った値のことです。一般的にはデータの中間的な値を表すと表現されます。これは文系・理系を問わず日常生活でもよく目にする値だと思います。

しかし,極端に他の値より高い/低いもの (外れ値) が存在する場合には外れ値の影響を強く受けるため,外れ値が存在する場合には平均がデータの特徴を十分に表現できないこともあります (例: 日本人の平均収入)。
\begin{align}
\overline x &= \frac{データの合計値}{データの個数}\\
&= \frac{x_{1} + x_{2} + ... + x_{n}}{n} \\
&= \frac{1}{n} \sum_{i = 1}^n x_{i} \\
&n: データの個数 (サンプルサイズ) \\
&x_{i}: i番目のデータ
\end{align}

実際に,先ほど示したデータの平均を計算すると,以下の式のようになります。
ここから,10日間の平均昼食代が383円であることがわかりました。

\begin{align}
\overline x &= \frac{400 + 360 + 350 + 400 + 380 + 380 + 360 + 300 + 400 + 500}{10}\\
&= \frac{3830}{10} \\
&= 383
\end{align}

○標本分散
標本分散は,偏差 (データの値平均値 ) の二乗の平均値です。データがどれだけばらついているかの指標として用いられます。標本分散は以下の式で計算します。

\begin{align}
s^2 &= \frac{偏差 (データ - 平均) の二乗の総和}{データの個数} \\
&= \frac{(x_1 - \overline x)^2 + (x_2 - \overline x)^2 + ... + (x_i - \overline x)^2}{n} \\
&= \frac{1}{n}\sum^{n}_{i=1}(x_i - \overline x)^2 \\
&n: サンプルサイズ (データの個数) \\
&x_{i}: i番目のデータ \\
&\overline x: xの平均
\end{align}

マイナスの値が出ると計算上不便なので,偏差を二乗することで全てプラスの値にします。偏差の平均をとることで,「データがどれくらい平均値からずれているか」を求めることができます。

先ほど示したデータの標本分散は,以下の式で計算されます。

\begin{align}
s^2&= \frac{(400 - 383)^2 + (360 - 383)^2 + ... + (500 - 383)^2}{10} \\
&= 2361
\end{align}


○標準偏差
標準偏差は,標本分散の平方根をとったものです。分散と同じくデータのばらつき度合いの指標となります。
分散の方が計算が簡単なので,分散→標準偏差 という順序で計算することが一般的です。

\begin{align}
s &= \sqrt{s^2}
\end{align}

先ほど示したデータの標準偏差は以下の式に示すとおりです。
\begin{align}
s &= \sqrt{2361} \\
&= 48.59
\end{align}

中央値は,データを大きさの順番に並べ替えたときちょうど真ん中に位置するような値です。平均値と異なり,外れ値の影響を受けにくいという長所があります。また,データ数が奇数か偶数かによって求め方が異なります。

・データ数が奇数 \((2a-1)\) の場合
まずデータを小さい順に並べ替えます。そして,\(2a-1 = n \left(n: データ数\right)\) の方程式の解となる値\(a\)を求め,\(a\)番目の値を中央値とします。

・データ数が偶数 \((2a)\) の場合
データ数が奇数の時と同様に,データを小さい順に並べ替えます。そして,\(2a = n \left(n: データ数\right)\) の方程式の解となる\(a\)を求め,\(a\)番目のデータと\(a + 1\)番目のデータの平均を中央値とします。

最頻値は,読んで字のごとくデータに最も頻繁に登場する値 (つまり,最も多く存在する値) のことです。前に紹介した3つよりはデータ分析で出現する機会は多くないですが,データの特徴を知るためには重要な値です。
データ数が少ない場合は地道に数えて求めることもできます (例として使用したデータの最頻値は400円です。実際に数えてみましょう)。

データ数が多い場合はExcelのMODE関数やR (※1) を使って求めましょう。

(※1) Rにはなぜか最頻値を一発で求めてくれる関数がありません。table関数でそれぞれの要素の頻度を求め,その中で一番多いものをwhich.max() 関数で求めるというやや強引な手法はあります。

★分散と不偏分散の違い

統計学の教科書を見ると,多くの場合「分散」と「不偏分散」の2つが紹介されています。Excelでも「分散」によって標準偏差を求めるSTDEV.P関数と「不偏分散」によって標準偏差を求めるSTDEV.S関数の2つが用意されています。
この2つの関数は,「手元にあるデータを母集団とするか,母集団から得られたサンプルとするか」に違いがあります。STDEV.Pは手元にあるデータを母集団とした分散をもとに標準偏差を求めます。一方,STDEV.S関数は手元にあるデータは母集団の一部として不偏分散を計算し,不偏標準偏差を求めます。

なぜ2つの分散を使う必要があるかを考えるためには,私たちがデータ分析で何をしたいのかに立ち返らないといけません。
私たちは手元にある限られた数のデータから母集団の性質を知るためにデータ分析を行っています。
電球を生産する工場で,「生産された電球の寿命がどれくらいか」を知るために全ての電球を検査していると出荷する頃にはどれも寿命が尽き,使い物にならなくなってしまいます。そのため,工場で生産された電球 (= 母集団) の中からいくつかの電球を抽出し,平均寿命や標準偏差を求めることで「この工場で生産した電球の平均寿命は○○時間で,標準偏差は△△である」と母集団の性質 (この場合は電球の寿命) を推測します。

母集団の平均値を母平均,母集団の分散を母分散といいます。母分散は以下の式のように表されます。

\begin{align}
\sigma ^2&= \frac{偏差\;(データ\;-\;母平均)\;の2乗の総和 }{母集団の大きさ} \\
&= \frac{(x_1-\mu)^2\;+\;(x_2-\mu)^2\;+...+\;(x_m-\mu)^2\;}{m} \\
&=\frac{1}{m} \sum_{i=1}^m\left(x_{i}-\mu\right)^2\\
&m: 母集団の大きさ\\
&x_{i}: i番目のデータ\\
&\mu: 母平均
\end{align}

一方,手元のデータからは母平均も母分散もわかりません。そのため,標本平均を用いて母平均や母分散を推定する必要があります。
ところが,手元のデータから得られる「分散」は母分散の推定値にならない (不偏性がない),つまり母集団の分散として使えないことがわかっています。そこで,偏差の二乗和を自由度 (サンプルサイズ-1) で割った値を不偏分散として,母分散の推定値とします。不偏分散は以下の式で表されます。

\begin{align}
u ^2 &= \frac{偏差\;(データ\;-\;データの平均)\;の2乗の総和 }{データの個数\;-\;1} \\
&= \frac{(x_1-\overline{x})^2\;+\;(x_2-\overline{x})^2\;+...+\;(x_n-\overline{x})^2\;}{n-1} \\
&=\frac{1}{n-1} \sum_{i=1}^n\left(x_{i}-\overline{x}\right)^2\\
&n: データの個数 (サンプルサイズ)\\
&x_{i}: i番目のデータ\\
&\overline{x}: データの平均
\end{align}

先ほどExcelで標準偏差を求める関数が二種類ある,と紹介しましたが,Rで標本分散を求めるときはどのように計算すればよいのでしょうか?

実は,Rで分散を求めるvar関数は不偏分散を求めるためのものです。そのため,STDEV.P関数と同じように標本の分散を計算するときには少し工夫が必要です。とある大学院生の昼食代データを使って計算例を示します。

# データを変数lunchに代入
lunch <- c(400, 360, 350, 400, 380,
           380, 360, 300, 400, 500)

# 標本分散を求める
((length(lunch) - 1) / length(lunch))* var(lunch)

# 標本の標準偏差を求める
sqrt(((length(lunch) - 1) / length(lunch))* var(lunch))

上記のコードを走らせると,標本分散は2361,標準偏差は48.59という値になりました。Excelを使って検算しても同じ値が出ます (※1)

では,どのような計算のもと計算を行ったかを紹介します。
不偏分散は標本分散を求める式の分母を\(n-1\)に置き換えたものです。つまり,標本分散を求めるためには\(n-1\)という値を消さないといけません。そのため,オレンジで示した係数 (Rのコードでは (length(lunch) - 1) / length(lunch)) )をかけて標本分散の式の形を作ります。length(lunch) はデータを格納したベクトルの長さ,つまりデータの個数を表しています。

\begin{align}
\frac{1}{n-1}&\cdot\textcolor{#ff6633}{\frac{n-1}{n}} \sum_{i=1}^n(x_i-\overline{x})^2 \\
&=\textcolor{#ff6633} {{\frac{n-1}{n}}}u^2 \\
&=\frac{1}{n}\sum_{i=1}^n(x_i-\overline{x})^2\\
&=s^2
\end{align}

(※1) 今回はSTDEV.P関数の結果のみを検討しました。分散は標準偏差の二乗なので,標準偏差が同じ値になっていれば分散も同じ値になるだろう,と考えることができます。