팬더에서 상관 계수의 p 값을 찾는 방법


피어슨 상관 계수는 두 변수 사이의 선형 연관성을 측정하는 데 사용할 수 있습니다.

이 상관 계수는 항상 -11 사이의 값을 갖습니다. 여기서:

  • -1 : 두 변수 사이의 완벽한 음의 선형 상관관계.
  • 0 : 두 변수 사이에 선형 상관관계가 없습니다.
  • 1: 두 변수 사이의 완벽한 양의 선형 상관관계.

상관 계수가 통계적으로 유의한지 여부를 확인하려면 해당하는 t-점수와 p-값을 계산하면 됩니다.

상관계수(r)의 t-점수를 계산하는 공식은 다음과 같습니다.

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

p-값은 자유도가 n-2인 t-분포에 해당하는 양측 p-값으로 계산됩니다.

Pandas에서 Pearson 상관 계수의 p-값을 계산하려면 SciPy 라이브러리의 pearsonr() 함수를 사용할 수 있습니다.

 from scipy. stats import pearsonr

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

이 함수는 상관 계수가 통계적으로 유의한지 여부를 알려주는 해당 p-값과 함께 열 1열 2 사이의 피어슨 상관 계수를 반환합니다.

DataFrame에서 가능한 각 열 쌍 조합의 Pearson 상관 계수에 대한 p-값을 계산하려면 다음 사용자 정의 함수를 사용하면 됩니다.

 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

다음 예는 실제로 다음 pandas DataFrame을 사용하여 상관 계수에 대한 p-값을 계산하는 방법을 보여줍니다.

 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

예 1: Pandas에서 두 열 사이의 상관 계수에 대한 P 값 계산

다음 코드는 DataFrame의 xy 열에 대해 Pearson 상관 계수와 해당 p-값을 계산하는 방법을 보여줍니다.

 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)

결과에서 우리는 다음을 볼 수 있습니다:

  • 피어슨 상관계수는 0.4792 입니다.
  • 해당 p-값은 0.2296 입니다.

상관 계수가 양수이므로 이는 두 변수 사이에 양의 선형 관계가 있음을 나타냅니다.

그러나 상관계수의 p-값이 0.05 이상이므로 통계적으로 유의한 상관관계는 없습니다.

다음 구문을 사용하여 상관 계수에서 p-값을 추출할 수도 있습니다.

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

0.22961622926360523

상관계수의 p-값은 0.2296 입니다.

이는 이전 출력의 p-값과 일치합니다.

예시 2: Pandas의 모든 열 간 상관 계수에 대한 P 값 계산

다음 코드는 Pandas DataFrame의 각 쌍별 열 조합에 대해 Pearson 상관 계수와 해당 p-값을 계산하는 방법을 보여줍니다.

 #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

결과에서 우리는 다음을 볼 수 있습니다:

  • x와 y 사이의 상관 계수에 대한 p-값은 0.2296 입니다.
  • x와 z 사이의 상관 계수에 대한 p-값은 0.0005 입니다.
  • y와 z 사이의 상관 계수에 대한 p-값은 0.4238 입니다.

사용자 정의 함수에서 p-값을 소수점 이하 4자리로 반올림했습니다.

함수의 마지막 줄에 있는 4를 다른 숫자로 바꿔서 다른 소수 자릿수로 반올림해도 됩니다.

참고 : SciPy pearsonr() 함수에 대한 전체 문서는 여기에서 찾을 수 있습니다.

추가 리소스

다음 튜토리얼에서는 다른 일반적인 Panda 작업을 수행하는 방법을 설명합니다.

Pandas에서 그룹별 상관관계를 계산하는 방법
팬더에서 슬라이딩 상관 관계를 계산하는 방법
팬더에서 Spearman 순위 상관 관계를 계산하는 방법

의견을 추가하다

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다