В Python, как вы подходите минимальной квантильной линии регрессии b-сплайна?
Вы можете найти минимальную квантильную линию регрессии следующим образом:
import statsmodels.api as sm
import statsmodels.formula.api as smf
from statsmodels.regression.quantile_regression import QuantReg
mod = smf.quantreg('y ~ x', data)
res = mod.fit(q = 0.000001)
Но что, если вы хотите найти минимальную линию соответствия регрессии b-сплайна?
1 ответ
Если вам нужны кубические b-сплайны, вы можете сделать это:
#!/usr/bin/env python3
import matplotlib.pyplot as plt
import numpy as np
import statsmodels.formula.api as smf
x = np.linspace(0, 2, 100)
y = np.sqrt(x) * np.sin(2 * np.pi * x) + np.random.random_sample(100)
mod = smf.quantreg('y ~ bs(x, df=9)', dict(x=x, y=y))
res = mod.fit(q=0.000001)
print(res.summary())
plt.plot(x, y, '.')
plt.plot(x, res.predict(), 'r')
plt.show()
Вам нужно будет поиграть со степенями свободы (df
параметр) или укажите knots
параметр вместо. В зависимости от ваших данных вы можете использовать cr()
для естественных кубических сплайнов или cc()
для циклических кубических сплайнов. См. http://patsy.readthedocs.io/en/latest/spline-regression.html для получения дополнительной информации.