我试图复制这个等式:C#中的斜率(b)=(NΣXY - (ΣX)(ΣY))/(NΣX2 - (ΣX)2)但我得到以下问题:
如果我使X = 1 + 2 + 3 + 4 + 5的平均值和平均Y = 5 + 4 + 3 + 2 + 1,它会给我一个正斜率,即使它明显倒计时。如果我将相同的数字放入此计算器中:http://www.easycalculation.com/statistics/regression.php
它给出了链接计算器中具有相同数据的负斜率。我试图缩小原因,以下是从等式到C#代码的正确翻译:
斜率(b)=(NΣXY - (ΣX)(ΣY))/(NΣX2 - (ΣX)2)
到
斜率(m)=((x * avgX * avgY) - (avgX * avgY))/((x * Math.Pow(avgX,2)) - Math.Pow(avgX,2));
答案 0 :(得分:4)
Avg与此无关。 Σ表示总和(...)。它应该是:
var sumX = pts.Sum(pt => pt.X);
var slope = (numberOfPoints * pts.Sum(pt => pt.X * pt.Y) -
sumX * pts.Sum(pt => pt.Y)) /
(numberOfPoints * pts.Sum(pt => pt.X * pt.X) -
sumX * sumX)
ΣXY不表示Sum(x)* Sum(y)。但它意味着Sum(x * y),这是不同的。
ΣX2并不意味着Sum(x)^ 2.但它意味着Sum(x ^ 2),它也是不同的。
ΣXY=Σ(XY)!=ΣX*ΣY
这就是你的错误真正来自的地方。
除了那个和平均与总和的术语之外,你离答案还不远。