Rで学ぶ統計学(標準化)

プログラミング

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

今回は、平均値と標準偏差を用いて計算する、標準化についてお伝えします!

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

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

統計の理論を解説

標準化とは

標準化とは、平均と標準偏差がある特定の値になるように、全てのデータの値を、同じ数式の処理によって変換することを言います。

標準化された得点のことを標準得点といいます。標準得点のなかでも特に重要なのが、平均が0、標準偏差が1になるように変換した標準得点のことです。これをz得点といいます。

z得点の計算は以下のように行います。


$$z得点 = \frac{データの値 – 平均}{標準偏差}$$


上記の計算をすることにより、平均が0、標準偏差が1になります。なぜ、データから平均を引いて、標準偏差で割るとそうなるのかを次で考えてみます。

z得点の式について

数理統計学を用いて厳密な証明をすることもできるのですが、難しくなってしまうのでなぜそうなるのかを実感できれば良しとしましょう。こここでは、データが \({x_1, x_2, x_3, … , x_n}\)でn個あり、平均値を\(\mu\)、標準偏差を\(\sigma\)とします。

まずは、平均が0になることを考えて見ましょう。z得点の平均値を計算してみると、

\begin{align}
z得点の平均 &= \frac{\sum_{i=0}^n (\frac{x_i – \mu}{\sigma})}{n} \\
&= \frac{1}{\sigma} \frac{\sum_{i=0}^n x_i – \sum_{i=0}^n \mu}{n} \\
&= \frac{1}{\sigma} (\frac{\sum_{i=0}^n x_i}{n} – \frac{\sum_{i=0}^n \mu}{n}) \\
&= \frac{1}{\sigma} (\mu – \frac{n \cdot \mu}{n})  \\
&= 0
\end{align}

となり、z得点の平均値が0となることが示されました。

次に、z得点の標準偏差が1になることを示してみます。先程、平均値が0で有ることが示されたので、そちらを使ってみましょう。z得点の標準偏差を計算してみると

\begin{align}
z得点の標準偏差 &= \sqrt{\frac{\sum_{i=0}^n \{ (\frac{x_i – \mu}{\sigma}) -0\}^2}{n}} \\
&= \sqrt{\frac{\sum_{i=0}^n (\frac{x_i – \mu}{\sigma})^2}{n}} \\
&= \sqrt{\frac{\sum_{i=0}^n (x_i – \mu)^2}{\sigma ^2 \cdot n}} \\
&= \frac{1}{\sigma} \sqrt{\frac{\sum_{i=0}^n (x_i – \mu)^2}{n}}
\end{align}

となります。ここで、\(\sqrt{\frac{\sum_{i=0}^n (x_i – \mu)^2}{n}}\)はもともとのデータの標準偏差を表すので、\(\sigma\)と同じです。つまり、

\begin{align}
z得点の標準偏差 &= \frac{1}{\sigma} \sqrt{\frac{\sum_{i=0}^n (x_i – \mu)^2}{n}} \\
&= \frac{1}{\sigma} \cdot \sigma \\
&= 1
\end{align}

となって、z得点の標準偏差が1となることが示されました。

Rで実践

Rで標準化

まずはもととなるデータを格納した変数を作りましょう。サンプルとして、20人の数学のテスト点数のデータを代入します。

> math_test = c(69, 54, 67, 65, 73, 59, 82, 59, 58, 78, 94, 94, 72, 59, 53, 80, 60, 93, 80, 71)
> math_test
 [1] 69 54 67 65 73 59 82 59 58 78 94 94 72 59 53 80 60 93 80 71

これでmath_testという変数に、テストデータのベクトルが代入されました。次に平均値と標準偏差を計算してみましょう。

> math_test_mean <- mean(math_test) #平均値
> math_test_mean
[1] 71
> math_test_sd <- sqrt(mean((math_test - math_test_mean)^2)) #標準偏差
> math_test_sd
[1] 12.78671

平均値はmean()で計算できるのでした。標準偏差の計算は少し面倒ですが、「偏差の2乗の平均」が分散で、「分散の平方根」が標準偏差であるとしっかり覚えておきましょう。

それではz得点を求めてみます。

> z_score <- (math_test-math_test_mean)/math_test_sd 
> z_score
 [1] -0.15641238 -1.32950521 -0.31282475 -0.46923713  0.15641238 -0.93847426
 [7]  0.86026808 -0.93847426 -1.01668045  0.54744332  1.79874234  1.79874234
[13]  0.07820619 -0.93847426 -1.40771140  0.70385570 -0.86026808  1.72053615
[19]  0.70385570  0.00000000

これでz得点が求まりました。z得点の特徴としては、

  • 平均値が0
  • 標準偏差が1

というのがありました。本当に正しく計算ができているかを確かめてみましょう。

> mean(z_score) #平均値
[1] 1.734723e-17
> sqrt(mean((z_score - mean(z_score))^2)) #標準偏差
[1] 1

標準偏差は正しく1となりましたが、平均値の値が0になりません。どこかで間違えてしまったのでしょうか?

じつは、これは正しく計算ができています。\(1.734723e-17\)というのは、\(1.734723×10^{-17}\)のことを表しており、ほとんど0に近い値です。

きっかり0にならないのは、丸め誤差が影響しています。丸め誤差というのは、桁数の多い数値をどこかで止めてしまった時(切り捨て、切り上げ、四捨五入等)に生じてしまう誤差です。それ以降の桁の計算を正しく計算することができないので、このような値になってしまうのです。

 

次の記事はこちら↓

Rで学ぶ統計学(相対度数分布表・ヒストグラム)
統計学の【相対度数分布表・ヒストグラム】について、Rで実践しながら解説!

コメント・質問

タイトルとURLをコピーしました