从Python中的联合分布计算边际分布

pet*_*rov 1 python numpy scipy

我有这两个数组/矩阵,它们代表 2 个离散随机变量 X 和 Y 的联合分布。我以这种格式表示它们,因为我想使用该numpy.cov函数,而这似乎是格式cov要求的。

https://docs.scipy.org/doc/numpy-1.15.0/reference/ generated/numpy.cov.html

joint_distibution_X_Y = [

    [0.01, 0.02, 0.03, 0.04, 
     0.01, 0.02, 0.03, 0.04, 
     0.01, 0.02, 0.03, 0.04, 
     0.01, 0.02, 0.03, 0.04],

    [0.002, 0.002, 0.002, 0.002, 
     0.004, 0.004, 0.004, 0.004, 
     0.006, 0.006, 0.006, 0.006, 
     0.008, 0.008, 0.008, 0.008],

]

join_probability_X_Y = [
                0.01, 0.02, 0.04, 0.04, 
                0.03, 0.24, 0.15, 0.06,
                0.04, 0.10, 0.08, 0.08,
                0.02, 0.04, 0.03, 0.02
            ]
Run Code Online (Sandbox Code Playgroud)

如何根据给定的 X 和 Y 的联合分布计算 X(以及 Y)的边际分布?我的意思是...有没有我可以调用的库方法?

我想得到一个结果,例如:

 X_values = [0.002, 0.004, 0.006, 0.008]
 X_weights = [0.110, 0.480, 0.300, 0.110]  
Run Code Online (Sandbox Code Playgroud)

我想避免自己编写边际分布的计算代码。
我认为已经有一些 Python 库方法可以实现这一点。
它是什么以及根据我所拥有的数据如何称呼它?

Dan*_*ejo 5

您可以使用边距

import numpy as np
from scipy.stats.contingency import margins

join_probability_X_Y = np.array([
                [0.01, 0.02, 0.04, 0.04],
                [0.03, 0.24, 0.15, 0.06],
                [0.04, 0.10, 0.08, 0.08],
                [0.02, 0.04, 0.03, 0.02]
            ])


x, y = margins(join_probability_X_Y)

print(x.T)
Run Code Online (Sandbox Code Playgroud)

输出

[[0.11 0.48 0.3  0.11]]
Run Code Online (Sandbox Code Playgroud)