Что именно делает надежный параметр regplot ()? - PullRequest
0 голосов
/ 02 мая 2018

Относительно этого вопроса , мне интересно, что на самом деле делает опция robust в regplot () seaborn.

Описание гласит следующее:

Если True, используйте statsmodels для оценки устойчивой регрессии. Это уменьшит вес выбросов. Обратите внимание, что это существенно более сложный вычислительный процесс, чем стандартная линейная регрессия, поэтому вы можете уменьшить количество загрузочных повторных выборок (n_boot) или установить ci на None.

Значит ли это, что это больше похоже на то, как работают корреляции Кендалла и Спирмена, поскольку они, как известно, устойчивы к выбросам? Или это не имеет ничего общего друг с другом? Другими словами, имеет ли смысл использовать robust=True?

при расчете Кендалла для некоторых данных и построении диаграммы рассеяния с помощью regplot().

1 Ответ

0 голосов
/ 16 мая 2018

Коэффициенты корреляции против коэффициентов регрессии

Кендалл и Спирмен корреляции являются мерами того, насколько хорошо коррелированы две переменные, , т.е. насколько тесно связаны две переменные. Результатом является коэффициент корреляции , который представляет собой статистику, которая говорит вам, как коррелированные вещи (1 - идеальные отношения, 0 - идеальное отсутствие отношений), и в грубом смысле направленность этой корреляции (-1 представляет отрицательный наклон). Также важно отметить, что коэффициенты корреляции Спирмена и Кендалла чувствительны к выбросам, а метод Спирмена более чувствителен.

Робастная линейная регрессия , с другой стороны, является частным случаем линейной регрессии, которая является средством нахождения связи между 2 или более переменными. Вы можете думать об этом как о методе поиска «линии наилучшего соответствия». Результатом линейной регрессии является коэффициент регрессии , который является мерой того, как (направление и наклон) вашего ответа изменяется с вашими переменными.

«Классическая» против Робастной линейной регрессии

Часто линейная регрессия использует Обыкновенные наименьшие квадраты или OLS , чтобы найти коэффициенты регрессии, с целью минимизировать сумму квадратов ваших остатков (квадратный корень из разницы между вашей оценочной линией и ваши фактические данные). Это довольно чувствительно к выбросам:

x = np.arange(0,10,0.2)
y = (x*0.25)+np.random.normal(0,.1,50)
y[[12,14,18,24]] -= 4

sns.regplot(x,y, robust = False)

enter image description here

Обратите внимание, как линия перетаскивается выбросами. Во многих случаях это поведение, которое вы хотите увидеть.

С другой стороны, надежные методы регрессии, как правило, используют разные меры для нахождения коэффициентов регрессии, помимо OLS, например, минимизацию наименьших обрезанных квадратов , которая, по сути, является суммой квадратов в подмножестве ваших данных. (в этом смысле это похоже на самозагрузку). Как правило, это делается итеративно, взвешивая результат соответственно , так что данный выброс в конечном итоге не оказывает большого влияния на ваши коэффициенты. Это то, что делает statsmodels.robust.robust_linear_model.RLM, что вызывается, когда вы используете robust = True в морском роге. Результат, на тех же данных, что и раньше:

sns.regplot(x,y,robust = True)

enter image description here

Обратите внимание, что линия не была перетянута вашими выбросами. Во многих случаях это не то поведение, которого хотят люди, но оно зависит от того, что вы делаете ...

Примечание: это действительно вычислительно дорого (только для этих 50 точек данных на моей машине потребовалось около 5 секунд).

Какой коэффициент корреляции использовать?

Если вы хотите продолжать сообщать свой коэффициент корреляции Кендалла, не используйте аргумент robust при визуализации ваших данных. Это будет вводить в заблуждение, так как чувствительность к ошибкам Кендалла не будет сопоставима с тем, что представлено вашей устойчивой линейной регрессией (чтобы показать, насколько это может варьироваться, в моих данных выше, корреляция Кендалла была 0,85, коэффициент корреляции копейщика был 0,93 ). sns.regplot() с robust=True вызовами по умолчанию statsmodels.robust.robust_linear_model.RLM, который использует критерий HuberT() по умолчанию. Поэтому, если вы хотите сообщить что-то вроде коэффициента корреляции, моя интуиция заключается в том, что вам придется использовать некоторую меру потери Хьюбера (вы, вероятно, найдете более подробную информацию об этом здесь ). Или вы можете прочитать этот документ , в котором, как представляется, есть некоторое представление о надежных альтернативах коэффициента корреляции.

...