以下内容将为给定的slope
和intercept
值集合输出R^2
,x
和相关系数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
但我一直在努力使其适应上述功能。
答案 0 :(得分:0)
步骤一步
首先,看一下输入行:
let linearRegression = (y,x) => {
。你有两个变量,所以我们可以称它们为x1和x2:let linearRegression = (y,x1,x2) => {
现在回归的公式取决于变量对之间的点积 - x1.x1,x1.x2,x1.y等。
因此,我们不需要计算sum_xx
,sum_xy
,sum_yy
,而是需要计算所有这些对的总和(使用3个变量而不是2个,有6个总和来计算)。
最后,双变量方程是y=a + b1.x1 + b2.x2
,所以有2个斜率来计算而不是1,而你链接的页面给出了你需要的所有公式。