Scipy 中的联合似然

问题描述 投票:0回答:1

下面的代码从已知 sigma 的正态分布中查找 n (= 3 ) 个变量的联合似然。我试图将其扩展为从具有三个未知参数(位置、尺度和 df)的位置尺度 t 分布中查找 n 个变量的联合似然性,但我正在努力解决如何在这里进行。有对此有用的功能吗?目前我正在尝试通过指定多个参数域来手动执行此操作...

n = 3; x = stats.norm(loc=0,scale=1).rvs(n, random_state = 10); # set seed
parameter_domain = np.linspace(-10,10,1001);
likelihood = stats.norm.pdf((x[:,np.newaxis])*np.ones(parameter_domain.shape),
                            loc=parameter_domain1, scale=1)#.prod(axis=0) # sigma=1 known
n = 3
df_true = 15, loc_true = 10, scale_true = 2 
x = stats.t(df = df_true, loc = loc_true, scale = scale_true).rvs(n, random_state = 10) # Data from location-scale-t distn.
df_parameter_domain = np.linspace(1, 100, 100)#np.linspace(-10,10,1001);
loc_parameter_domain = np.linspace(-10,10,1001)
scale_parameter_domain = np.linspace(0, 10, 1001)

likelihood = stats.t.pdf((x[:,np.newaxis])*np.ones(parameter_domain.shape),
                            loc=df_parameter_domain, scale=scale_parameter_domain, df = df_parameter_domain)#.prod(axis=0) # no variables known
scipy log-likelihood
1个回答
0
投票

以下代码包含一个计算您需要的可能性的函数。

from scipy import stats

n = 3
df_true = 15
loc_true = 10
scale_true = 2
x = stats.t(df=df_true, loc=loc_true, scale=scale_true).rvs(n, random_state=10)


def likelihood_fun(loc, scale, df):
    return stats.t.pdf(x, loc, scale, df).prod()


likelihood = likelihood_fun(loc=loc_true, scale=scale_true, df=df_true)

在此示例中,可能性被评估为真实参数,但它们可以替换为任何值。似然度以 3D 向量作为输入,返回值始终是 1D 标量。您可能会尝试对

likelihood_fun
进行矢量化,但这会很复杂,而且可能不是很有用。如果您打算最大化它以找到最大似然估计器,则此实现将完成这项工作。如果要绘制它,则需要固定一两个参数以分别将其显示为 2D 曲面或 1D 函数。

© www.soinside.com 2019 - 2024. All rights reserved.