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 будет выбрано невозможное значение.

Другие вопросы по тегам