UnobservedComponents: как установить границы для обновления параметров? - PullRequest
0 голосов
/ 30 октября 2018

При установке модели UnobservedComponents возможно ли установить верхние границы для конечных значений параметров состояний?

Мы хотели бы смоделировать байесовский подход для выбора предварительного распределения по штатам и установки конечного значения, чтобы верхняя граница составляла до 20% от исходного значения (например, если мы выберем в качестве предыдущего для локального уровня значение 0,1, то конечное значение будет максимум 0,12).

Мотивация кроется в алгоритме, который мы переносим из R в Python. Когда мы подгоняем модель локального уровня к данным тестовых данных, сигма конечного состояния в конечном итоге составляет около 0,3; в R есть предположение о верхней границе, поэтому конечный результат равен 0,12, что дает значительно разные доверительные интервалы. Сейчас мы пытаемся смоделировать такое же поведение в statsmodels.

Изучив код, мы нашли метод transform_params, который, по-видимому, способен вводить границы в начальное состояние, но мы не уверены, как его использовать для установки верхней границы в 20% (или будет ли это правильный подход).

1 Ответ

0 голосов
/ 06 ноября 2018

Только что нашел очень простое и точное решение того, что я искал: мы можем использовать входной параметр bounds, и он уже ограничит границы, где алгоритм подбора будет искать значение оптимума.

Вот пример на случай, если кому-то нужно сделать то же самое:

model = UnobservedComponents(data, level='choose level', exog=more data)
bounds = [(None, None) for _ in range(len(model.param_names))]

Если для оптимизации уровня требуется установить нижнюю границу 0,1 и верхнюю границу 0,12, и это соответствует индексу 1 в model.param_names, это можно сделать так:

bounds[1] = (0.1, 0.12)

Затем просто введите команду fit:

model.fit(bounds=bounds)

Имейте в виду, что эти значения в bounds соответствуют стандартному отклонению параметров, а не его дисперсии.

Это сработало как шарм:)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...