【问题标题】:Defining a Custom PyMC Distribution with a Stochastic Matrix Variable使用随机矩阵变量定义自定义 PyMC 分布
【发布时间】:2018-08-15 21:13:19
【问题描述】:

我正在尝试定义以下分布:

P(t) = exp(R*t)

其中 R 是我想用数据求解的 2x2 比率矩阵(其每一行的总和必须为 0)。这是对数似然函数,还有一些数据:

import numpy as np
# The data is in the format: (row index, column index, t)
data = {(0,1,10), (1,0,20), (0,0,49), (1,1,12)}

def logp(values, ratesMatrix):
    r = []
    t = []
    for i in range(len(data)):
        r.append(ratesMatrix[values[i][0], values[i][1]])
        t.append(values[i][2])
    r = np.array(r, dtype=np.float64)
    t = np.array(t, dtype=np.float64)

    # log( prod( exp(r*t) ) )
    # == sum( log( exp(r*t) ) )
    # == sum( r*t )
    return np.sum(r*t)

如何将ratesMatrix变量定义为随机2x2矩阵,其中对角线中的每个条目都在-1和0之间(同样可能),对角线之外的每个条目介于0和1之间(同样可能),这样总和每行是0?

【问题讨论】:

    标签: python pymc


    【解决方案1】:

    我认为这段代码有效并且非常简单:

    import numpy as np
    
    diagonal = np.random.randint(low=-1, high=1, size=2)
    print(diagonal)
    
    matrix = np.diag(diagonal)
    
    if matrix[0, 0] == -1:
        matrix[0, 1] = 1
    if matrix[1, 1] == -1:
        matrix[1, 0] = 1
    
    print(matrix)
    

    顺便问一下,这就是你要找的吗?

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-05-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多