1. 상관관계

 

2개의 변량 x와 y사이에 한쪽 변화가 다른 한쪽의 변화에 어떤 영향을 주는 경향이 있을 때 x와 y의 사이에는  상관관계(correlation)이 있다고 한다.

 

2. 상관계수 

두변량 x와 yt사이에 직선적인 상관관계의 정보를 표본으로 부터 얻은 값을 표본상관계수라고한다.

 

3. 상관계수의 성질

 

1) -1 <= r <= 1 

2) 상관이 없으면 r=0

3) 양수이면 한 변수가 증가하면 다른 변수도 증가하는 관계 음수면 한 변량이 증가하면 다른 변수는 감소하는 관계

 

 

4. 실습

 

실습데이터 

import pandas as pd
import numpy as np
import seaborn as sns
import matplotlib.pyplot as plt

from scipy import stats

from sklearn.datasets import load_linnerud

linnerud = load_linnerud()
linnerud_data = np.concatenate((linnerud['target'], linnerud['data']),axis=1)
linnerud_columns = linnerud['target_names'] + linnerud['feature_names']

df = pd.DataFrame(linnerud_data, columns = linnerud_columns)
df.head()

Weight Waist Pulse Chins Situps Jumps
0 191.0 36.0 50.0 5.0 162.0 60.0
1 189.0 37.0 52.0 2.0 110.0 60.0
2 193.0 38.0 58.0 12.0 101.0 101.0
3 162.0 35.0 62.0 12.0 105.0 37.0
4 189.0 35.0 46.0 13.0 155.0 58.0


사이킷런에서 제공하는 몸무게, 허리둘레,혈압, + 운동능력 데이터를 사용

상관행렬 

 

def corr_heat(df):
    plt.figure(figsize=(7,7))

    corr_df = df.corr()
    display(corr_df)

    mask = np.zeros_like(heat_table)
    mask[np.triu_indices_from(mask)] = 1
    heat_map = sns.heatmap(corr_df, annot=True, mask = mask, cmap='coolwarm')
    heat_map.set_xticklabels(heat_map.get_xticklabels(), fontsize=12, rotation=45)
    heat_map.set_yticklabels(heat_map.get_yticklabels(), fontsize=12)
    plt.title('corr between features', fontsize=15)
    plt.show()
    
corr_heat(df)

Weight Waist Pulse Chins Situps Jumps
Weight 1.000000 0.870243 -0.365762 -0.389694 -0.493084 -0.226296
Waist 0.870243 1.000000 -0.352892 -0.552232 -0.645598 -0.191499
Pulse -0.365762 -0.352892 1.000000 0.150648 0.225038 0.034933
Chins -0.389694 -0.552232 0.150648 1.000000 0.695727 0.495760
Situps -0.493084 -0.645598 0.225038 0.695727 1.000000 0.669206
Jumps -0.226296 -0.191499 0.034933 0.495760 0.669206 1.000000

pandas의 corr을 이용해서 두변수간의 상관계수를 확인 가능하다.

대각원소는 같은 변수끼리의 상관계수이기 때문에 당연히 1이고 대각원소를 기준으로 대칭이기에 표현x

몸무게와 허리둘레가 양의 상관관계를 보인다.

 

pair plot

plt.figure(figsize=(7,7))
sns.pairplot(df, diag_kind='hist')

각 변수들끼리의 산점도

두 변수의 상관분석

def corr_two(col1,col2,df):
    sns.jointplot(col1, col2, data=df)
    plt.show()
    col_1 = df[col1]
    col_2 = df[col2]
    p_test = stats.pearsonr(col_1,col_2)
    print('*** pearson-corr-test *** \n corr = %6.3f pvalue = %6.4f\n' % p_test)

corr_two('Waist','Weight',df)

상관계수가 0인지 아닌지 검정가능 

 

귀무가설 : 두 변수의 상관계수는 0이다

대립가설 : 두 변수의 상관계수는 0이아니다.

'통계' 카테고리의 다른 글

[통계] 로지스틱 회귀분석  (0) 2022.03.10
[통계] 단순선형회귀분석, 모형진단, 영향점분석  (0) 2022.03.04
[통계] ANOVA 분산분석  (0) 2022.02.23
[통계] t-test  (0) 2022.02.23
[통계] 가설과 p- value  (0) 2022.02.22

+ Recent posts