gpt4 book ai didi

python - PyMC3 在模型中选择数据以进行切换点分析

转载 作者:太空狗 更新时间:2023-10-30 02:57:48 25 4
gpt4 key购买 nike

我正在生成一个中间有剧烈变化的时间序列。

import numpy as np

size = 120
x1 = np.random.randn(size)
x2 = np.random.randn(size) * 4
x = np.hstack([x1, x2])

这一系列的 x 看起来像这样:

enter image description here

现在的目标是使用 PyMC3 来估计发生变化的时间(切换点)的后验分布。这应该发生在索引 120 左右。我使用了以下代码;

from pymc3 import Model, Normal, HalfNormal, DiscreteUniform
basic_model = Model()

with basic_model:
mu1 = Normal('mu1', mu=0, sd=10)
mu2 = Normal('mu2', mu=0, sd=10)
sigma1 = HalfNormal('sigma1', sd=2)
sigma2 = HalfNormal('sigma2', sd=2)
tau = DiscreteUniform('tau', 0, 240)

# get likelihoods
y1 = Normal('y1', mu=mu1, sd=sigma1, observed=x[:tau])
y2 = Normal('y2', mu=mu2, sd=sigma2, observed=x[tau:])

这样做会出现错误,我无法使用 tau 对数组进行切片。在 PyMC 中解决这个问题的方法是什么?似乎我需要通过 PyMC 中的随机方法来完成切片。

最佳答案

原来 PyMC3 有一个开关模型。设 t 为时间变量。

import pymc3 as pm
basic_model = pm.Model()

with basic_model:
mu1 = pm.Normal('mu1', mu=0, sd=10)
mu2 = pm.Normal('mu2', mu=0, sd=10)
sigma1 = pm.HalfNormal('sigma1', sd=2)
sigma2 = pm.HalfNormal('sigma2', sd=2)
switchpoint = pm.DiscreteUniform('switchpoint', t.min(), t.max())

tau_mu = pm.switch(t >= switchpoint, mu1, mu2)
tau_sigma = pm.switch(t >= switchpoint, sigma1, sigma2)

y = pm.Normal('y1', mu=tau_mu, sd=tau_sigma, observed=x)

关于python - PyMC3 在模型中选择数据以进行切换点分析,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35922022/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com