#==========
Julia の修行をするときに,いろいろなプログラムを書き換えるのは有効な方法だ。
以下のプログラムを Julia に翻訳してみる。
適合度の検定--名義尺度の場合;χ2 分布による検定;一様性の検定
http://aoki2.si.gunma-u.ac.jp/lecture/GoodnessOfFitness/nominalscale-r.html
適合度の検定--名義尺度の場合;χ2 分布による検定;理論比が与えられる場合
http://aoki2.si.gunma-u.ac.jp/lecture/GoodnessOfFitness/nominalscale-r2.html
ファイル名: chisqtest.jl 関数名: chisqtest
翻訳するときに書いたメモ
==========#
using Rmath, Printf
function chisqtest(x; p = fill(1 / length(x), length(x)))
1 - sum(p) > eps() && error("sum(p) isn't equal to 1")
expectation = sum(x) .* p
chisq = sum(((x .- expectation) .^ 2) ./ expectation)
df = length(x) - 1
pvalue = pchisq(chisq, df, false)
@printf("chisq = %.5f, df = %d, p value = %.5f", chisq, df, pvalue)
end
x = [10, 12, 9, 4, 13, 8]
chisqtest(x) # chisq = 5.50000, df = 5, p value = 0.35795
chisqtest(x, p = fill(1/6, 6)) # chisq = 5.50000, df = 5, p value = 0.35795
y = [29, 12, 8, 2]
chisqtest(y, p = repeat([0.25], 4)) # chisq = 31.58824, df = 3, p value = 0.00000
chisqtest(y, p = [9, 3, 3, 1] ./ 16) # chisq = 1.32244, df = 3, p value = 0.72381
※コメント投稿者のブログIDはブログ作成者のみに通知されます