具有不同概率的数据的平均值

Mean of data with different propabilities

我目前面临以下问题: 在实验期间,我收集了每个通道(检测器)的事件计数。根据通道绘制计数几乎可以得出正态分布。我现在想计算这个数据集的平均值。问题是并非所有生成数据的事件都以相同的概率发生,但每个通道的概率是已知的。

对我来说,这种情况似乎与计算直方图的平均值非常相似,因此我会取通道的中间值,将其乘以通道的相应值,将所有值相加,然后除以通道总数。

我的实现是:

import numpy as np
import matplotlib.pyplot as plt
counts = ... # see at the end of the post for the data set in question
channels = np.arange(1,len(counts)+1)
channel_probability = .... # probability for different parts of channels

mean = sum((channels+1)/2 * counts)/len(counts)

plt.figure()
plt.plot(counts, channels)
plt.stem([mean], [100])
plt.xlabel("channels")
plt.ylabel("counts")
plt.show()

问题是这假设所有事件的概率都相同...因此我尝试了只乘以概率的天真方法

mean = sum((channels+1)/2 * counts * channels_probability)/len(counts)

但这当然只会导致完全不合理的结果...所以,有人可以解释一下我如何找到这种分布的均值以及如何计算它吗?


如上所述,这是类似于我正在使用的数据集的内容:

counts = np.array([2.05209753  2.07860064  2.06269877  2.0706497   2.07595033  2.03619567
  2.03619567  2.06269877  2.02029381  2.00439194  2.01499318  1.9937907
  1.98583977  1.99909132  1.99909132  2.00439194  1.98583977  1.98849008
  1.99644101  2.01499318  2.00439194  2.0176435   2.02824474  1.99909132
  2.00174163  2.03354536  2.05474784  2.05474784  2.04944722  2.11305467
  2.07330002  2.13955778  2.18461305  2.19256399  2.21906709  2.25617144
  2.23496895  2.25617144  2.31182796  2.32772982  2.36483417  2.3992882
  2.42844162  2.49734969  2.56890807  2.56095714  2.59541118  2.59541118
  2.63516583  2.68817204  2.6272149   2.66961987  2.6272149   2.66961987
  2.60336211  2.62191428  2.56890807  2.5503559   2.53975466  2.52385279
  2.45229441  2.42844162  2.39133727  2.29592609  2.27737392  2.26147206
  2.21906709  2.14220809  2.17666212  2.09185219  2.03619567  2.02824474
  2.05209753  2.00439194  1.97788884  1.97788884  1.9672876   1.96463729
  1.96993791  1.95403604  1.94608511  1.9434348   1.9434348   1.93548387
  1.93813418  1.9434348   1.94078449  1.93813418  1.94078449  1.9434348])

我的假设:

  • 您有每个频道的事件计数。
  • 你知道每个通道的概率。

假设你有一个漂亮的九面骰子,每面都有一个数字。

numbs = [10, 24, 26, 8, 17, 6, 9, 15, 20]

每个数字都有相同的概率:1/9。你可能会问,骰子的期望值是多少?好吧,有了 Python 就很容易了。

prob_li = []
for l, prob in zip(numbs, [1/9] * 9):
    prob_li.append(l * prob)

print(sum(prob_li)) # 15

如果每一方的概率都改变了,说这样的话

probs = [1/9, 1/9, 1/9, 1/9, 1/9, 1/10, 1/20, 1/20, 11/45]

预期值为

prob_li = [] 
    for l, prob in zip(numbs, probs): 
    prob_li.append(l * prob) 

print(sum(prob_li)) # 16.13

现在假设你构造一个矩阵,每一列有一个概率probs[i]

np.random.seed(4)
mat = np.random.randint(6, 20, size=(3, 9))

mat 是形状为 (3,9) 的矩阵。我会发现期望值为

result = mat * probs
print(sum(mat.mean(axis=0) * probs)) #12.82
print(sum(result.sum(axis=0) * probs)) #38.46

对我来说,12.82 比 38.46 更有意义。此外,您说根据通道绘制计数几乎可以得出正态分布,您只需要找到每个通道的平均值,然后找到期望值。