Как получить результаты численного подбора при построении регрессии в морском дне?
Если я использую морскую библиотеку в Python для построения результата линейной регрессии, есть ли способ узнать числовые результаты регрессии? Например, мне может понадобиться узнать коэффициенты подгонки или R 2 подгонки.
Я мог бы повторно запустить ту же самую установку, используя базовый интерфейс statsmodels, но это, казалось бы, было бы ненужным дублирующим усилием, и в любом случае я хотел бы иметь возможность сравнить полученные коэффициенты, чтобы быть уверенным, что числовые результаты одинаковы как то, что я вижу в сюжете.
Ответы
Ответ 1
Нет никакого способа сделать это.
По моему мнению, попросить библиотеку визуализации дать вам результаты статистического моделирования в обратном порядке. statsmodels
, библиотека моделирования, позволяет вам подгонять модель, а затем рисовать график, который точно соответствует подходящей модели. Если вам нужно это точное соответствие, этот порядок операций имеет для меня больше смысла.
Вы можете сказать "но графики в statsmodels
не имеют столько эстетических опций, сколько seaborn
". Но я думаю, что это имеет смысл - statsmodels
- это библиотека моделирования, которая иногда использует визуализацию в сервисе моделирования. seaborn
- это библиотека визуализации, которая иногда использует моделирование в сервисе визуализации. Хорошо специализироваться и плохо пытаться сделать все.
К счастью, как seaborn
, так и statsmodels
используйте tidy data. Это означает, что вам действительно нужно очень мало дублирования усилий, чтобы получить как графики, так и модели с помощью соответствующих инструментов.
Ответ 2
Просматривая доступный в настоящее время документ, ближайший я смог определить, можно ли теперь выполнить эту функцию, если вы используете модуль scipy.stats.pearsonr.
r2 = stats.pearsonr("pct", "rdiff", df)
При попытке заставить его работать непосредственно в фреймворке Pandas, из-за нарушения основных требований к входному входному сигналу произошла ошибка:
TypeError: pearsonr() takes exactly 2 arguments (3 given)
Мне удалось найти другого пользователя Pandas Seaborn, который, очевидно, решил
it: https://github.com/scipy/scipy/blob/v0.14.0/scipy/stats/stats.py#L2392
sns.regplot("rdiff", "pct", df, corr_func=stats.pearsonr);
Но, к сожалению, мне не удалось заставить это работать, поскольку, по-видимому, автор создал свой собственный "corr_func", либо есть недокументированный метод прохождения аргументов Seaborn, доступный с использованием более ручного метода:
# x and y should have same length.
x = np.asarray(x)
y = np.asarray(y)
n = len(x)
mx = x.mean()
my = y.mean()
xm, ym = x-mx, y-my
r_num = np.add.reduce(xm * ym)
r_den = np.sqrt(ss(xm) * ss(ym))
r = r_num / r_den
# Presumably, if abs(r) > 1, then it is only some small artifact of floating
# point arithmetic.
r = max(min(r, 1.0), -1.0)
df = n-2
if abs(r) == 1.0:
prob = 0.0
else:
t_squared = r*r * (df / ((1.0 - r) * (1.0 + r)))
prob = betai(0.5*df, 0.5, df / (df + t_squared))
return r, prob
Надеемся, что это поможет продвинуть этот первоначальный запрос в сторону промежуточного решения, поскольку там очень нужна утилита для добавления статистики соответствия регрессии к пакету Seaborn в качестве замены тому, что можно легко получить из MS-Excel или линейного плана Matplotlib.