Como encontrar o valor p do coeficiente de correlação em pandas


O coeficiente de correlação de Pearson pode ser usado para medir a associação linear entre duas variáveis.

Este coeficiente de correlação assume sempre um valor entre -1 e 1 onde:

  • -1 : Correlação linear perfeitamente negativa entre duas variáveis.
  • 0 : Nenhuma correlação linear entre duas variáveis.
  • 1: Correlação linear perfeitamente positiva entre duas variáveis.

Para determinar se um coeficiente de correlação é estatisticamente significativo, você pode calcular a pontuação t e o valor p correspondentes.

A fórmula para calcular o escore t de um coeficiente de correlação (r) é:

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

O valor p é calculado como o valor p bicaudal correspondente para a distribuição t com n-2 graus de liberdade.

Para calcular o valor p de um coeficiente de correlação de Pearson em pandas, você pode usar a função pearsonr() da biblioteca SciPy :

 from scipy. stats import pearsonr

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

Esta função retornará o coeficiente de correlação de Pearson entre as colunas coluna1 e coluna2 junto com o valor p correspondente que nos diz se o coeficiente de correlação é estatisticamente significativo ou não.

Se quiser calcular o valor p para o coeficiente de correlação de Pearson de cada combinação possível de colunas em pares em um DataFrame, você pode usar a seguinte função personalizada para fazer isso:

 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

Os exemplos a seguir mostram como calcular valores p para coeficientes de correlação na prática com o seguinte DataFrame do pandas:

 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

Exemplo 1: Calcule o valor P para o coeficiente de correlação entre duas colunas no Pandas

O código a seguir mostra como calcular o coeficiente de correlação de Pearson e o valor p correspondente para as colunas x e y do DataFrame:

 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)

Pelo resultado podemos ver:

  • O coeficiente de correlação de Pearson é 0,4792 .
  • O valor p correspondente é 0,2296 .

Como o coeficiente de correlação é positivo, isso indica que existe uma relação linear positiva entre as duas variáveis.

No entanto, como o valor p do coeficiente de correlação não é inferior a 0,05, a correlação não é estatisticamente significativa.

Observe que também podemos usar a seguinte sintaxe para extrair o valor p do coeficiente de correlação:

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

0.22961622926360523

O valor p do coeficiente de correlação é 0,2296 .

Isso corresponde ao valor p da saída anterior.

Exemplo 2: Calcule o valor P para o coeficiente de correlação entre todas as colunas no Pandas

O código a seguir mostra como calcular o coeficiente de correlação de Pearson e o valor p correspondente para cada combinação de colunas em pares no DataFrame do pandas:

 #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

Pelo resultado podemos ver:

  • O valor p para o coeficiente de correlação entre x e y é 0,2296 .
  • O valor p para o coeficiente de correlação entre x e z é 0,0005 .
  • O valor p para o coeficiente de correlação entre y e z é 0,4238 .

Observe que arredondamos os valores p para quatro casas decimais em nossa função personalizada.

Sinta-se à vontade para substituir o 4 na última linha da função por um número diferente para arredondar para um número diferente de casas decimais.

Nota : Você pode encontrar a documentação completa para a função SciPy pearsonr() aqui .

Recursos adicionais

Os tutoriais a seguir explicam como realizar outras tarefas comuns do panda:

Como calcular a correlação por grupo no Pandas
Como calcular a correlação deslizante em pandas
Como calcular a correlação de classificação de Spearman em pandas

Add a Comment

O seu endereço de email não será publicado. Campos obrigatórios marcados com *