2

我有一个表示高斯分布的值类型:

struct Gauss {
    double mean;
    double variance;
}

我想对一系列这些值进行积分:

Gauss eulerIntegrate(double dt, Gauss iv, Gauss[] values) {
    Gauss r = iv;
    foreach (Gauss v in values) {
        r += v*dt;
    }
    return r;
}

我的问题是如何为这些正态分布实现加法。

标量 ( dt) 的乘法看起来很简单。但这并不简单!感谢FOOSHNICK的帮助:

public static Gauss operator * (Gauss g, double d) {
    return new Gauss(g.mean * d, g.variance * d * d);
}

然而,加法让我望而却步。我想我可以添加手段;这是给我带来麻烦的差异。这些定义中的任何一个对我来说似乎都是“合乎逻辑的”。

public static Gauss operator + (Gauss a, Gauss b) {
    double mean = a.mean + b.mean;
    // Is it this? (Yes, it is!)
    return new Gauss(mean, a.variance + b.variance);        
    // Or this? (nope)
    //return new Gauss(mean, Math.Max(a.variance, b.variance));
    // Or how about this? (nope)
    //return new Gauss(mean, (a.variance + b.variance)/2);
}

任何人都可以帮助定义一个统计上正确的 - 或者至少是“合理的” -+运营商版本吗?

我想我可以将代码切换为使用区间算术,但我希望留在概率和统计的世界中。

4

7 回答 7

8

两个正态分布之和本身就是一个正态分布:

N(均值1,方差1)+ N(均值2,方差2)〜N(均值1 +均值2,方差1 +方差2)

这都在维基百科页面上

请注意,这些确实是方差而不是标准偏差。

// X + Y
public static Gauss operator + (Gauss a, Gauss b) {
    //NOTE: this is valid if X,Y are independent normal random variables
    return new Gauss(a.mean + b.mean, a.variance + b.variance);
}

// X*b
public static Gauss operator * (Gauss a, double b) {
    return new Gauss(a.mean*b, a.variance*b*b);
}
于 2009-01-07T21:40:47.957 回答
3

更准确地说:

如果一个随机变量 Z 被定义为两个不相关的高斯随机变量 X 和 Y 的线性组合,那么 Z 本身就是一个高斯随机变量,例如:

如果 Z = aX + bY,则均值 (Z) = a * 均值 (X) + b * 均值 (Y),方差 (Z) = a 2 * 方差 (X) + b 2 * 方差 (Y)。

如果随机变量是相关的,那么你必须考虑到这一点。Variance(X) 由期望值 E([X-mean(X)] 2 ) 定义。对 Z = aX + bY 进行处理,我们得到:

方差(Z) = a 2 * 方差(X) + b 2 * 方差(Y) + 2ab * 协方差(X,Y)

如果您将两个不相关且不具有高斯分布的随机变量相加,则和的分布是两个分量分布的卷积

如果要对两个相关的非高斯随机变量求和,则必须自己处理适当的积分。

于 2009-01-19T15:19:53.443 回答
2

哈,我以为你不能把高斯分布加在一起,但你可以!

http://mathworld.wolfram.com/NormalSumDistribution.html

实际上,均值是各个分布的总和,而方差是各个分布的总和。

于 2009-01-07T21:41:33.247 回答
2

好吧,您乘以标量是错误的-您应该将方差乘以 d 的平方。如果您要添加一个常数,则只需将其添加到均值中,方差保持不变。如果要添加两个分布,则添加均值并添加方差。

于 2009-01-07T21:45:00.680 回答
2

任何人都可以帮助定义 + 运算符的统计正确 - 或至少“合理” - 版本吗?

可以说不是,因为添加两个分布意味着不同的东西——在可靠性和可维护性方面工作后,我对标题的第一反应是系统的 mtbf 的分布,如果每个部分的 mtbf 是正态分布的并且系统没有冗余。您说的是两个正态分布独立变量之和的分布,而不是两个正态分布效应的(逻辑)和。很多时候,运算符重载具有令人惊讶的语义。除非您的代码具有非常特定的目标受众,否则我会将其保留为函数并将其称为“normalSumDistribution”。

于 2009-01-19T12:46:34.737 回答
1

我不确定我是否喜欢你所说的对一系列价值观的“整合”。你是指微积分意义上的那个词吗?您是否正在尝试进行数值积分?还有其他更好的方法可以做到这一点。你的在我看来不合适,更不用说最佳了。

高斯分布是一个很好的平滑函数。我认为一个很好的正交方法或 Runge-Kutta 会是一个更好的主意。

于 2009-01-07T21:46:46.777 回答
1

我原以为这取决于您正在执行的添加类型。如果您只想获得属性(均值、标准差等)等于两个分布之和的正态分布,那么添加其他答案中给出的属性就可以了。这是PERT之类的假设,如果将大量正态概率分布相加,则得到的概率分布是另一个正态概率分布。

当添加的两个发行版不相似时,问题就出现了。例如,添加一个平均值为 2、标准差为 1 的概率分布和一个标准差为 2 的概率分布 10。如果将这两个分布相加,您将得到一个具有两个峰值的概率分布,一个峰值为 2ish一个在 10 点左右。因此,结果不是正态分布。仅当原始分布非常相似或您有很多原始分布以使波峰和波谷可以平衡时,添加分布的假设才真正有效。

于 2009-01-19T15:44:11.490 回答