본문 바로가기
Data Analysis/Statistics

상관관계 분석에 대한 전체적인 정리 2 - 각각 예시 코드와 차트로 알아보자 (피어슨 , 스피어만, 켄달 타우 - 연속형 데이터끼리 )

by Hagrid 2024. 8. 12.
반응형

피어슨 상관계수  Pearson Correlation Coefficient

# 피어슨 상관계수 분석에 대한 예시 데이터를 생성하고 분석합니다.

# 다양한 예시 데이터를 생성
np.random.seed(42)
data1 = {'X': np.random.normal(0, 1, 100), 'Y': np.random.normal(0, 1, 100)}
data2 = {'X': np.random.rand(100), 'Y': np.random.rand(100)}
data3 = {'X': np.linspace(0, 100, 100), 'Y': np.linspace(0, 100, 100) + np.random.normal(0, 10, 100)}
data4 = {'X': np.random.normal(0, 1, 100), 'Y': np.random.normal(0, 1, 100) * -1}
data5 = {'X': np.random.normal(0, 1, 100), 'Y': np.random.normal(0, 1, 100) + 0.5}

dfs = [pd.DataFrame(data) for data in [data1, data2, data3, data4, data5]]

# 피어슨 상관계수 및 P-value 계산
correlation_results = []
for df in dfs:
    corr, p_value = pearsonr(df['X'], df['Y'])
    correlation_results.append((corr, p_value))

# 차트 생성
plt.figure(figsize=(14, 10))

for i, df in enumerate(dfs):
    plt.subplot(3, 2, i+1)
    sns.scatterplot(x=df['X'], y=df['Y'])
    plt.title(f'Dataset {i+1}: Pearson r = {correlation_results[i][0]:.2f}, P-value = {correlation_results[i][1]:.2f}')
    plt.xlabel('X')
    plt.ylabel('Y')

plt.tight_layout()
plt.show()

correlation_results
Result
[(-0.1364222121700025, 0.17592555489277012),
 (0.024256083321314535, 0.8106818613707072),
 (0.9378096644739374, 8.001624717725289e-47),
 (0.16630786381486795, 0.09818695053917403),
 (-0.04416297246174245, 0.6626261084219)]

피어슨 상관계수 (Pearson Correlation Coefficient) 분석 결과:

1. Dataset 1:

  • Pearson r: -0.1364
  • P-value: 0.1759
  • 해석: X와 Y 간의 약한 음의 상관관계가 있지만, 통계적으로 유의미하지 않습니다 (P-value > 0.05).

2. Dataset 2:

  • Pearson r: 0.0243
  • P-value: 0.8107
  • 해석: X와 Y 간의 상관관계는 매우 약하며, 통계적으로 유의미하지 않습니다 (P-value > 0.05).

3. Dataset 3:

  • Pearson r: 0.9378
  • P-value: 8.00×10−478.00 \times 10^{-47}
  • 해석: X와 Y 간의 매우 강한 양의 상관관계가 있으며, 통계적으로 매우 유의미합니다 (P-value < 0.05).

4. Dataset 4:

  • Pearson r: 0.1663
  • P-value: 0.0982
  • 해석: X와 Y 간의 약한 양의 상관관계가 있으나, 통계적으로 유의미하지 않습니다 (P-value > 0.05).

5. Dataset 5:

  • Pearson r: -0.0442
  • P-value: 0.6626
  • 해석: X와 Y 간의 관계는 거의 없으며, 통계적으로 유의미하지 않습니다 (P-value > 0.05).

 

 

  • Dataset 3의 경우 매우 강한 양의 상관관계가 있으며, 이는 P-value가 매우 작아 통계적으로도 유의미한 결과입니다.
  • 나머지 데이터셋은 상관계수가 낮고 P-value가 크며, 따라서 유의미한 상관관계가 존재하지 않음을 보여줍니다

 

 


 

 

스피어만 상관계수 (Spearman's Rank Correlation Coefficient)

 

# 새로운 예시 데이터를 생성하여 스피어만 상관계수 분석을 수행합니다.

# 다양한 새로운 예시 데이터를 생성
np.random.seed(99)
data1 = {'X': np.random.uniform(-10, 10, 100), 'Y': np.sin(np.random.uniform(-10, 10, 100))}
data2 = {'X': np.random.normal(0, 1, 100), 'Y': np.random.normal(5, 2, 100)}
data3 = {'X': np.random.exponential(1, 100), 'Y': np.random.exponential(1, 100)}
data4 = {'X': np.linspace(0, 100, 100), 'Y': np.log(np.linspace(1, 100, 100))}
data5 = {'X': np.random.poisson(5, 100), 'Y': np.random.poisson(10, 100)}

dfs_new = [pd.DataFrame(data) for data in [data1, data2, data3, data4, data5]]

# 스피어만 상관계수 및 P-value 계산
spearman_results_new = []
for df in dfs_new:
    corr, p_value = spearmanr(df['X'], df['Y'])
    spearman_results_new.append((corr, p_value))

# 차트 생성
plt.figure(figsize=(14, 10))

for i, df in enumerate(dfs_new):
    plt.subplot(3, 2, i+1)
    sns.scatterplot(x=df['X'], y=df['Y'])
    plt.title(f'Dataset {i+1}: Spearman r = {spearman_results_new[i][0]:.2f}, P-value = {spearman_results_new[i][1]:.2f}')
    plt.xlabel('X')
    plt.ylabel('Y')

plt.tight_layout()
plt.show()

spearman_results_new

 

스피어만 상관계수 (Spearman's Rank Correlation Coefficient) - 새로운 데이터셋 분석 결과:

1. Dataset 1:

  • Spearman r: -0.0880
  • P-value: 0.3840
  • 해석: X와 Y 간의 약한 음의 순위 상관관계가 있지만, 통계적으로 유의미하지 않습니다 (P-value > 0.05).

2. Dataset 2:

  • Spearman r: 0.0966
  • P-value: 0.3390
  • 해석: X와 Y 간의 약한 양의 순위 상관관계가 있지만, 통계적으로 유의미하지 않습니다 (P-value > 0.05).

3. Dataset 3:

  • Spearman r: -0.0892
  • P-value: 0.3776
  • 해석: X와 Y 간의 약한 음의 순위 상관관계가 있지만, 통계적으로 유의미하지 않습니다 (P-value > 0.05).

4. Dataset 4:

  • Spearman r: 1.0000
  • P-value: 0.0
  • 해석: X와 Y 간의 매우 강한 양의 순위 상관관계가 있으며, 통계적으로 매우 유의미합니다 (P-value < 0.05).

5. Dataset 5:

  • Spearman r: 0.0010
  • P-value: 0.9918
  • 해석: X와 Y 간의 순위 상관관계는 거의 없으며, 통계적으로 유의미하지 않습니다 (P-value > 0.05).

종합 해석:

새로운 데이터셋을 사용하여 스피어만 상관계수를 분석한 결과, 대부분의 데이터셋에서 X와 Y 간의 순위 상관관계는 약하거나 통계적으로 유의미하지 않았습니다. 그러나 Dataset 4의 경우 매우 강한 양의 순위 상관관계가 관찰되었으며, 이는 통계적으로도 매우 유의미한 결과로 나타났습니다

 


켄달의 타우 (Kendall's Tau)

 

from scipy.stats import kendalltau

# 켄달의 타우 분석에 대한 예시 데이터를 생성하고 분석합니다.

# 켄달의 타우 및 P-value 계산
kendall_results = []
for df in dfs_new:
    corr, p_value = kendalltau(df['X'], df['Y'])
    kendall_results.append((corr, p_value))

# 차트 생성
plt.figure(figsize=(14, 10))

for i, df in enumerate(dfs_new):
    plt.subplot(3, 2, i+1)
    sns.scatterplot(x=df['X'], y=df['Y'])
    plt.title(f'Dataset {i+1}: Kendall\'s Tau = {kendall_results[i][0]:.2f}, P-value = {kendall_results[i][1]:.2f}')
    plt.xlabel('X')
    plt.ylabel('Y')

plt.tight_layout()
plt.show()

kendall_results
Result
[(-0.06181818181818183, 0.3621353579525596),
 (0.07151515151515152, 0.291766943745706),
 (-0.06383838383838386, 0.3466613505222581),
 (1.0, 2.143020576250934e-158),
 (-0.002711001634038936, 0.9710311441679967)]

 

켄달의 타우 (Kendall's Tau) 분석 결과:

1. Dataset 1:

  • Kendall's Tau: -0.0618
  • P-value: 0.3621
  • 해석: X와 Y 간의 약한 음의 순위 상관관계가 있지만, 통계적으로 유의미하지 않습니다 (P-value > 0.05).

2. Dataset 2:

  • Kendall's Tau: 0.0715
  • P-value: 0.2918
  • 해석: X와 Y 간의 약한 양의 순위 상관관계가 있지만, 통계적으로 유의미하지 않습니다 (P-value > 0.05).

3. Dataset 3:

  • Kendall's Tau: -0.0638
  • P-value: 0.3467
  • 해석: X와 Y 간의 약한 음의 순위 상관관계가 있지만, 통계적으로 유의미하지 않습니다 (P-value > 0.05).

4. Dataset 4:

  • Kendall's Tau: 1.0000
  • P-value: 2.14×10−1582.14 \times 10^{-158}
  • 해석: X와 Y 간의 매우 강한 순위 상관관계가 있으며, 통계적으로 매우 유의미합니다 (P-value < 0.05).

5. Dataset 5:

  • Kendall's Tau: -0.0027
  • P-value: 0.9710
  • 해석: X와 Y 간의 순위 상관관계는 거의 없으며, 통계적으로 유의미하지 않습니다 (P-value > 0.05).

종합 해석:

켄달의 타우 분석을 통해 새로운 데이터셋에서 X와 Y 간의 순위 기반 관계를 평가했습니다. 대부분의 데이터셋에서 순위 상관관계는 약하거나 통계적으로 유의미하지 않았습니다. 하지만 Dataset 4에서는 매우 강한 양의 순위 상관관계가 관찰되었으며, 이는 통계적으로도 매우 유의미한 결과로 나타났습니다.

반응형

댓글