1

我试图在 C# 中复制这个等式:Slope(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));

4

1 回答 1

4

平均与它无关。Σ 表示 Sum(...)。它实际上应该是:

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

这就是你的错误的真正来源。

除了这个和平均与总和的术语,你离答案不远了。

于 2012-06-02T04:38:57.363 回答