将线性回归方程正确转换为C#

时间:2012-06-02 04:26:31

标签: c# statistics

我试图复制这个等式: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));

1 个答案:

答案 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

这就是你的错误真正来自的地方。

除了那个和平均与总和的术语之外,你离答案还不远。