#==========
Julia の修行をするときに,いろいろなプログラムを書き換えるのは有効な方法だ。
以下のプログラムを Julia に翻訳してみる。
陽性反応適中率の差の検定
http://aoki2.si.gunma-u.ac.jp/JavaScript/ppv.html
ファイル名: ppv.jl 関数名: ppv
翻訳するときに書いたメモ
==========#
using Rmath, Printf
function ppv(a, b, c, d, e, f, g, h)
ppv(1, a, b, c, d, e, f, g, h)
ppv(2, d, c, b, a, h, g, f, e)
end
function ppv(sw, a, b, c, d, e, f, g, h)
name = ["ppv", "npv"]
title = ["陽性反応適中率", "陰性反応適中率"]
println("***** $(title[sw])($(name[sw]))の差の検定 *****\n")
if (sw == 1)
@printf("%s1 = %g\n", name[sw], (a+b)/(a+b+e+f))
@printf("%s2 = %g\n", name[sw], (a+c)/(a+c+e+g))
else
@printf("%s1 = %g\n", name[sw], (e+f)/(a+b+e+f))
@printf("%s2 = %g\n", name[sw], (e+g)/(a+c+e+g))
end
mi = 2(a+e)+b+c+f+g
zbar = (a+c+e+g)/mi
dbar = (2a+b+c)/mi
stat = (a * (1 - 2zbar) - b * zbar + c * (1 - zbar))^2 /
((1-dbar)^2 * (a * (1 - 2zbar)^2 + b*zbar^2 + c * (1 - zbar)^2) + dbar^2 *
(e * (1 - 2zbar)^2 + f * zbar^2 + g * (1 - zbar)^2))
p = pchisq(stat, 1, false)
@printf("T%s = %g\n", name[sw], stat)
@printf("P value = %.5f (%g)\n\n", p, p)
end
ppv(786, 183, 29, 25, 69, 176, 46, 151)
#==
***** 陽性反応適中率(ppv)の差の検定 *****
ppv1 = 0.798188
ppv2 = 0.876344
Tppv = 47.5813
P value = 0.00000 (5.2769e-12)
***** 陰性反応適中率(npv)の差の検定 *****
npv1 = 0.784861
npv2 = 0.611215
Tnpv = 39.5222
P value = 0.00000 (3.24349e-10)
==#