So ermitteln sie den p-wert des korrelationskoeffizienten bei pandas


Der Korrelationskoeffizient nach Pearson kann verwendet werden, um den linearen Zusammenhang zwischen zwei Variablen zu messen.

Dieser Korrelationskoeffizient nimmt immer einen Wert zwischen -1 und 1 an, wobei:

  • -1 : Perfekt negative lineare Korrelation zwischen zwei Variablen.
  • 0 : Keine lineare Korrelation zwischen zwei Variablen.
  • 1: Perfekt positive lineare Korrelation zwischen zwei Variablen.

Um festzustellen, ob ein Korrelationskoeffizient statistisch signifikant ist, können Sie den entsprechenden t-Score und p-Wert berechnen.

Die Formel zur Berechnung des t-Scores eines Korrelationskoeffizienten (r) lautet:

t = r√ n-2 / √ 1-r 2

Der p-Wert wird als entsprechender zweiseitiger p-Wert für die t-Verteilung mit n-2 Freiheitsgraden berechnet.

Um den p-Wert eines Pearson-Korrelationskoeffizienten in Pandas zu berechnen, können Sie die Funktion „pearsonr()“ aus der SciPy- Bibliothek verwenden:

 from scipy. stats import pearsonr

pearsonr(df[' column1 '], df[' column2 '])

Diese Funktion gibt den Pearson-Korrelationskoeffizienten zwischen den Spalten Spalte1 und Spalte2 zusammen mit dem entsprechenden p-Wert zurück, der uns sagt, ob der Korrelationskoeffizient statistisch signifikant ist oder nicht.

Wenn Sie den p-Wert für den Pearson-Korrelationskoeffizienten jeder möglichen paarweisen Kombination von Spalten in einem DataFrame berechnen möchten, können Sie dazu die folgende benutzerdefinierte Funktion verwenden:

 def r_pvalues(df):
    cols = pd. DataFrame (columns= df.columns )
    p = cols. transpose (). join (cols, how=' outer ')
    for r in df. columns :
        for c in df. columns :
            tmp = df[df[r]. notnull () & df[c]. notnull ()]
            p[r][c] = round(pearsonr(tmp[r], tmp[c])[1], 4)
    return p

Die folgenden Beispiele zeigen, wie man p-Werte für Korrelationskoeffizienten in der Praxis mit dem folgenden Pandas DataFrame berechnet:

 import pandas as pd

#createDataFrame
df = pd. DataFrame ({' x ': [4, 5, 5, 7, 8, 10, 12, 13, 14, 15],
                   ' y ': [10, 12, 14, 18, np.nan, 19, 13, 20, 14, np.nan],
                   ' z ': [20, 24, 24, 23, 19, 15, 18, 14, 10, 12]})

#view DataFrame
print (df)

    X Y Z
0 4 10.0 20
1 5 12.0 24
2 5 14.0 24
3 7 18.0 23
4 8 NaN 19
5 10 19.0 15
6 12 13.0 18
7 13 20.0 14
8 14 14.0 10
9 15 NaN 12

Beispiel 1: Berechnen Sie den P-Wert für den Korrelationskoeffizienten zwischen zwei Spalten in Pandas

Der folgende Code zeigt, wie der Pearson-Korrelationskoeffizient und der entsprechende p-Wert für die x- und y- Spalten des DataFrame berechnet werden:

 from scipy. stats import pearsonr

#drop all rows with NaN values
df_new = df. dropna ()

#calculation correlation coefficient and p-value between x and y
pearsonr(df_new[' x '], df_new[' y '])

PearsonRResult(statistic=0.4791621985883838, pvalue=0.22961622926360523)

Aus dem Ergebnis können wir sehen:

  • Der Pearson-Korrelationskoeffizient beträgt 0,4792 .
  • Der entsprechende p-Wert beträgt 0,2296 .

Da der Korrelationskoeffizient positiv ist, deutet dies darauf hin, dass zwischen den beiden Variablen eine positive lineare Beziehung besteht.

Da der p-Wert des Korrelationskoeffizienten jedoch nicht weniger als 0,05 beträgt, ist die Korrelation statistisch nicht signifikant.

Beachten Sie, dass wir auch die folgende Syntax verwenden können, um den p-Wert aus dem Korrelationskoeffizienten zu extrahieren:

 #extract p-value of correlation coefficient
pearsonr(df_new[' x '], df_new[' y '])[1]

0.22961622926360523

Der p-Wert für den Korrelationskoeffizienten beträgt 0,2296 .

Dies entspricht dem p-Wert der vorherigen Ausgabe.

Beispiel 2: Berechnen Sie den P-Wert für den Korrelationskoeffizienten zwischen allen Spalten in Pandas

Der folgende Code zeigt, wie der Pearson-Korrelationskoeffizient und der entsprechende p-Wert für jede paarweise Kombination von Spalten im Pandas DataFrame berechnet werden:

 #create function to calculate p-values for each pairwise correlation coefficient
def r_pvalues(df):
    cols = pd. DataFrame (columns= df.columns )
    p = cols. transpose (). join (cols, how=' outer ')
    for r in df. columns :
        for c in df. columns :
            tmp = df[df[r]. notnull () & df[c]. notnull ()]
            p[r][c] = round(pearsonr(tmp[r], tmp[c])[1], 4)
    return p

#use custom function to calculate p-values
r_pvalues(df)

             X Y Z
x 0.0 0.2296 0.0005
y 0.2296 0.0 0.4238
z 0.0005 0.4238 0.0

Aus dem Ergebnis können wir sehen:

  • Der p-Wert für den Korrelationskoeffizienten zwischen x und y beträgt 0,2296 .
  • Der p-Wert für den Korrelationskoeffizienten zwischen x und z beträgt 0,0005 .
  • Der p-Wert für den Korrelationskoeffizienten zwischen y und z beträgt 0,4238 .

Beachten Sie, dass wir die p-Werte in unserer benutzerdefinierten Funktion auf vier Dezimalstellen gerundet haben.

Sie können die 4 in der letzten Zeile der Funktion gerne durch eine andere Zahl ersetzen, um auf eine andere Anzahl von Dezimalstellen zu runden.

Hinweis : Die vollständige Dokumentation für die SciPy- Pearsonr() -Funktion finden Sie hier .

Zusätzliche Ressourcen

In den folgenden Tutorials wird erläutert, wie Sie andere häufige Panda-Aufgaben ausführen:

So berechnen Sie die Korrelation nach Gruppen in Pandas
So berechnen Sie die gleitende Korrelation bei Pandas
So berechnen Sie die Spearman-Rangkorrelation bei Pandas

Einen Kommentar hinzufügen

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert