将两个高斯分布合并为另一个高斯分布

3
在下面的代码中,我有两个高斯曲线,一个是红色的,另一个是紫色的。我想知道在Python中是否有一种方法可以将这两个高斯曲线合并成第三个曲线,该曲线应该类似于蓝色的曲线(这只是一个高斯曲线的示例,被认为更高更宽)?任何帮助都将不胜感激。
import numpy as np
import scipy.optimize as opt
import matplotlib.pyplot as plt

def gauss(x, p): # p[0]==mean, p[1]==stdev, p[2]==heightg, p[3]==baseline                   
    a = p[2]
    mu = p[0]
    sig = p[1]
    base = p[3]
    return a * np.exp(-1.0 * ((x - mu)**2.0) / (2.0 * sig**2.0)) + base

p0 = [6804.5, 1.2, 23.0, 25.3532] # Inital guess is a normal distribution
p02 = [6804.5, 6.5, 5.0, 25.09098]

xp = np.linspace(6780, 6810, 200)
fig = plt.figure()
a1 = fig.add_subplot(111)
a1.plot(xp, gauss(xp, p0), lw=3, alpha=2.5, color='r')
a1.plot(xp, gauss(xp, p02), lw=3, alpha=2.5, color='purple')
a1.set_xlim([6798, 6810])

plt.tight_layout()
plt.show()

enter image description here


“Combine”是什么意思?为什么不只是将曲线相加:gauss(xp,p0) + gauss(xp,p02) - tom10
@tom10。因为您无法将两个概率密度相加以获得另一个概率密度(积分显然不会等于1)。当您两个随机变量时,结果密度是它们密度卷积。参见此处了解更多信息。 - user1220978
顺便提一下,您的代码出现了错误,我可以通过删除两个“ alpha = 2.5”来克服这个问题。 错误信息如下:
  • ValueError:to_rgba:无效的rgba参数“(1.0,0.0,0.0,2.5)” rbga序列中的数字超出0-1范围 *
- user1220978
1
@arbautjc: 我正试图理解OP所说的“combine”的含义。高斯曲线并不一定是概率分布(而所示曲线的积分也不为1)。“combine”的含义完全取决于(未解释的)上下文,既不是卷积也不是加法能从红色和紫色曲线产生蓝色曲线,因此这仍然是一个谜。 - tom10
@user1821176:蓝色曲线看起来更像是红色曲线与自身卷积的结果。这个答案是否可行? - tom10
2个回答

2

我看不到蓝色曲线,但我猜你是在寻找两个独立高斯分布的总和的分布。

如果

X1 ~ Gaussian(mean1,std1), and X2 ~ Gaussian(mean2, std2),

那么

X1+X2 ~ Gaussian(mean1+mean2, sqrt(std1^2 + std2^2))

2

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接