いつもありがとうございます。
kotlinで相関係数を計算する関数拡張を書いてみました。
0. そもそも間違っている、という指摘がありましたらお願いします。
0. もっとスタイリッシュな記述があるよ、というのがありましたら提示お願いします。(全体でも部分的でも)
0. 他、何かコメントなどありましたらお願いします。
###ソースコード
kotlin
1/* 相関係数を返します */ 2fun List<Pair<Double, Double>>.correlationCoefficient(): Double { 3 if (size == 0) return Double.NaN 4 val avgX = sumByDouble { it.first } / size // X平均 5 val avgY = sumByDouble { it.second } / size // Y平均 6 val sdX = Math.sqrt(fold(0.0) { a, (x, _) -> a + Math.pow(x - avgX, 2.0) }) // X標準偏差 * size 7 val sdY = Math.sqrt(fold(0.0) { a, (_, y) -> a + Math.pow(y - avgY, 2.0) }) // X標準偏差 * size 8 val c = fold(0.0) { s, (x, y) -> s + (x - avgX) * (y - avgY) } // 共分散 * size 9 val cc = c / (sdX * sdY) // 相関係数 10 return if (cc.isNaN() && (sdY == 0.0 || sdY == +0.0 || sdY == -0.0)) 0.0 else cc 11}
実行結果
kotlin
1println(listOf(0.0 to 0.0, 2.0 to 20.0, 4.0 to 40.0).correlationCoefficient()) 2println(listOf(0.0 to 0.0, 2.0 to -20.0, 4.0 to -40.0).correlationCoefficient()) 3println(listOf(0.0 to 0.0, 2.0 to 0.0, 4.0 to 0.0).correlationCoefficient()) 4println(listOf(0.0 to 0.0, 0.0 to 100.0).correlationCoefficient()) 5
0.9999999999999998 -0.9999999999999998 0.0 NaN
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。