Pymc Python обнаружения точки изменения для малых вероятностей. Ошибка нулевой вероятности
Я пытаюсь использовать Pymc, чтобы найти точку изменения во временном ряду. Значение, которое я рассматриваю с течением времени, - это вероятность "конвертировать", которая очень мала, в среднем 0,009 с диапазоном 0,001–0,016.
Я даю двум вероятностям равномерное распределение в качестве априора между нулем и максимальным наблюдением.
alpha = df.cnvrs.max() # Set upper uniform
center_1_c = pm.Uniform("center_1_c", 0, alpha)
center_2_c = pm.Uniform("center_2_c", 0, alpha)
day_c = pm.DiscreteUniform("day_c", lower=1, upper=n_days)
@pm.deterministic
def lambda_(day_c=day_c, center_1_c=center_1_c, center_2_c=center_2_c):
out = np.zeros(n_days)
out[:day_c] = center_1_c
out[day_c:] = center_2_c
return out
observation = pm.Uniform("obs", lambda_, value=df.cnvrs.values, observed=True)
Когда я запускаю этот код, я получаю:
ZeroProbability: значение Stochastic obs находится за пределами поддержки или запрещает текущие значения его родителей.
Я довольно новичок в pymc, так что не уверен, что пропустил что-то очевидное. Я думаю, у меня может не быть подходящих распределений для моделирования малых вероятностей.
1 ответ
Невозможно сказать, где вы ввели эту ошибку - а программирование здесь не по теме, в любом случае - без дополнительной информации. Но здесь есть статистическая проблема: вы каким-то образом создали модель, которая не может генерировать ни наблюдаемые переменные, ни текущую выборку скрытых.
В качестве простого примера, скажем, у вас есть набор данных с отрицательными значениями, и вы предположили, что он распределен по гамме; это приведет к ошибке, потому что данные имеют нулевую вероятность под гаммой. Точно так же будет выдана ошибка, если во время цепочки MCMC будет выбрано невозможное значение.