반응형
다음 데이터에 대해 성별과 과목의 교호 작용 효과가 있는지 판단하라.
귀무가설 : 교호작용 효과가 없다. → 두 요인의 결합 효과는 단순히 개별 효과의 합이다 (선형적, 플롯이 평행함)
대립가설 : 교호작용 효과가 있다.
가정 : 각 그룹은 정규분포를 따르고 분산이 같으며(등분산성) 독립된 표본이어야 한다.
import numpy as np
import pandas as pd
# 종속변수 = 점수
# 독립변수 1, 2 = 성별, 수업방식
df = pd.DataFrame({
'score': [88, 92, 95, 89, 90, 91, 85, 87, 86, 90, 93, 94],
'gender': ['M', 'M', 'M', 'M', 'F', 'F', 'F', 'F', 'M', 'M', 'F', 'F'],
'method': ['online', 'online', 'offline', 'offline', 'online', 'online', 'offline', 'offline',
'online', 'offline', 'online', 'offline']
})
df.head()

ols에 교호 작용 효과를 판단하려는 변수 2개를 *로 수식을 만들고 anova_lm을 이용하면 된다.
from statsmodels.formula.api import ols
from statsmodels.stats.anova import anova_lm
model = ols('score ~ gender * method', data=df).fit()
anova_results = anova_lm(model)
anova_results

참고
교호작용이 있는 경우와 없는 경우의 비교는 다음과 같다.
import matplotlib.pyplot as plt
import seaborn as sns
import pandas as pd
import numpy as np
import statsmodels.formula.api as smf
# 데이터 생성
np.random.seed(42)
n = 100
A = np.random.choice(['Low', 'High'], size=n)
B = np.random.choice(['X', 'Y'], size=n)
# 교호작용이 없는 경우 (평행한 효과)
y_no_interaction = (
5 +
(A == 'High') * 2 + # A 효과
(B == 'Y') * 3 + # B 효과
np.random.normal(0, 1, size=n)
)
# 교호작용이 있는 경우 (비평행)
y_interaction = (
5 +
(A == 'High') * 2 +
(B == 'Y') * 3 +
(A == 'High') * (B == 'Y') * 4 + # interaction 효과
np.random.normal(0, 1, size=n)
)
# 데이터프레임 생성
df_no_interaction = pd.DataFrame({'A': A, 'B': B, 'y': y_no_interaction})
df_interaction = pd.DataFrame({'A': A, 'B': B, 'y': y_interaction})
# 교호작용 플롯
fig, axes = plt.subplots(1, 2, figsize=(12, 5), sharey=True)
sns.pointplot(x='B', y='y', hue='A', data=df_no_interaction, ax=axes[0])
axes[0].set_title('Interaction Effcet X (parallel)')
sns.pointplot(x='B', y='y', hue='A', data=df_interaction, ax=axes[1])
axes[1].set_title('Interaction Effcet O')
plt.tight_layout()
plt.show()

교호작용이 없는 경우 플롯이 평행한 것을 알 수 있다.
(p-value가 0.05이하 → 교호작용 효과가 있음 → 플롯이 평행하지 않다.)
반응형
'개발 > Python' 카테고리의 다른 글
| 병합적 군집분석 (노드 별 관측치의 수) (1) | 2025.08.17 |
|---|---|
| 선형회귀모형의 검정통계량 F0 (3) | 2025.08.17 |
| 결정 트리 (부스팅) (3) | 2025.08.15 |
| statsmodels ols 결과 출력하기 (1) | 2025.08.15 |
| 결정 트리 (분기 전후의 지니 불순도 감소량) (1) | 2025.08.15 |
댓글