Коэффициенты корреляции против коэффициентов регрессии
Кендалл и Спирмен корреляции являются мерами того, насколько хорошо коррелированы две переменные, , т.е. насколько тесно связаны две переменные. Результатом является коэффициент корреляции , который представляет собой статистику, которая говорит вам, как коррелированные вещи (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](https://i.stack.imgur.com/BALki.png)
Обратите внимание, как линия перетаскивается выбросами. Во многих случаях это поведение, которое вы хотите увидеть.
С другой стороны, надежные методы регрессии, как правило, используют разные меры для нахождения коэффициентов регрессии, помимо OLS, например, минимизацию наименьших обрезанных квадратов , которая, по сути, является суммой квадратов в подмножестве ваших данных. (в этом смысле это похоже на самозагрузку). Как правило, это делается итеративно, взвешивая результат соответственно , так что данный выброс в конечном итоге не оказывает большого влияния на ваши коэффициенты. Это то, что делает statsmodels.robust.robust_linear_model.RLM
, что вызывается, когда вы используете robust = True
в морском роге. Результат, на тех же данных, что и раньше:
sns.regplot(x,y,robust = True)
![enter image description here](https://i.stack.imgur.com/JHvku.png)
Обратите внимание, что линия не была перетянута вашими выбросами. Во многих случаях это не то поведение, которого хотят люди, но оно зависит от того, что вы делаете ...
Примечание: это действительно вычислительно дорого (только для этих 50 точек данных на моей машине потребовалось около 5 секунд).
Какой коэффициент корреляции использовать?
Если вы хотите продолжать сообщать свой коэффициент корреляции Кендалла, не используйте аргумент robust
при визуализации ваших данных. Это будет вводить в заблуждение, так как чувствительность к ошибкам Кендалла не будет сопоставима с тем, что представлено вашей устойчивой линейной регрессией (чтобы показать, насколько это может варьироваться, в моих данных выше, корреляция Кендалла была 0,85, коэффициент корреляции копейщика был 0,93 ). sns.regplot()
с robust=True
вызовами по умолчанию statsmodels.robust.robust_linear_model.RLM
, который использует критерий HuberT()
по умолчанию. Поэтому, если вы хотите сообщить что-то вроде коэффициента корреляции, моя интуиция заключается в том, что вам придется использовать некоторую меру потери Хьюбера (вы, вероятно, найдете более подробную информацию об этом здесь ). Или вы можете прочитать этот документ , в котором, как представляется, есть некоторое представление о надежных альтернативах коэффициента корреляции.