Rを利用して スチューデント化された範囲の統計量 を求めます。
始めにサンプルデータを作成します。
<- 20250520
seed set.seed(seed)
# グループ数
<- 3
k
# 各グループのサンプルサイズ
<- 5
n_per_group
# 各グループのデータを生成
# グループ1: 平均 約20, 標準偏差 約3
<- rnorm(n_per_group, mean = 20, sd = 3)
group1_data # グループ2: 平均 約25, 標準偏差 約3
<- rnorm(n_per_group, mean = 25, sd = 3)
group2_data # グループ3: 平均 約22, 標準偏差 約3
<- rnorm(n_per_group, mean = 22, sd = 3)
group3_data
# 全データをリストにまとめる
<- list(
all_data_list group1 = group1_data,
group2 = group2_data,
group3 = group3_data
)
# 全データ数を計算
<- k * n_per_group
N_total
# 生成されたデータを表示
print("--- 生成されたサンプルデータ ---")
print(all_data_list)
[1] "--- 生成されたサンプルデータ ---"
$group1
[1] 27.82400 18.48560 19.35952 19.91222 15.31239
$group2
[1] 28.37961 31.20826 25.99102 22.84083 27.34637
$group3
[1] 21.74628 17.70076 25.44748 23.75106 21.20979
続いて各グループの平均値を求めます。
<- numeric(k)
group_means for (i in 1:k) {
<- mean(all_data_list[[i]])
group_means[i]
}names(group_means) <- paste0("group", 1:k)
print("--- 各グループの平均値 ---")
print(group_means)
[1] "--- 各グループの平均値 ---"
group1 group2 group3
20.17874 27.15322 21.97107
分散分析における誤差の平均平方 (Mean Squared Error, MSE) を求めます(以降「プールされた分散」)。
# MSE = SSE / DFE
# SSE (Sum of Squares for Error) = sum_i sum_j (x_ij - mean(x_i))^2
# DFE (Degrees of Freedom for Error) = N_total - k
# 各グループの偏差平方和 (Sum of Squares Within) を計算
<- numeric(k)
ss_within_groups for (i in 1:k) {
<- all_data_list[[i]]
group_data <- mean(group_data)
mean_g <- sum((group_data - mean_g)^2)
ss_within_groups[i]
}
# 全体の誤差平方和 (SSE)
<- sum(ss_within_groups)
SSE
# 誤差の自由度 (DFE)
<- N_total - k
DFE
# プールされた分散 (MSE)
<- SSE / DFE
pooled_variance_MSE
print("--- プールされた分散 (MSE) ---")
print(paste("SSE (誤差平方和):", round(SSE, 4)))
print(paste("DFE (誤差の自由度):", DFE))
print(paste("プールされた分散 (MSE):", round(pooled_variance_MSE, 4)))
[1] "--- プールされた分散 (MSE) ---"
[1] "SSE (誤差平方和): 157.7918"
[1] "DFE (誤差の自由度): 12"
[1] "プールされた分散 (MSE): 13.1493"
標準誤差 (Standard Error, SE) を求めます。
# SE = sqrt(MSE / n_per_group) ※各グループのサンプルサイズが等しい場合
<- sqrt(pooled_variance_MSE / n_per_group)
standard_error_SE
print("--- 標準誤差 (SE) ---")
print(paste("標準誤差 (SE):", round(standard_error_SE, 4)))
[1] "--- 標準誤差 (SE) ---"
[1] "標準誤差 (SE): 1.6217"
標本平均の最大値と最小値の差(範囲)を求めます。
<- max(group_means)
max_mean <- min(group_means)
min_mean <- max_mean - min_mean
range_of_means
print("--- 標本平均の範囲 ---")
print(paste("最大平均値:", round(max_mean, 4)))
print(paste("最小平均値:", round(min_mean, 4)))
print(paste("平均値の範囲:", round(range_of_means, 4)))
[1] "--- 標本平均の範囲 ---"
[1] "最大平均値: 27.1532"
[1] "最小平均値: 20.1787"
[1] "平均値の範囲: 6.9745"
最後にスチューデント化された範囲の統計量 q を求めます。
<- range_of_means / standard_error_SE
q_statistic
print("--- スチューデント化された範囲の統計量 q ---")
print(paste("q統計量:", round(q_statistic, 4)))
[1] "--- スチューデント化された範囲の統計量 q ---"
[1] "q統計量: 4.3008"
以上です。