상관관계와 인과관계는 통계 및 연구에서 두 변수 간의 다른 유형의 관계를 설명하는 두 가지 중요한 개념입니다.
1. 상관관계 (Correlation)
- 정의: 상관관계는 두 변수가 함께 변하는 정도를 설명하는 통계적 측정입니다. 다시 말하면 한 변수의 변화가 다른 변수의 변화와 어떤 정도로 연관되어 있는지를 양적으로 표현합니다.
- 측정지표: 상관계수(correlation coefficients)는 두 변수 간의 연관 정도를 측정하는 지표입니다. 상관을 측정하는 여러 방법 중에서 가장 일반적인 것은 피어슨 상관계수입니다. 피어슨 상관계수는 -1에서 1까지의 숫자로, 변수 간의 관계의 강도와 방향을 나타냅니다.
- 상관계수 해석:
- 양의 상관관계 (+1에 가까움): 한 변수가 증가하면 다른 변수도 증가하는 경향이 있습니다.
- 음의 상관관계 (-1에 가까움): 한 변수가 증가하면 다른 변수는 감소하는 경향이 있습니다.
- 제로 상관관계 (0에 가까움): 변수 간에 선형 관계가 없습니다.
- 예시: 아이스크림 판매와 익사 사고 수 사이에 양의 상관관계가 있다고 가정해 봅시다. 둘 다 여름 동안 증가하는 경향이 있습니다. 그러나 이는 아이스크림을 사 먹는 것이 익사를 유발한다거나 그 반대로 되는 것은 아니라는 의미입니다. 단지 상관관계일 뿐입니다.
2. 인과관계 (Causation)
- 정의: 인과관계는 두 변수 간의 원인과 결과 관계를 나타냅니다. 인과관계에서는 하나의 변수의 변화가 다른 변수에 직접적으로 영향을 주어 원인과 결과의 연결이 있습니다. 인과관계는 한 변수의 변화가 다른 변수에 변화를 일으키는 상황을 의미하며, 인과관계를 확립하려면 단순히 상관관계를 관찰하는 것 이상의 노력이 필요합니다. 이는 논리적인 연결을 입증하고 다른 가능한 설명을 배제하는 것을 포함합니다.
- 인과관계 판단 기준: 원인을 추론하기 위해 종종 고려되는 여러 기준이 있습니다. 이에는 다음이 포함됩니다:
(1) 시간적 우선순위 (Temporal precedence)
: 원인은 효과보다 앞서야 함
(2) 원인과 효과의 공변성 (Covariation of cause and effect)
: 원인의 변화가 효과의 변화와 관련이 있어야 함
(3) 대안적 설명의 제거 (Elimination of alternative explanations)
: 다른 요인들이 원인으로 제외됨
- 예시: 흡연과 폐암은 인과 관계가 있습니다. 여러 연구에서 흡연이 폐암 발생 위험을 증가시킨다는 것이 확인되었습니다. 이 관계는 단순한 통계적 연관이 아니라 흡연이 폐암 발생 가능성에 영향을 미치는 알려진 메커니즘이 있습니다.
3. 주요 차이점
(1) 관계의 성격 (Nature of Relationship)
- 상관관계: 두 변수 간의 통계적 관련성이나 관계를 나타냅니다.
- 인과관계: 변화한 변수가 직접적으로 다른 변수에 영향을 미치는 인과 관계를 나타냅니다.
(2) 방향 (Direction)
- 상관관계: 양의 경우 (두 변수가 함께 증가하거나 감소) 또는 음의 경우 (한 변수가 증가하면 다른 변수가 감소)가 될 수 있습니다.
- 인과관계: 원인 변수의 변화가 결과 변수에 변화를 일으키는 특정한 방향성이 있습니다.
(3) 시사점 (Implications)
- 상관관계: 인과관계를 의미하지 않습니다. 상관관계만으로는 인과관계의 증거를 제공하지 않습니다.
- 인과관계: 직접적이고 종종 예측적인 관계를 의미합니다. 인과관계를 확립하기 위해서는 일반적으로 보다 엄격한 실험 설계와 증거가 필요합니다.
(4) 예시
- 상관관계: 아이스크림 판매와 익사 사고 수는 서로 인과관계 없이 상관관계가 있을 수 있습니다.
- 인과관계: 흡연이 폐암을 유발하는 것은 인과관계의 한 예입니다.
통계적 관계를 해석할 때 주의가 필요하며, 상관관계만을 근거로 인과관계를 가정하는 것은 피해야 합니다. 보다 심층적인 연구, 실험, 대안적 설명의 고려가 종종 필요합니다.
4. Python 을 이용한 상관관계(Correlation) 분석 예시
import pandas as pd
# Example data as Pandas DataFrame
df = pd.DataFrame({
'data1': [1, 2, 3, 4, 5],
'data2': [2, 2.4, 3, 3.2, 3.5],
'data3': [4, 3, 3, 2, 1.5]})
# Calculate the correlation matrix
correlation_matrix = df.corr()
# Print the correlation matrix
print("Correlation Matrix:")
print(correlation_matrix)
# Correlation Matrix:
# data1 data2 data3
# data1 1.000000 0.985104 -0.973329
# data2 0.985104 1.000000 -0.933598
# data3 -0.973329 -0.933598 1.000000
5. Python 을 이용한 인과관계(Causation) 분석 예시
Python의 statsmodels 모듈을 사용해서 선형회귀모형(linear regression)을 적합해보겠습니다.
선형회귀모형을 독립변수와 종속변수 간에 선형적인 관계를 가정하며, 인과관계에세는 원인이 결과보다 시간면에서 앞서서 일어나야 하므로 아래 예시에서는 설명변수 X가 목표변수 Y보다 먼저 발생한 데이터라고 가정하겠습니다. 만약 관측되지 않거나 통제되지 않은 교란 변수 (Confounding Variable) 가 있다면, 회귀 모델에서 추정된 계수는 편향될 수 있습니다. 모든 관련 변수를 통제하는 것은 인과 추론에 있어서 필수적이며, 아래 예시에 교란 변수 Z를 추가하여 선형회귀모형을 적합하였습니다.
## install statsmodels in terminal first if you don't have it
! pip install numpy pandas statsmodels
## linear regression
import numpy as np
import pandas as pd
import statsmodels.api as sm
# Generate synthetic data for demonstration
np.random.seed(42)
X = np.random.rand(100, 1) * 10 # Independent variable
epsilon = np.random.randn(100, 1) * 2 # Error term
Y = 2 * X + 1 + epsilon # Dependent variable with a causal relationship
# Create a DataFrame
df = pd.DataFrame({'X': X.flatten(), 'Y': Y.flatten()})
# Add a confounding variable
Z = np.random.randn(100, 1) # Confounding variable
df['Z'] = Z.flatten()
# Fit a linear regression model
X_with_intercept = sm.add_constant(df[['X', 'Z']])
model = sm.OLS(df['Y'], X_with_intercept).fit()
# Display regression results
print(model.summary())
# OLS Regression Results
# ==============================================================================
# Dep. Variable: Y R-squared: 0.908
# Model: OLS Adj. R-squared: 0.906
# Method: Least Squares F-statistic: 479.8
# Date: Sun, 10 Dec 2023 Prob (F-statistic): 5.01e-51
# Time: 06:30:59 Log-Likelihood: -200.44
# No. Observations: 100 AIC: 406.9
# Df Residuals: 97 BIC: 414.7
# Df Model: 2
# Covariance Type: nonrobust
# ==============================================================================
# coef std err t P>|t| [0.025 0.975]
# ------------------------------------------------------------------------------
# const 1.4314 0.342 4.182 0.000 0.752 2.111
# X 1.9081 0.062 30.976 0.000 1.786 2.030
# Z -0.0368 0.167 -0.220 0.826 -0.368 0.295
# ==============================================================================
# Omnibus: 0.975 Durbin-Watson: 2.295
# Prob(Omnibus): 0.614 Jarque-Bera (JB): 0.878
# Skew: 0.227 Prob(JB): 0.645
# Kurtosis: 2.928 Cond. No. 10.7
# ==============================================================================
# Notes:
# [1] Standard Errors assume that the covariance matrix of the errors is correctly specified.
이번 포스팅이 많은 도움이 되었기를 바랍니다.
행복한 데이터 과학자 되세요.
'Python 분석과 프로그래밍 > Python 통계분석' 카테고리의 다른 글
베타분포 (Beta Distribution)란 무엇이고, 베이지안 통계에서 왜 중요한가? (0) | 2023.12.10 |
---|---|
확률 (Probability) vs. 우도 (Likelihood) (0) | 2023.12.10 |
베이지안 통계(Bayesian Statistics)와 베이즈 정리(Bayes's Theorem) (1) | 2023.12.09 |
중심극한의 정리 (Central Limit Theorem) 이란 무엇이고, 왜 중요한가? (0) | 2023.12.09 |
[Python] 통계에서 p-값은 무엇이고, 어떻게 해석하는가? (p-value in statistics) (0) | 2023.12.08 |