Питон ограниченной регрессии с переменными в качестве ограничений - PullRequest
0 голосов
/ 29 июня 2018

Я пытаюсь запустить ограниченную регрессию в Python, используя модель sm.GLM, а затем код model.fit_constrained.

Я добавляю две переменные наряду с двумя фиктивными переменными, которые я пытаюсь ограничить. Я хочу, чтобы коэффициенты двух фиктивных переменных умножались на вес, равный нулю.

Это прекрасно работает, когда я умножаю коэффициенты на целочисленные веса, как показано ниже

results = model.fit_constrained('BOATS * 1 + CARS * 0.5')

Однако я хочу, чтобы эти целые числа были переменными и зависели от соотношения моих данных с 1 для каждой фиктивной переменной. Я рассчитал пропорции в серии SectorWgt, но не могу понять, как потом передать их в код model.fit_constrained.

Это была моя лучшая попытка

results = model.fit_constrained('SIZE*int(SectorWgt.iloc[0])+VQMadj*int(SectorWgt.iloc[1])')

Но тогда я получаю ошибку

patsy.PatsyError: unrecognized token in constraint

из-за

int(SectorWgt.iloc[0])

часть кода.

У кого-нибудь есть мысли? Спасибо!

Ответы [ 2 ]

0 голосов
/ 03 июля 2018

Если вы используете Python 3.6 или новее, вы можете воспользоваться более чистым синтаксисом интерполяции строк с помощью f-строк Python .

constraint_str = f"SIZE*{int(SectorWgt.iloc[0])}+VQMadj*{int(SectorWgt.iloc[1])}"
results = model.fit_constrained(constraint_str)
0 голосов
/ 29 июня 2018

Использовать форматирование строки:

x = int(SectorWgt.iloc[0])
y = int(SectorWgt.iloc[1])

results = model.fit_constrained('SIZE*{}+VQMadj*{}'.format(x, y))
...