0

在这里是新的,并通过各种参考资料中的示例进行工作。我已经看到了在 PyMC3 中使用分类变量构建分层模型的多种方法。作为一个玩具示例,假设我有一个收集过度分散的计数数据(例如消耗的单位)的系统,这些数据可以分解为多个阶段,与某个可用的地理层次结构(例如本地、区域等)相关联,以及在哪里是为影响计数结果而实施的多个过程。

我将以下模型结构放在一起,认为我可以分别对每个流程进行建模——尽管添加“流程”也会更有效。我已经在网上和参考资料中看到过这种结构的例子。

count = data['count'].values
phase_idx, phase = data['phase'].factorize(sort=True)
region_idx, region = data['region'].factorize(sort=True)
process_idx, process = process['process'].factorize(sort=True)

COORDS = {
    'obs_id': np.arange(len(phase_idx)),
    'phase': phase,
    'region': region,
    'process': process
}

with pm.Model(coords = COORDS) as count_model:
    
    data = pm.Data('counts', count, dims=('obs_id'))
    
    ## Hyperpriors 
    mu_lam = pm.Exponential('mu_lam', lam=0.3)
    a_lam = pm.Exponential('a_lam', lam=2)

    ## Priors
    μ = pm.Exponential('μ', lam= mu_lam, dims= ('phase', 'region'))
    α = pm.Exponential('α', lam= a_lam, dims = ('phase', 'region'))
    
    # Likelihood
    obs = pm.NegativeBinomial('obs', mu= μ[phase_idx, region_idx], \
                                         alpha= α[phase_idx, region_idx], observed= data, dims= ('obs_id'))


    idata_trace = pm.sample(draws= 10_000, tune=5_000, chains=2, target_accept= 0.95)

这是构建模型的有效方法吗?它使用组成的数据进行精细采样并提供感兴趣的输出 - 描述每个分类变量的 μ 周围的不确定性。

那么这三个变量呢?不幸的是,这三个变量一直在杀死我的内核。

# Likelihood
obs = pm.NegativeBinomial('obs', mu= μ[phase_idx, region_idx, process_idx], \
                                      alpha= α[phase_idx, region_idx, process_idx], observed= data, dims= ('obs_id'))
4

0 回答 0