首页 文章

在javascript中使用两个独立变量的线性回归

提问于
浏览
1

以下将为给定的 xy 值输出 slopeintercept 和相关系数 R^2 .

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

    一步步

    首先,查看输入行: let linearRegression = (y,x) => { . 你有2个变量,所以我们可以称它们为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,而你链接的页面给出了你需要的所有公式 .

相关问题