Используйте API formula
.С пометкой patsy
вы должны иметь тривиальное значение, но у меня что-то не получается.Тем не менее он принимает функции;в этом случае мы возводим в квадрат, используя numpy.power
.
import statsmodels.formula.api as smf
import numpy as np
mod = smf.ols('Asthma_Death_Rate ~ Air_quality + np.power(Smoking_Status, 2)', data=df).fit()
Образцы данных:
import pandas as pd
np.random.seed(123)
s = 100
df = pd.DataFrame({'Air_quality': np.random.randint(1, 20, s),
'Smoking_Status': np.arange(0, s, 1) + np.random.normal(size=s),
'Asthma_Death_Rate': np.arange(0, s, 1)**2})
Вывод: часть mod.summary()
===============================================================================================
coef std err t P>|t| [0.025 0.975]
-----------------------------------------------------------------------------------------------
Intercept 3.4253 33.039 0.104 0.918 -62.148 68.999
Air_quality 3.2522 2.721 1.195 0.235 -2.148 8.653
np.power(Smoking_Status, 2) 0.9916 0.005 193.833 0.000 0.981 1.002
Как и предполагалось, Asthma_Death_Rate очень хорошо коррелирует с квадратом Smoking_Status.