裏 RjpWiki

Julia ときどき R, Python によるコンピュータプログラム,コンピュータ・サイエンス,統計学

Julia に翻訳--137 Levene 検定,三群以上の場合の等分散性の検定

2021年03月28日 | ブログラミング

#==========
Julia の修行をするときに,いろいろなプログラムを書き換えるのは有効な方法だ。
以下のプログラムを Julia に翻訳してみる。

Levene 検定(三群以上の場合の等分散性の検定)
http://aoki2.si.gunma-u.ac.jp/R/levene-test.html

ファイル名: levenetest.jl  関数名: levenetest

翻訳するときに書いたメモ

==========#

using Statistics, Rmath

function levenetest(x, group; method = "mean") # or method = "median"
    n = length(x)
    ni = tapply(x, group, length)
    k = length(ni)
    FUNC = method == "mean" ? mean : median
    x = abs.(x .- tapply(x, group, FUNC)[group])
    sw = sum((ni .- 1) .* tapply(x, group, var))
    dfw = n - k
    dfb = k - 1
    f = ((var(x) * (n - 1) - sw) / dfb) / (sw / dfw)
    P = pf(f, dfb, dfw, false)
    println("等分散性の検定($method で調整)")
    println("F = $f,  dfb = $dfb,  dfw = $dfw,  p value = $P")
    Dict(:F => f, :dfb => dfb, :dfw => dfw, :pvalue => P, :method => method)
end

function tapply(x, g, func)
    indices = sort(unique(g))
    [func(x[g .== i]) for i in indices]
end

function rep(x; each::Int64)
    vcat([repeat([x[i]], each) for i = 1:length(x)]...)
end

x = [3, 3, 4, 2, 5, 2, 3, 4, 8, 8, 5, 6]
g = rep(1:3, each = 4)

levenetest(x, g)
# 等分散性の検定(mean で調整)
# F = 2.0999999999999996,  dfb = 2,  dfw = 9,  p value = 0.17844673330519398

levenetest(x, g, method = "median")
# 等分散性の検定(median で調整)
# F = 1.9090909090909094,  dfb = 2,  dfw = 9,  p value = 0.203644351599495

コメント    この記事についてブログを書く
  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする
« Julia に翻訳--136 一元配置... | トップ | Julia に翻訳--138 Brown-Fo... »
最新の画像もっと見る

コメントを投稿

ブログラミング」カテゴリの最新記事