Rを利用して スチューデント化された範囲の統計量 を求めます。
始めにサンプルデータを作成します。
seed <- 20250520
set.seed(seed)
# グループ数
k <- 3
# 各グループのサンプルサイズ
n_per_group <- 5
# 各グループのデータを生成
# グループ1: 平均 約20, 標準偏差 約3
group1_data <- rnorm(n_per_group, mean = 20, sd = 3)
# グループ2: 平均 約25, 標準偏差 約3
group2_data <- rnorm(n_per_group, mean = 25, sd = 3)
# グループ3: 平均 約22, 標準偏差 約3
group3_data <- rnorm(n_per_group, mean = 22, sd = 3)
# 全データをリストにまとめる
all_data_list <- list(
group1 = group1_data,
group2 = group2_data,
group3 = group3_data
)
# 全データ数を計算
N_total <- k * n_per_group
# 生成されたデータを表示
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続いて各グループの平均値を求めます。
group_means <- numeric(k)
for (i in 1:k) {
group_means[i] <- mean(all_data_list[[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) を計算
ss_within_groups <- numeric(k)
for (i in 1:k) {
group_data <- all_data_list[[i]]
mean_g <- mean(group_data)
ss_within_groups[i] <- sum((group_data - mean_g)^2)
}
# 全体の誤差平方和 (SSE)
SSE <- sum(ss_within_groups)
# 誤差の自由度 (DFE)
DFE <- N_total - k
# プールされた分散 (MSE)
pooled_variance_MSE <- SSE / DFE
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) ※各グループのサンプルサイズが等しい場合
standard_error_SE <- sqrt(pooled_variance_MSE / n_per_group)
print("--- 標準誤差 (SE) ---")
print(paste("標準誤差 (SE):", round(standard_error_SE, 4)))[1] "--- 標準誤差 (SE) ---"
[1] "標準誤差 (SE): 1.6217"標本平均の最大値と最小値の差(範囲)を求めます。
max_mean <- max(group_means)
min_mean <- min(group_means)
range_of_means <- max_mean - min_mean
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 を求めます。
q_statistic <- range_of_means / standard_error_SE
print("--- スチューデント化された範囲の統計量 q ---")
print(paste("q統計量:", round(q_statistic, 4)))[1] "--- スチューデント化された範囲の統計量 q ---"
[1] "q統計量: 4.3008"以上です。

