javascript

时间:2018-01-25 02:12:46

标签: javascript math statistics regression

以下内容将为给定的slopeintercept值集合输出R^2x和相关系数y

let linearRegression = (y,x) => {
        let lr = {}
        let n = y.length
        let sum_x = 0
        let sum_y = 0
        let sum_xy = 0
        let sum_xx = 0
        let sum_yy = 0

        for (let i = 0; i < y.length; i++) {

            sum_x += x[i]
            sum_y += y[i]
            sum_xy += (x[i]*y[i])
            sum_xx += (x[i]*x[i])
            sum_yy += (y[i]*y[i])
        } 

        lr['slope'] = (n * sum_xy - sum_x * sum_y) / (n*sum_xx - sum_x * sum_x)
        lr['intercept'] = (sum_y - lr.slope * sum_x)/n
        lr['r2'] = Math.pow((n*sum_xy - sum_x*sum_y)/Math.sqrt((n*sum_xx-sum_x*sum_x)*(n*sum_yy-sum_y*sum_y)),2)

        return lr
}

我如何调整它以接受两个独立变量x1, x2而不是一个?

此页面进入修改后的公式:

http://faculty.cas.usf.edu/mbrannick/regression/Reg2IV.html

但我一直在努力使其适应上述功能。

1 个答案:

答案 0 :(得分:0)

步骤一步

首先,看一下输入行: let linearRegression = (y,x) => {。你有两个变量,所以我们可以称它们为x1和x2:let linearRegression = (y,x1,x2) => {

现在回归的公式取决于变量对之间的点积 - x1.x1,x1.x2,x1.y等。

因此,我们不需要计算sum_xxsum_xysum_yy,而是需要计算所有这些对的总和(使用3个变量而不是2个,有6个总和来计算)。

最后,双变量方程是y=a + b1.x1 + b2.x2,所以有2个斜率来计算而不是1,而你链接的页面给出了你需要的所有公式。