파이썬, NumPy 및 통계를 사용하여 피어슨 상관관계 및 유의성 계산
본 코드를 실행하려면 다음 라이브러리가 설치되어 있어야 합니다.
- statistics: 파이썬 표준 라이브러리의 모듈로, 통계 계산 함수를 제공합니다.
코드
import numpy as np
from scipy import stats
# 데이터 세트
x = np.array([1, 2, 3, 4, 5])
y = np.array([2, 4, 5, 4, 5])
# 피어슨 상관 계수 계산
correlation, p_value = stats.pearsonr(x, y)
# 결과 출력
print("피어슨 상관 계수:", correlation)
print("유의성 p-value:", p_value)
설명
- 라이브러리 임포트: 먼저 NumPy와 statistics 라이브러리를 코드에 임포트합니다.
- 데이터 세트 준비:
x
와y
라는 두 NumPy 배열에 데이터를 저장합니다. 이 배열은 서로 동일한 길이여야 합니다. - 피어슨 상관 계수 계산:
stats.pearsonr
함수를 사용하여 두 변수 간의 피어슨 상관 계수를 계산합니다. 이 함수는 두 개의 값을 반환합니다. 첫 번째 값은 상관 계수이고, 두 번째 값은 유의성 p-value입니다. - 결과 출력: 상관 계수와 p-value를 콘솔에 출력합니다.
해석
- 상관 계수: -1에서 1 사이의 값을 가집니다. 0에 가까울수록 상관관계가 약하고, 1 또는 -1에 가까울수록 강한 선형적 상관관계가 됩니다. 부호는 방향을 나타냅니다. 즉, 양의 값은 두 변수가 함께 증가하는 경향이 있음을, 음의 값은 반대로 감소하는 경향이 있음을 나타냅니다.
- 유의성 p-value: p-value는 귀하가 관찰한 상관관계가 우연히 발생할 가능성을 나타냅니다. 일반적으로 p-value가 0.05보다 작으면 상관관계가 통계적으로 유의하다고 간주됩니다.
예시
위 코드에서 출력된 결과는 다음과 같습니다.
피어슨 상관 계수: 0.8165366271871889
유의성 p-value: 0.06593466202225124
이 결과는 x와 y 사이에 양의 상관관계가 있으며, 유의 수준 0.05에서 통계적으로 유의하다는 것을 의미합니다. 즉, 두 변수가 함께 증가하는 경향이 있으며, 이는 우연히 발생할 가능성이 낮습니다.
주의 사항
- 피어슨 상관관계는 두 변수 간의 선형적 관계만 측정합니다. 비선형 관계는 감지하지 못할 수 있습니다.
- 이상치가 있는 데이터 세트에는 피어슨 상관관계가 민감할 수 있습니다.
- 두 변수의 척도가 서로 다르면 피어슨 상관관계 해석이 어려울 수 있습니다.
예제 코드: 변수 선택 및 모델 훈련
import numpy as np
import pandas as pd
from scipy import stats
# 데이터 불러오기
data = pd.read_csv('data.csv')
# 변수 선택
x = data['변수1']
y = data['변수2']
# 피어슨 상관 계수 계산
correlation, p_value = stats.pearsonr(x, y)
# 결과 출력
print("피어슨 상관 계수:", correlation)
print("유의성 p-value:", p_value)
이 코드는 다음과 같은 작업을 수행합니다.
pandas
를 사용하여 CSV 파일에서 데이터를 불러옵니다.- 분석할 두 변수를 선택합니다.
stats.pearsonr
함수를 사용하여 상관 계수와 p-value를 계산합니다.- 결과를 콘솔에 출력합니다.
변수 선택
본 예제에서는 data['변수1']
과 data['변수2']
를 선택하여 분석했습니다. 실제 코드에서는 분석에 사용할 변수를 적절하게 선택해야 합니다. 일반적으로 다음과 같은 요소를 고려하여 변수를 선택합니다.
- 관련성: 선택된 변수는 분석 대상 문제와 관련이 있어야 합니다.
- 정보량: 선택된 변수는 모델에 유용한 정보를 제공해야 합니다.
- 다중 공선성: 선택된 변수 간에 높은 다중 공선성이 없어야 합니다.
모델 훈련
피어슨 상관 계수는 두 변수 간의 선형적 관계를 나타내는 지표일 뿐입니다. 변수 간의 관계가 비선형적일 수도 있으므로, 모델 훈련 과정에서 이를 고려해야 합니다.
선형 회귀 모델을 훈련하려면 다음과 같은 코드를 사용할 수 있습니다.
from sklearn.linear_model import LinearRegression
# 모델 생성
model = LinearRegression()
# 모델 훈련
model.fit(x[:, np.newaxis], y)
# 예측값 계산
y_pred = model.predict(x[:, np.newaxis])
sklearn.linear_model
에서LinearRegression
클래스를 불러옵니다.- 모델 인스턴스를 생성합니다.
fit
메서드를 사용하여 모델을 훈련합니다.predict
메서드를 사용하여 예측값을 계산합니다.
피어슨 상관 계수 계산을 위한 대체 방법
NumPy의 cov 및 corrcoef 함수 사용
NumPy 라이브러리는 다음과 같은 함수를 제공하여 공분산과 상관 계수를 직접 계산할 수 있도록 합니다.
cov
: 두 배열의 공분산을 계산합니다.corrcoef
: 두 배열 간의 상관 계수 행렬을 계산합니다.
import numpy as np
x = np.array([1, 2, 3, 4, 5])
y = np.array([2, 4, 5, 4, 5])
# 공분산 계산
covariance = np.cov(x, y)[0, 1]
# 상관 계수 계산
correlation = np.corrcoef(x, y)[0, 1]
print("공분산:", covariance)
print("상관 계수:", correlation)
Pandas의 corr() 함수 사용
Pandas 라이브러리는 데이터프레임에서 상관 계수를 계산하는 corr()
함수를 제공합니다.
import pandas as pd
# 데이터 세트 준비
data = pd.DataFrame({'변수1': [1, 2, 3, 4, 5], '변수2': [2, 4, 5, 4, 5]})
# 상관 계수 계산
correlation = data['변수1'].corr(data['변수2'])
print("상관 계수:", correlation)
SciPy의 stats 모듈 사용
SciPy의 stats
모듈에서 pearsonr
함수를 사용하여 피어슨 상관 계수와 유의성 p-value를 함께 계산할 수 있습니다.
from scipy import stats
x = np.array([1, 2, 3, 4, 5])
y = np.array([2, 4, 5, 4, 5])
# 상관 계수 및 유의성 p-value 계산
correlation, p_value = stats.pearsonr(x, y)
print("피어슨 상관 계수:", correlation)
print("유의성 p-value:", p_value)
python numpy statistics