裏 RjpWiki

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

Julia に翻訳--115 対応のあるデータの二つの相関係数の相等性の検定

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

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

対応のあるデータの二つの相関係数の相等性の検定
http://aoki2.si.gunma-u.ac.jp/R/diff_r2.html

ファイル名: diffr2.jl
関数名:    diffr2(データ行列)
          diffr2(相関係数行列, サンプルサイズ)

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

データ行列を与える場合と,cor と n を与える場合の 2 通りの関数を定義した。

==========#

using Statistics, Rmath

function diffr2(x)
    n, nc = size(x)
    nc == 4 && n != nc || error("required nx4 data matrix")
    diffr2(cor(x), n)
end

function diffr2(r, n)
    z12 = atanh(r[1,2])
    z34 = atanh(r[3,4])
    a1 = r[1, 3] * r[2, 4] + r[1, 4] * r[2, 3]
    a2 = -r[3, 4] * (r[1, 3] * r[2, 3] + r[1, 4] * r[2, 4])
    a3 = -r[1, 2] * (r[1, 3] * r[1, 4] + r[2, 3] * r[2, 4])
    a4 = r[1, 2] * r[3, 4] * (r[1, 3]^2 + r[1, 4]^2 + r[2, 3]^2 + r[2, 4]^2) / 2
    d = (1 - r[1, 2]^2) * (1 - r[3, 4]^2)
    chisq = (n - 3) * (z12 - z34)^2 / (2 - 2 * (a1 + a2 + a3 + a4) / d)
    df = 1
    p = pchisq(chisq, df, false)
    println("chisq. = $chisq,  df = $df,  p value = $p")
    Dict(:chisq => chisq, :df => df, :pvalue => p)
end

include("gendat.jl")
d = gendat(220, [0.439,0.288,0.329,0.354,0.320,0.595]);
cor(d)
# 4×4 Array{Float64,2}:
#  1.0    0.439  0.288  0.329
#  0.439  1.0    0.354  0.32
#  0.288  0.354  1.0    0.595
#  0.329  0.32   0.595  1.0
diffr2(d)
# chisq. = 5.500229788108368,  df = df,  p value = 0.01901397495593562

r = [  1.0    0.439  0.288  0.329
       0.439  1.0    0.354  0.32
       0.288  0.354  1.0    0.595
       0.329  0.32   0.595  1.0   ];
diffr2(r, 220)
# chisq. = 5.500229788108428,  df = 1,  p value = 0.019013974955934914

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

コメントを投稿

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