Що таке коефіцієнт кореляції? Пояснення значення r у статистиці

Співвідношення є чудовим інструментом для вивчення того, як одне змінюється з іншим. Прочитавши це, ви повинні зрозуміти, що таке кореляція, як думати про кореляції у власній роботі та створити мінімальну реалізацію для обчислення кореляцій.

Співвідношення стосується того, як дві речі змінюються між собою

Співвідношення - це абстрактне математичне поняття, але ви, мабуть, уже уявляєте, що це означає. Ось кілька прикладів трьох загальних категорій кореляції.

Коли ви з’їсте більше їжі, ви, мабуть, відчуєте себе ситішими. Це випадок, коли дві речі змінюються разом однаково. Один піднімається вгору (з’їдаючи більше їжі), потім інший також піднімається (відчуває ситість). Це позитивна кореляція .

Коли ви сидите в машині, і вона їде швидше, ви, швидше за все, доїдете до місця призначення, а ваш загальний час у дорозі стане меншим. Це випадок, коли дві речі змінюються в протилежному напрямку (більша швидкість, але менше часу). Це негативна кореляція .

Існує також третій можливий спосіб, як дві речі можуть "змінитися". Вірніше, не змінити. Наприклад, якщо ви хочете набрати вагу і подивитися, як змінилися ваші тестові бали, то, ймовірно, не буде жодної загальної закономірності зміни ваших тестових балів. Це означає, що немає кореляції.

Знання про те, як дві речі змінюються разом, є першим кроком до прогнозування

Вміти описати те, що відбувається в наших попередніх прикладах - це здорово і все. Але який сенс? Причина полягає в тому, щоб застосувати ці знання значущим чином, щоб допомогти передбачити, що буде далі.

У нашому прикладі прийому їжі ми можемо записати, скільки ми з’їдаємо протягом цілого тижня, а потім зробити запис про те, як ми почуваємось згодом. Як ми виявили раніше, чим більше ми їмо, тим ситішими ми почуваємось.

Після збору всієї цієї інформації ми можемо задати більше запитань про те, чому це відбувається, щоб краще зрозуміти ці стосунки. Тут ми можемо почати запитувати, який вид їжі робить нас більш ситими, чи впливає час доби на те, наскільки ми також почуваємось ситими.

Подібне мислення може бути застосовано і до вашої роботи чи бізнесу. Якщо ви помітили, що обсяги продажів або інші важливі показники зростають або знижуються з іншими показниками вашого бізнесу (іншими словами, речі позитивно корелюють або негативно корелюють), можливо, варто вивчити та дізнатись більше про ці стосунки для покращення вашого бізнесу.

Співвідношення можуть мати різний рівень міцності

Ми розглянули деякі загальні кореляції як

  • позитивний,
  • негативний, або
  • неіснуючі

Хоча ці описи нормальні, всі позитивні та негативні кореляції не однакові.

Ці описи також можна перевести в цифри. Значення кореляції може приймати будь-яке десяткове значення між від’ємним, \ (- 1 \) та додатним, \ (+ 1 \).

Десяткові значення між \ (- 1 \) та \ (0 \) є негативними кореляціями, наприклад \ (- 0,32 \).

Десяткові значення між \ (0 \) та \ (+ 1 \) є позитивними кореляціями, наприклад \ (+ 0,63 \).

Ідеальна кореляція нуля означає відсутність кореляції.

Для кожного типу кореляції існує ряд сильних кореляцій та слабких кореляцій. Значення кореляції, ближчі до нуля, є більш слабкими кореляціями , тоді як значення, ближчі до позитивної чи негативної, є сильнішою кореляцією .

Сильні кореляції показують більш очевидні тенденції в даних, тоді як слабкі виглядають сумнівнішими. Наприклад, сильна висока позитивна кореляція нижче виглядає більше як лінія порівняно із слабшою і нижчою позитивною кореляцією.

Приклади низької, високої та досконалої позитивної кореляції між х та у

Так само сильно негативні кореляції мають більш очевидну тенденцію, ніж слабші та нижчі негативні кореляції.

Приклади низької, високої та досконалої негативної кореляції між х та у

Звідки походить значення r ? І яких цінностей це може прийняти?

" Значення r " є загальним способом позначення значення кореляції. Більш конкретно, це стосується (вибірки) кореляції Пірсона або r Пірсона . Примітка "зразок" підкреслює, що ви можете вимагати кореляції лише для даних, які у вас є, і ви повинні бути обережними, висуваючи більші вимоги, крім ваших даних.

У наведеній нижче таблиці узагальнено те, що ми вже розглядали щодо співвідношень.

Значення r ПірсонаСпіввідношення між двома речами ...Приклад
r = -1Цілком негативноГодина дня та кількість годин, що залишилися в день
r <0НегативніШвидша швидкість автомобіля та менший час у дорозі
r = 0Незалежний або некорельованийЗбільшення ваги та результати тестів
r> 0ПозитивніБільше з’їденої їжі і відчуття ситності
r = 1Цілком позитивноЗбільшення мого віку і збільшення вашого віку

У наступних кількох розділах ми це зробимо

  • Розбийте математичне рівняння для обчислення кореляцій
  • Використовуйте приклади чисел, щоб використовувати це рівняння кореляції
  • Кодуйте математичне рівняння в Python та JavaScript

Розбиття математики для розрахунку кореляцій

Нагадуємо, співвідношення можуть бути лише між \ (- 1 \) та \ (1 \). Чому так?

Швидка відповідь полягає в тому, що ми регулюємо величину зміни обох змінних до загальної шкали. У більш технічних термінах ми нормалізуємо, наскільки змінюються дві змінні разом, наскільки змінюється кожна з двох змінних сама по собі.

З Вікіпедії ми можемо взяти математичне визначення коефіцієнта кореляції Пірсона. Це виглядає дуже складно, але давайте розберемо це разом.

\[ \textcolor{lime}{r} _{ \textcolor{#4466ff}{x} \textcolor{fuchsia}{y} } = \frac{ \sum_{i=1}^{n} (x_i - \textcolor{green}{\bar{x}})(y_i - \textcolor{olive}{\bar{y}}) }{ \sqrt{ \sum_{i=1}^{n} (x_i - \textcolor{green}{\bar{x}})^2 \sum_{i=1}^{n} (y_i - \textcolor{olive}{\bar{y}})^2 } }\]

From this equation, to find the \(\textcolor{lime}{\text{correlation}}\) between an \( \textcolor{#4466ff}{\text{x variable}} \) and a \( \textcolor{fuchsia}{\text{y variable}} \), we first need to calculate the \( \textcolor{green}{\text{average value for all the } x \text{ values}} \) and the \( \textcolor{olive}{ \text{average value for all the } y \text{ values}} \).

Let's focus on the top of the equation, also known as the numerator. For each of the \( x\) and \(y\) variables, we'll then need to find the distance of the \(x\) values from the average of \(x\), and do the same subtraction with \(y\).

Intuitively, comparing all these values to the average gives us a target point to see how much change there is in one of the variables.

This is seen in the math form, \(\textcolor{#800080}{\sum_{i=1}^{n}}(\textcolor{#000080}{x_i - \overline{x}})\), \(\textcolor{#800080}{\text{adds up all}}\) the \(\textcolor{#000080}{\text{differences between}}\) your values with the average value for your \(x\) variable.

In the bottom of the equation, also known as the denominator, we do a similar calculation. However, before we add up all of the distances from our values and their averages, we will multiple them by themselves (that's what the \((\ldots)^2\) is doing).

This denominator is what "adjusts" the correlation so that the values are between \(-1\) and \(1\).

Using numbers in our equation to make it real

To demonstrate the math, let's find the correlation between the ages of you and your siblings last year \([1, 2, 6]\) and your ages for this year \([2, 3, 7]\). Note that this is a small example. Typically you would want many more than three samples to have more confidence in your correlation being true.

Looking at the numbers, they appear to increase the same. You may also notice they are the same sequence of numbers but the second set of numbers has one added to it. This is as close to a perfect correlation as we'll get. In other words, we should get an \(r = 1\).

First we need to calculate the averages of each. The average of \([1, 2, 6]\) is \((1+2+6)/3 = 3\) and the average of \([2, 3, 7]\) is \((2+3+7)/3 = 4\). Filling in our equation, we get

\[ r _{ x y } = \frac{ \sum_{i=1}^{n} (x_i - 3)(y_i - 4) }{ \sqrt{ \sum_{i=1}^{n} (x_i - 3)^2 \sum_{i=1}^{n} (y_i - 4)^2 } }\]

Looking at the top of the equation, we need to find the paired differences of \(x\) and \(y\). Remember, the \(\sum\) is the symbol for adding. The top then just becomes

\[ (1-3)(2-4) + (2-3)(3-4) + (6-3)(7-4) \]

\[= (-2)(-2) + (-1)(-1) + (3)(3) \]

\[= 4 + 1 + 9 = 14\]

So the top becomes 14.

\[ r _{ x y } = \frac{ 14 }{ \sqrt{ \sum_{i=1}^{n} (x_i - 3)^2 \sum_{i=1}^{n} (y_i - 4)^2 } }\]

In the bottom of the equation, we need to do some very similar calculations, except focusing on just the \(x\) and \(x\) separately before multiplying.

Let's focus on just \( \sum_{i=1}^n (x_i - 3)^2 \) first. Remember, \(3\) here is the average of all the \(x\) values. This number will change depending on your particular data.

\[ (1-3)^2 + (2-3)^2 + (6-3)^2 \]

\[= (-2)^2 + (-1)^2 + (3)^2 = 4 + 1 + 9 = 14 \]

And now for the \(y\) values.

\[ (2-4)^2 + (3-4)^2 + (7-4)^2 \]

\[ (-2)^2 + (-1)^2 + (3)^2 = 4 + 1 + 9 = 14\]

We those numbers filled out, we can put them back in our equation and solve for our correlation.

\[ r _{ x y } = \frac{ 14 }{ \sqrt{ 14 \times 14 }} = \frac{14}{\sqrt{ 14^2}} = \frac{14}{14} = 1\]

We've successfully confirmed that we get \(r = 1\).

Although this was a simple example, it is always best to use simple examples for demonstration purposes. It shows our equation does indeed work, which will be important when coding it up in the next section.

Python and JavaScript code for the Pearson correlation coefficient

Math can sometimes be too abstract, so let's code this up for you to experiment with. As a reminder, here is the equation we are going to code up.

\[ r _{ x y } = \frac{ \sum_{i=1}^{n} (x_i - \bar{x})(y_i - \bar{y}) }{ \sqrt{ \sum_{i=1}^{n} (x_i - \bar{x})^2 \sum_{i=1}^{n} (y_i - \bar{y})^2 } }\]

After going through the math above and reading the code below, it should be a bit clearer on how everything works together.

Below is the Python version of the Pearson correlation.

import math def pearson(x, y): """ Calculate Pearson correlation coefficent of arrays of equal length. Numerator is sum of the multiplication of (x - x_avg) and (y - y_avg). Denominator is the squart root of the product between the sum of (x - x_avg)^2 and the sum of (y - y_avg)^2. """ n = len(x) idx = range(n) # Averages avg_x = sum(x) / n avg_y = sum(y) / n numerator = sum([(x[i] - avg_x)*(y[i] - avg_y) for i in idx]) denom_x = sum([(x[i] - avg_x)**2 for i in idx]) denom_y = sum([(y[i] - avg_y)**2 for i in idx]) denominator = math.sqrt(denom_x * denom_y) return numerator / denominator

Here's an example of our Python code at work, and we can double check our work using a Pearson correlation function from the SciPy package.

import numpy as np import scipy.stats # Create fake data x = np.arange(5, 15) # array([ 5, 6, 7, 8, 9, 10, 11, 12, 13, 14]) y = np.array([24, 0, 58, 26, 82, 89, 90, 90, 36, 56]) # Use a package to calculate Pearson's r # Note: the p variable below is the p-value for the Pearson's r. This tests # how far away our correlation is from zero and has a trend. r, p = scipy.stats.pearsonr(x, y) r # 0.506862548805646 # Use our own function pearson(x, y) # 0.506862548805646

Below is the JavaScript version of the Pearson correlation.

function pearson(x, y) { let n = x.length; let idx = Array.from({length: n}, (x, i) => i); // Averages let avgX = x.reduce((a,b) => a + b) / n; let avgY = y.reduce((a,b) => a + b) / n; let numMult = idx.map(i => (x[i] - avg_x)*(y[i] - avg_y)); let numerator = numMult.reduce((a, b) => a + b); let denomX = idx.map(i => Math.pow((x[i] - avgX), 2)).reduce((a, b) => a + b); let denomY = idx.map(i => Math.pow((y[i] - avgY), 2)).reduce((a, b) => a + b); let denominator = Math.sqrt(denomX * denomY); return numerator / denominator; };

Here's an example of our JavaScript code at work to double check our work.

x = Array.from({length: 10}, (x, i) => i + 5) // Array(10) [ 5, 6, 7, 8, 9, 10, 11, 12, 13, 14 ] y = [24, 0, 58, 26, 82, 89, 90, 90, 36, 56] pearson(x, y) // 0.506862548805646

Feel free to translate the formula into either Python or JavaScript to better understand how it works.

In conclusion

Correlations are a helpful and accessible tool to better understand the relationship between any two numerical measures. It can be thought of as a start for predictive problems or just better understanding your business.

Correlation values, most commonly used as Pearson's r, range from \(-1\) to \(+1\) and can be categorized into negative correlation (\(-1 \lt r \lt 0\)), positive (\(0 \lt r \lt 1\)), and no correlation (\(r = 0\)).

A glimpse into the larger world of correlations

There is more than one way to calculate a correlation. Here we have touched on the case where both variables change at the same way. There are other cases where one variable may change at a different rate, but still have a clear relationship. This gives rise to what's called, non-linear relationships.

Note, correlation does not imply causation. If you need quick examples of why, look no further.

Below is a list of other articles I came across that helped me better understand the correlation coefficient.

  • If you want to explore a great interactive visualization on correlation, take a look at this simple and fantastic site.
  • Using Python, there multiple ways to implement a correlation and there are multiple types of correlation. This excellent tutorial shows great examples of Python code to experiment with yourself.
  • A blog post by Sabatian Sauer goes over correlations using "average deviation rectangles", where each point creates a visual rectangle from each point using the mean, and illustrating it using the R programming language.
  • And for the deeply curious people out there, take a look at this paper showing 13 ways to look at the correlation coefficient (PDF).

Follow me on Twitter and check out my personal blog where I share some other insights and helpful resources for programming, statistics, and machine learning.

Thanks for reading!