#==========
Julia の修行をするときに,いろいろなプログラムを書き換えるのは有効な方法だ。
ファイル名: samplesizedeterminationforcorrelationcoefficient.jl
関数名: samplesizedeterminationforcorrelationcoefficient
翻訳するときに書いたメモ
一回しか使わないであろうプログラムも関数にしよう。
条件設定はパラメータとして与える。
啓蒙目的ならやむを得ないが,なるべく既存の関数を使おう。
対象読者もそのようなプログラムを書くことができるるようになることを目指そう。
==========#
using Statistics, Rmath
function samplesizedeterminationforcorrelationcoefficient(x, y; mu=0, alpha=0.05, side=2, power=0.8)
mdx = x .- mean(x) # mean deviation
mdy = y .- mean(y)
r = sum(mdx .* mdy) / (sqrt(sum(mdx .^ 2)) * sqrt(sum(mdy .^ 2))) # cor(x, y)
n = length(x)
t = (abs(r) - mu) / sqrt((1 - r ^ 2) / (n - 2))
p_t = pt(t, n - 2, false) * 2
Za = qnorm(alpha / side, false)
Zb = qnorm(power)
z = atanh(r) # 1 / 2 * log((1 + r) / (1 - r))
n = ((Za + Zb) / z) ^ 2 + 3
Dict(:n => n, :r => r, :t => t, :p_t => p_t, :alpha => alpha, :side => side, :power => power, :n => n)
end
chukan = [64, 40, 71, 33, 30, 71, 92, 23, 41, 55, 93, 74];
kimatu = [55, 52, 76, 24, 48, 87, 100, 30, 35, 67, 86, 81];
samplesizedeterminationforcorrelationcoefficient(chukan, kimatu)
#========================
Dict{Symbol,Real} with 7 entries:
:alpha => 0.05
:n => 6.12334
:p_t => 2.33485e-5
:power => 0.8
:r => 0.919416
:t => 7.39269
:side => 2
========================#