裏 RjpWiki

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

Julia に翻訳--138 Brown-Forsythe 検定,三群以上の場合の等分散性の検定

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

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

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

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

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

R の split() と sapply() の間単版を Julia で書いてみた。

==========#

using Statistics, Rmath

function brownforsythetest(x, group)
    d = split2(x, group)
    df1 = length(d) - 1
    ni = sapply(d, length)
    mi = sapply(d, mean)
    ui = sapply(d, var)
    ci = (1 .- ni ./ sum(ni)) .* ui
    FBF = sum(ni .* (mi .- mean(x)) .^ 2) / sum(ci)
    C = ci ./ sum(ci)
    df2 = 1 / sum(C .^ 2 / (ni .- 1))
    p = pf(FBF, df1, df2, false)
    println("F = $FBF,  df1 = $df1,  df2 = $df2,  p value = $p")
    Dict(:F => FBF, :df1 => df1, :df2 => df2, :pvalue => p)
end

function split2(x, g)
    index = sort(unique(g))
    y = Array{Array{Float64,1},1}(undef, length(index))
    [y[i] = x[g .== i] for i in index]
end

sapply(x, FUNC) = map(FUNC, x)

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);
brownforsythetest(x, g)
# F = 10.854545454545452,  df1 = 2,  df2 = 7.606873428331936,  p value = 0.00590981731767559

コメント    この記事についてブログを書く
  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする
« Julia に翻訳--137 Levene ... | トップ | Julia に翻訳--139 分散・共... »
最新の画像もっと見る

コメントを投稿

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