はじめに
これまで正規分布を使って検定や推測を実施してきました。やっていく中で、ん???結局正規分布ってなんだっけって部分が増えてきたので、ここで立ち止まって改めて標準正規分布・正規分布に関して学ぼうと思います!
そもそもなんで正規分布が必要なのか?
そもそもなんで、正規分布が必要なのか??
→それはバラバラのデータを比較しやすくするため。
例えば平均点80点の国語のテストで80点、平均点60点の数学のテストで80点。
→この場合、同じ80点でも数学の80点の方が価値ありそうですよね。
では、平均点70点の国語のテストで80点、平均点60点の数学のテストで70点。
→これは、どっちの方が価値が高い??平均点から同じ10点離れているから、同一の価値?
では、平均点10点のテストで国語20点。平均点990点のテストで数学1000点。
→これは平均点から共に10点離れているから同一の価値?国語は平均点から倍、数学は誤差の範疇。本当に同じ価値??
比較する時に平均や点数は異なるので、一概に比較ができません。
そこで、比較する時に同一の基準を持たせる必要があります。そこで、異なる指標のものでも標準化して、比較しやすくする必要があります。
異なるデータの基準を揃える
国語と数学の平均点やばらつき(標準偏差)が違うため、そのままでは比較が難しいです。
そのために標準化を実施します。
で、どうやって標準化するの??🤔が次の話です。
1. 標準化の目的
標準化の目的は、「データを比較しやすくする」こと。
これを達成するには、データを「基準を揃えた形」に変換する必要がある。
• 平均を揃える
• データの中心(基準点)を同じにするために、「データ全体の平均」を引く。
• これで、「どれだけ平均から離れているか」を基準にできる。
• ばらつきを揃える:
• データの広がり(ばらつき)を揃えるために、「標準偏差」で割る。
• これで、どのデータも「どれくらい平均から遠いか」を同じ単位で表現できる。
2. 平均が必要な理由:基準点を揃える
平均は、データ全体の「中心」を表します。
標準化する際に、各データから平均を引くのは、データの基準点を「ゼロ」に揃えるためです。
例:国語と数学の比較
• 国語のデータ:80点(平均70)
• 平均を引くと、 80 - 70 = 10 → 平均から10点上。
• 数学のデータ:60点(平均50)
• 平均を引くと、 60 - 50 = 10 → 平均から10点上。
なぜ平均を引くの?
• 平均を引くことで、「そのデータが中心(平均)からどれだけ離れているか」を明確にできます。
• これが標準化の第一ステップで、データを「基準ゼロ」に揃える操作です。
3. 標準偏差が必要な理由:ばらつきを揃える
標準偏差(\sigma)は、データの「ばらつき(散らばり具合)」を表します。
標準化では、平均からの差を標準偏差で割ることで、データのばらつきを統一します。
例:国語と数学のばらつき
• 国語:標準偏差10 → 「1標準偏差」は10点の広がりを意味する。
• 数学:標準偏差5 → 「1標準偏差」は5点の広がりを意味する。
なぜ標準偏差で割るの?
• データのばらつきが違うと、比較が不公平になる。
• 国語は「±10点」が普通の範囲(ばらつきが大きい)。
• 数学は「±5点」が普通の範囲(ばらつきが小さい)。
• 標準偏差で割ることで、どちらも「1標準偏差がどれだけの大きさか」という同じ基準で扱えるようになる。
計算結果
\begin{align}
• 国語: z = \frac{80 - 70}{10} = 1 → 平均より「1標準偏差」上。 \\
• 数学: z = \frac{60 - 50}{5} = 2 → 平均より「2標準偏差」上。 \\
\end{align}
正規分布、標準正規分布の図の可視化
では、Rで数学と国語の正規分布を表示します。今回は下記の国語と数学の結果を表示します。
•国語(Kokugo)
・平均: \mu = 70
・標準偏差: \sigma = 10
•数学(Math)
•平均: \mu = 50
•標準偏差: \sigma = 5
# 必要なパッケージを読み込む(初回のみインストール)
if(!require(ggplot2)) install.packages("ggplot2", dependencies = TRUE)
library(ggplot2)
# データの設定
# 国語: 平均70, 標準偏差10
mu_kokugo <- 70
sigma_kokugo <- 10
# 数学: 平均50, 標準偏差5
mu_math <- 50
sigma_math <- 5
# x軸の範囲を設定
x_kokugo <- seq(40, 100, by = 0.1) # 国語のスコア範囲
x_math <- seq(30, 70, by = 0.1) # 数学のスコア範囲
# 正規分布の確率密度を計算
y_kokugo <- dnorm(x_kokugo, mean = mu_kokugo, sd = sigma_kokugo)
y_math <- dnorm(x_math, mean = mu_math, sd = sigma_math)
# 国語と数学のデータを結合
data <- data.frame(
Score = c(x_kokugo, x_math),
Density = c(y_kokugo, y_math),
Subject = rep(c("Kokugo", "Math"), c(length(x_kokugo), length(x_math)))
)
# 正規分布をプロット
ggplot(data, aes(x = Score, y = Density, color = Subject)) +
geom_line(size = 1) +
labs(title = "Normal Distribution of Math and Kokugo",
x = "Score",
y = "Probability Density",
color = "Subject") +
theme_minimal() +
scale_color_manual(values = c("blue", "red"))
では、次に標準正規分布に落とし込みます。
# 必要なパッケージをインストール&読み込む(初回のみインストールが必要)
if(!require(ggplot2)) install.packages("ggplot2", dependencies = TRUE)
library(ggplot2)
# データ入力
# 教科ごとの平均値と標準偏差
mu_kokugo <- 70 # 国語の平均
sigma_kokugo <- 10 # 国語の標準偏差
mu_math <- 50 # 数学の平均
sigma_math <- 5 # 数学の標準偏差
# 点数の範囲を設定
x_kokugo <- seq(40, 100, by = 0.1) # 国語のスコア範囲
x_math <- seq(30, 70, by = 0.1) # 数学のスコア範囲
# 標準化したスコアを計算
z_kokugo <- (x_kokugo - mu_kokugo) / sigma_kokugo
z_math <- (x_math - mu_math) / sigma_math
# 標準正規分布の確率密度を計算
y_z_kokugo <- dnorm(z_kokugo, mean = 0, sd = 1)
y_z_math <- dnorm(z_math, mean = 0, sd = 1)
# 標準正規分布のデータを結合
z_data <- data.frame(
Z_Score = c(z_kokugo, z_math),
Density = c(y_z_kokugo, y_z_math),
Subject = rep(c("Kokugo", "Math"), c(length(z_kokugo), length(z_math)))
)
# データフレームの内容を表示
cat("Data Frame Head (First 6 rows):\n")
print(head(z_data)) # データの先頭部分を表示
cat("\nSummary of Data Frame:\n")
print(summary(z_data)) # データの要約統計量を表示
# 標準正規分布をプロット
ggplot(z_data, aes(x = Z_Score, y = Density, color = Subject)) +
geom_line(size = 1) +
labs(title = "Standard Normal Distribution of Math and Kokugo",
x = "Standardized Score (Z-Score)",
y = "Probability Density",
color = "Subject") +
theme_minimal() +
scale_color_manual(values = c("blue", "red"))
最後に
なるほど。なんとなくわかってきた💡比較する時に平均や分散が異なるとそのままで比較できないから、標準化しようって話なのか。
あれ???でも、標準化する必要性はわかったけど、なんで?確率と関係が出てくるのか?信頼区間の算出の時に、標準正規分布使っているけど、直接関係なくない???😅なので、次は標準正規分布と確率の関係性を解き明かしていきます。