以下将为给定的 x
和 y
值输出 slope
, intercept
和相关系数 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 回答
一步步
首先,查看输入行:
let linearRegression = (y,x) => {
. 你有2个变量,所以我们可以称它们为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,而你链接的页面给出了你需要的所有公式 .