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

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);
}

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

我想我可以将代码切换为使用区间运算,但我希望保持在概率和统计数据的世界。

有帮助吗?

解决方案

两个正态分布的总和本身就是正态分布:

N(mean1,variance1)+ N(mean2,variance2)~N(mean1 + mean2,variance1 + variance2)

这一切都在维基百科页面上。

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

// 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);
}

其他提示

更确切地说:

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

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

如果随机变量相关,那么你必须考虑到这一点。方差(X)由期望值E([X-平均值(X)] 2 )定义。为Z = aX + bY工作,我们得到:

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

如果你要求两个不相关的随机变量没有高斯分布,那么总和的分布是卷积的两个组件分布。

如果要对两个相关的非高斯随机变量求和,则必须自己完成相应的积分。

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

  

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

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

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

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

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

我不确定我喜欢你所说的“整合”超过一系列价值观。你的意思是微积分意义上的那个词吗?你想做数值积分吗?还有其他更好的方法可以做到这一点。你的看起来不对我,更不用说最佳了。

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

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

当添加的两个发行版不相似时,会出现问题。例如,添加平均值为2且标准差为1且概率分布为10且标准差为2的概率分布。如果向上添加这两个分布,则得到具有两个峰值的概率分布,一个在2ish和一个10岁。因此,结果不是正常的分配。关于添加分布的假设只有在原始分布非常相似或者您有大量原始分布时才真正有效,这样才能使峰值和谷值均衡。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top