使用Julia语言及R语言进行格拉布斯检验-G(a,n)

时间:2024-03-05 11:11:35
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。