using Pkg
Pkg.add("Statistics")
using Statistics
function grubbs_test(data::Vector{Float64}, alpha::Float64)
n = length(data)
if n < 3
error("Sample size must be at least 3 for Grubbs' test")
end
g_critical = 1.933
mean_val = mean(data)
std_dev = std(data, corrected=true) # 使用n-1计算样本标准差
# 计算每个点与均值的绝对差值,并除以标准差,然后找出最大的g值
g_values = abs.(data .- mean_val) ./ std_dev
g_max = maximum(g_values)
# 判断是否存在离群值
if g_max > g_critical
return (true, g_max)
else
return (false, g_max)
end
end
data = [0.55, 0.51, 0.56, 0.49, 0.52, 0.12]
alpha = 0.05 # 显著性水平
has_outlier, g_max = grubbs_test(data, alpha)
println("Has outlier: $has_outlier")
println("G max: $g_max")
运行结果:存在异常值,最大G值为2.017,目前只是判断了这组样本数据中有没有存在异常值,但还未揪出异常值,效果并不太好。此时,一刻也没有为Julia加速,立刻赶到战场的是R语言。
R语言实现
先下载R包 outliers 然后:
library(outliers)
data <- c(0.55, 0.51, 0.56, 0.49, 0.52, 0.12)
# 执行格拉布斯检验
result <- grubbs.test(data)
print(result)
运行结果 ,四行代码快速解决战斗,坑爹异常值是0.12。