Какво е коефициент на корелация? Обяснена стойност на r в статистиката

Корелациите са чудесен инструмент за научаване на това как едно нещо се променя с друго. След като прочетете това, трябва да разберете какво е корелация, как да мислите за корелациите в собствената си работа и да създадете минимално изпълнение за изчисляване на корелациите.

Съотношението е за това как две неща се променят помежду си

Корелацията е абстрактно математическо понятие, но вероятно вече имате представа за това какво означава. Ето няколко примера за трите общи категории корелация.

Докато ядете повече храна, вероятно ще се почувствате по-сити. Това е случай, когато две неща се променят заедно по един и същи начин. Единият се качва нагоре (яде повече храна), след това другият също се качва (чувство за ситост). Това е положителна корелация .

Когато сте в кола и тя върви по-бързо, вероятно ще стигнете до дестинацията си по-бързо и общото ви време за пътуване ще бъде по-малко. Това е случай на две неща, които се променят в обратна посока (повече скорост, но по-малко време). Това е отрицателна корелация .

Съществува и трети възможен начин, по който две неща могат да се „променят“. Или по-скоро не промяна. Например, ако трябваше да наддадете на тегло и да разгледате как се променят резултатите от теста, вероятно няма да има някакъв общ модел на промяна в резултатите от теста. Това означава, че няма корелация.

Знанието за това как двете неща се променят заедно е първата стъпка към прогнозирането

Да можеш да опишеш какво се случва в предишните ни примери е чудесно и всичко. Но какъв е смисълът? Причината е да се приложат тези знания по смислен начин, за да се предскаже какво ще се случи по-нататък.

В нашия пример за хранене можем да запишем колко ядем за цяла седмица и след това да отбележим колко сити се чувстваме след това. Както открихме преди, колкото повече ядем, толкова по-сити се чувстваме.

След като съберем цялата тази информация, можем да зададем повече въпроси защо това се случва, за да разберем по-добре тази връзка. Тук може да започнем да питаме какъв вид храни ни правят по-сити или дали времето на деня влияе върху това колко пълно се чувстваме и ние.

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

Корелациите могат да имат различни нива на сила

Ние сме обхванали някои общи корелации като двете

  • положителен,
  • отрицателен, или
  • несъществуващ

Въпреки че тези описания са добре, всички положителни и отрицателни корелации не са еднакви.

Тези описания също могат да бъдат преведени в цифри. Стойността на корелацията може да приеме всяка десетична стойност между отрицателна, \ (- 1 \) и положителна, \ (+ 1 \).

Десетичните стойности между \ (- 1 \) и \ (0 \) са отрицателни корелации, като \ (- 0,32 \).

Десетичните стойности между \ (0 \) и \ (+ 1 \) са положителни корелации, като \ (+ 0.63 \).

Перфектната нулева корелация означава, че няма корелация.

За всеки тип корелация има набор от силни и слаби корелации. Стойностите на корелацията, близки до нулата, са по-слаби корелации , докато стойностите, по-близки до положителната или отрицателната, са по-силна корелация .

Силните корелации показват по-очевидни тенденции в данните, докато слабите изглеждат по-разрошени. Например по-силната висока, положителна корелация по-долу изглежда по-скоро като линия в сравнение с по-слабата и по-ниска, положителна корелация.

Примери за ниска, висока и перфектна положителна корелация между x и y

По същия начин силно отрицателните корелации имат по-очевидна тенденция от по-слабата и по-ниска отрицателна корелация.

Примери за ниска, висока и перфектна отрицателна корелация между x и y

Откъде идва стойността r ? И какви ценности може да вземе?

„ Стойността r “ е често срещан начин за посочване на стойност на корелация. По-конкретно, той се отнася до (примерната) корелация на Пиърсън или r на Пиърсън . Бележката "пример" е да подчертае, че можете да заявите корелацията само с данните, с които разполагате, и трябва да бъдете предпазливи, когато правите по-големи претенции извън вашите данни.

Таблицата по-долу обобщава това, което сме обхванали за корелациите досега.

R стойност на PearsonКорелацията между две неща е ...Пример
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!