Примерка для офсета в модной модели
Используя patsy, я понимаю, как включить или выключить перехват. Но мне не удалось получить горизонтальные смещения. Например, я хотел бы быть в состоянии соответствовать, по существу,
y = alpha + beta * abs(x_opt - x_obs)
с x_opt свободным в подгонке. Я пытался написать это так:
y ~ 1 + np.abs(y - x)
используя постоянный столбец для у. Но в скобках np.abs() patsy "выключается", а y - x просто интерпретируется как число. Если я перейду y на 1 или 20, я получу разные ответы.
Аналогичный вопрос касается, например, np.pow(1-x, 2) или синусоидальной волны. Возможность подгонки по смещению x была бы чрезвычайно полезной. Это возможно? Или это именно то, что подразумевается, что patsy не делает нелинейный?
1 ответ
patsy и большинство statsmodels работают только с моделями, линейными по параметрам. Точнее, модели, в которых матрица проектирования и расчетные параметры объединены линейно, x * beta.
Полиномы и сплайны являются нелинейными по основным переменным, но имеют линейное представление в терминах базисной функции и, следовательно, являются линейными по параметрам.
Единственными нелинейностями в моделях, которые в настоящее время реализованы в statsmodels, являются предопределенные нелинейности, такие как функции связи в GLM или дискретных моделях, параметры формы в моделях, таких как NegativeBinomial, или ковариации в смешанных моделях и GEE.
Лучшим пакетом Python для нелинейных наименьших квадратов в настоящее время является lmfit https://pypi.python.org/pypi/lmfit/