Я пытаюсь использовать ограничение с двумя независимыми (x1, x2) переменными. В качестве уравнения используется модифицированная модель баса . Результат минимизации c не соответствует правильной оценке параметра 'q' (отрицательное значение), поэтому график изображен неправильно. Предположительно, я выполнил что-то изношенное, не могли бы вы помочь решить?
import pandas as pd
import numpy as np
from lmfit import Parameters, fit_report, minimize
#Define Data & Variables
x1=np.array(df['cumulative__sales'])
x2=np.array(df['cumulative_sales_2'])
y_p=df['sales']
t1=np.linspace(1,55,(len(yp)))
def b_func(params,x1,x2,yp):
p = params['p']
m = params['m']
q = params['q']
b = params['b']
model= (p*m)+(q-p)*x1+(-q/m)*x1**2+(x2*b)*(m-x1)
return model - yp
# Define Parameters
params = Parameters()
params.add('m', value=1003)
params.add('p', value=0.03, min=0.0001)
params.add('q', value=0.05, min=0.001)
params.add('b', value=-0.05)
# For non-linear leastsq algorithm
minner = Minimizer(b_func, params, fcn_args=(x1,x2,yp))
result = minner.minimize()
Отчет показывает, что параметр «q» отрицательный (оценка неверна). если я добавлю границу min = 0.001, то параметр вообще не рассчитывается и равен начальному значению.
# Final result
final = yp + result.residual
report_fit(result)
m: 1281.66188 (3.58%) (init = 1003)
p: 0.01251625 (9.86%) (init = 0.03)
Negative - > q: -0.47443242 (37.85%) (init = 0.05)
b: 3.3332e-04 (36.21%) (init = -0.05)
Но по правилу Басса это не могло быть возможным, потому что покупателей нет. Таким образом, диаграмма неправильно отображает значение Y, она должна располагаться в форме буквы S (идет по касательной). С отрицательным значением P:
введите здесь описание изображения
Типичное уравнение и график без дополнительной переменной x2, только x1 и Y: введите описание изображения здесь
введите описание изображения здесь
Модифицированная версия уравнения: введите описание изображения здесь
График с минимальной границей q = 0,01, но параметр не вычисляется и всегда равен начальному значению.
введите здесь описание изображения
Спасибо за ваше время.