fun correlationPearson()

in plot-api/src/commonMain/kotlin/org/jetbrains/letsPlot/bistro/corr/Method.kt [12:40]


    fun correlationPearson(xs: List<Double>, ys: List<Double>): Double {
        require(xs.size == ys.size) { "Two series must have the same size." }
        if (xs.isEmpty()) {
            return Double.NaN
        }

        val mx = xs.average()
        val my = ys.average()

        var cov = 0.0
        var d2x = 0.0
        var d2y = 0.0

        for (i in xs.indices) {
            val dx = xs[i] - mx
            val dy = ys[i] - my

            cov += dx * dy
            d2x += dx.pow(2)
            d2y += dy.pow(2)
        }

        // Correlation is not defined for sequences with zero variation.
        if (d2x == 0.0 || d2y == 0.0) {
            return Double.NaN
        }

        return cov.div(sqrt(d2x * d2y))
    }