Hvad er en korrelationskoefficient? Værdien i statistik forklaret

Korrelationer er et godt værktøj til at lære om, hvordan en ting ændrer sig med en anden. Efter at have læst dette, skal du forstå, hvad sammenhæng er, hvordan man tænker på sammenhænge i dit eget arbejde og kode en minimal implementering for at beregne sammenhænge.

En sammenhæng handler om, hvordan to ting ændrer sig med hinanden

Korrelation er et abstrakt matematisk koncept, men du har sandsynligvis allerede en idé om, hvad det betyder. Her er nogle eksempler på de tre generelle kategorier af sammenhæng.

Når du spiser mere mad, vil du sandsynligvis ende med at føle dig mere mæt. Dette er et tilfælde, når to ting skifter sammen på samme måde. Den ene går op (spiser mere mad), så går den anden også op (føler sig mæt). Dette er en positiv sammenhæng .

Når du er i en bil, og den går hurtigere, kommer du sandsynligvis hurtigere til din destination, og din samlede rejsetid bliver mindre. Dette er et tilfælde af to ting, der ændrer sig i den modsatte retning (mere hastighed, men mindre tid). Dette er en negativ sammenhæng .

Der er også en tredje mulig måde, to ting kan "ændre" på. Eller rettere, ikke ændre. For eksempel, hvis du skulle tage på i vægt og kiggede på, hvordan dine testresultater ændrede sig, vil der sandsynligvis ikke være noget generelt mønster med ændringer i dine testresultater. Dette betyder, at der ikke er nogen sammenhæng.

At vide om, hvordan to ting ændrer sig sammen, er det første skridt til forudsigelse

At kunne beskrive, hvad der foregår i vores tidligere eksempler, er fantastisk og alt sammen. Men hvad er pointen? Årsagen er at anvende denne viden på en meningsfuld måde for at hjælpe med at forudsige, hvad der vil ske næste.

I vores spiseksempel kan vi registrere, hvor meget vi spiser i en hel uge, og derefter notere, hvor fulde vi føler os bagefter. Som vi fandt før, jo mere vi spiser, jo mere fyldt føler vi os.

Efter at have samlet alle disse oplysninger, kan vi stille flere spørgsmål om, hvorfor dette sker for bedre at forstå dette forhold. Her kan vi begynde at spørge, hvilken slags mad der gør os mere mætte, eller om tidspunktet på dagen også påvirker, hvor mæt vi har det.

Lignende tænkning kan også anvendes på dit job eller din virksomhed. Hvis du bemærker, at salg eller andre vigtige målinger går op eller ned med andre mål for din virksomhed (med andre ord, ting er positivt korreleret eller negativt korreleret), kan det være værd at udforske og lære mere om det forhold for at forbedre din forretning.

Korrelationer kan have forskellige styrkeniveauer

Vi har dækket nogle generelle sammenhænge som enten

  • positiv,
  • negativ, eller
  • ikke-eksisterende

Selvom disse beskrivelser er okay, er alle positive og negative sammenhænge ikke alle de samme.

Disse beskrivelser kan også oversættes til tal. En korrelationsværdi kan tage en hvilken som helst decimalværdi mellem negativ, \ (- 1 \) og positiv, \ (+ 1 \).

Decimalværdier mellem \ (- 1 \) og \ (0 \) er negative korrelationer, ligesom \ (- 0.32 \).

Decimalværdier mellem \ (0 \) og \ (+ 1 \) er positive korrelationer, som \ (+ 0,63 \).

En perfekt nul-sammenhæng betyder, at der ikke er nogen sammenhæng.

For hver type korrelation er der en række stærke korrelationer og svage korrelationer. Korrelationsværdier tættere på nul er svagere korrelationer , mens værdier tættere på positive eller negative er stærkere korrelation .

Stærke korrelationer viser mere åbenlyse tendenser i dataene, mens de svage ser mere rodet ud. For eksempel ligner den stærkere høje, positive korrelation nedenfor en linje sammenlignet med den svagere og lavere, positive korrelation.

Eksempler på lave, høje og perfekte positive korrelationer mellem x og y

Tilsvarende har stærkt negative korrelationer en mere åbenbar tendens end den svagere og lavere negative korrelation.

Eksempler på lave, høje og perfekte negative korrelationer mellem x og y

Hvor kommer r- værdien fra? Og hvilke værdier kan det tage?

" R- værdien" er en almindelig måde at indikere en korrelationsværdi på. Mere specifikt henviser det til (prøve) Pearson-korrelation eller Pearson's r . "Eksempel" -noten er at understrege, at du kun kan kræve sammenhængen for de data, du har, og du skal være forsigtig med at fremsætte større krav ud over dine data.

Tabellen nedenfor opsummerer, hvad vi hidtil har dækket om korrelationer.

Pearsons r-værdi Korrelation mellem to ting er ... Eksempel
r = -1 Perfekt negativt Dagens time og antal timer tilbage på dagen
r <0 Negativ Hurtigere bilhastigheder og lavere rejsetid
r = 0 Uafhængig eller ukorreleret Vægtforøgelse og testresultater
r> 0 Positiv Mere mad spist og følelse mere mæt
r = 1 Perfekt positivt Stigning i min alder og stigning i din alder

I de næste par afsnit vil vi

  • Opdel matematikligningen for at beregne sammenhænge
  • Brug eksempelnumre til at bruge denne korrelationsligning
  • Kod matematikligningen i Python og JavaScript

Opdeling af matematik for at beregne sammenhænge

Som en påmindelse kan korrelationer kun være mellem \ (- 1 \) og \ (1 \). Hvorfor det?

The quick answer is that we adjust the amount of change in both variables to a common scale. In more technical terms, we normalize how much the two variables change together by how much each of the two variables change by themselves.

From Wikipedia, we can grab the math definition of the Pearson correlation coefficient. It looks very complicated, but let's break it down together.

\[ \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.
  • Og for de dybt nysgerrige mennesker derude, se på dette papir, der viser 13 måder at se på korrelationskoefficienten (PDF).

Følg mig på Twitter og tjek min personlige blog, hvor jeg deler nogle andre indsigter og nyttige ressourcer til programmering, statistik og maskinindlæring.

Tak for læsningen!