相関係数
定義と性質
相関係数 (correlation coefficient) は確率変数
母相関係数
相関係数
相関係数は順位付けのために比較することができるが等比ではない。つまり
標本相関係数
帰無仮説による 検定
サンプリング調査から求める標本相関係数は母集団の相関係数と異なっていることが多い。特にサンプルが少ないケースでは無相関な母集団からたまたま高い標本相関係数が得られることもある。この対処として、標本相関係数
帰無仮説として母相関係数
標本数
フィッシャーの -変換
フィッシャーの
この
アルゴリズム
線形相関係数の実装
def pearson(x:Array[Double], y:Array[Double]):(Double,Double,Double) = {
val n = x.length
if(n != y.length || n == 0){
throw new IllegalArgumentException("")
}
// 平均を求める
var ax = 0.0
var ay = 0.0
for(i <- 0 until x.length){
ax += x(i)
ay += y(i)
}
ax /= n
ay /= n
var sxx = 0.0
var syy = 0.0
var sxy = 0.0
for(i <- 0 until x.length){
val dx = x(i) - ax
val dy = y(i) - ay
sxx += dx * dx
syy += dy * dy
sxy += dx * dy
}
sxy / math.sqrt(sxx * syy)
}
無相関確率の実装
線形相関係数
def prob(r:Double, n:Int):Double = {
val epsilon = Double.MinPositiveValue
val df = n - 2
val t = r * math.sqrt(df / ((1 - r + epsilon) * (1 + r + epsilon)))
不完全ベータ関数(a = 0.5 * df, b = 0.5, x = df / (df + t * t))
}
フィッシャーの -変換の実装
線形相関係数
def fishersZ(r:Double):Double = {
val epsilon = Double.MinPositiveValue
0.5 * math.log((1 + r + epsilon) / (1 - r + epsilon))
}