팬더에서 상관 계수의 p 값을 찾는 방법
피어슨 상관 계수는 두 변수 사이의 선형 연관성을 측정하는 데 사용할 수 있습니다.
이 상관 계수는 항상 -1 과 1 사이의 값을 갖습니다. 여기서:
- -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의 x 및 y 열에 대해 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 순위 상관 관계를 계산하는 방법