代码之家  ›  专栏  ›  技术社区  ›  peter.petrov

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

  •  1
  • peter.petrov  · 技术社区  · 7 年前

    我有两个数组/矩阵,它们代表两个离散随机变量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
                ]
    

     X_values = [0.002, 0.004, 0.006, 0.008]
     X_weights = [0.110, 0.480, 0.300, 0.110]  
    

    我想避免自己对边际分布的计算进行编码。
    我假设已经有了一些Python库方法。
    它是什么?根据我掌握的数据,我如何称呼它?

    1 回复  |  直到 7 年前
        1
  •  3
  •   Dani Mesejo    7 年前

    你可以用 margins :

    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)
    

    [[0.11 0.48 0.3  0.11]]