У меня есть некоторые проблемы с реализацией формул в модели состояния. (Я использую их впервые) Я обнаружил, что у них сильный статистический фон: R2 / adj-R2 / AIC / BIC / Pseudo-F и др. c.)
Я беру 6 различных функций что я проверяю в Scipy curve_fit(func, xData, yData, **options)
и получаю результаты для сравнения с тем, что получу в модели статистики.
Мои функции:
# exponential function with adidtional konstant
def func0(x,a,b,c):
return c+a*np.exp(b*x)
# exponential function
def func1(x, a, b):
return a*np.exp(b*x)
# logarithmic function
def func2(x, a,b):
return a*np.exp(x)+b
# # generalized logistic function
def func3(x, a, b, c, d, g):
return ((a-d)/((1+((x/c)**b))**g))+d
def func4(x, a,b,c,d):
return a/(1 + np.exp(-c * (x - d))) + b
# parabola function
def func5(x, a,b,c):
return a*x**2+b*x+c
Это результаты:
но когда я пытаюсь вписать их в модель статистики:
ХОРОШО (coff. Тот же самый):
import statsmodels.formula.api as sm
# logarithmic function
def func2(x, a,b):
return a*np.exp(x)+b
model = sm.ols(formula='Y ~ np.exp(x)', data=tmp_df)
coef std err t P>|t| [0.025 0.975]
Intercept -0.4388 0.006 -69.890 0.000 -0.451 -0.426
np.exp(x) 0.4176 0.004 106.238 0.000 0.410 0.425
-------------------------------------------------------------
# parabola function
def func5(x, a,b,c):
return a*x**2+b*x+c
model = sm.ols(formula='Y ~ x + I(x**2)', data=tmp_df)
coef std err t P>|t| [0.025 0.975]
Intercept 0.1995 0.004 47.709 0.000 0.191 0.208
x -0.7953 0.020 -39.745 0.000 -0.835 -0.756
I(x ** 2) 1.5475 0.021 74.036 0.000 1.506 1.588
каким должен быть синтаксис для остальных функции в параметре модели статистики? formula=
# exponential function with adidtional konstant
def func0(x,a,b,c):
return c+a*np.exp(b*x)
# exponential function
def func1(x, a, b):
return a*np.exp(b*x)
# # generalized logistic function
def func3(x, a, b, c, d, g):
return ((a-d)/((1+((x/c)**b))**g))+d
def func4(x, a,b,c,d):
return a/(1 + np.exp(-c * (x - d))) + b
РЕДАКТИРОВАНИЕ:
в комментариях я обнаружил, что мой вопрос является широким, тогда я упросту его, потому что я читаю документацию и могу не могу найти решение для них. Я оставлю только одну функцию из всех.
def func0(x,a,b,c):
return c+a*np.exp(b*x)
from scipy.optimize import curve_fit
popt, pcov = curve_fit(func, xData, yData, method='lm')
-------------------------------------------------------
popt
array([0.0116, 4.5424, 0.0796])
как получить те же результаты в statsmodels:
import statsmodels.formula.api as sm
model = sm.ols(formula='?????', data=tmp_df)