์นด์ด์ ๊ณฑ ๊ฒ์ : ์ข ๋ฅ์ ์์์์ ๋ ๋ฆฝ์ฑ ์ฌ๋ถ
- ๋ชฉ์ : ํน์ ์ข ๋ฅ(๊ฐ์์ง, ๊ณ ์์ด, ์ฌ๋ ๋ฑ)๊ฐ ์์์ ์ํฅ์ ๋ฏธ์น๋์ง, ์๋๋ฉด ๋ ๋ฆฝ์ ์ธ์ง ๋ถ์.
- ๋ฐฉ๋ฒ: ์ข ๋ฅ์ ์์๋ฅผ ๋ฒ์ฃผํ ๋ณ์๋ก ๋ณด๊ณ , ์นด์ด์ ๊ณฑ ๊ฒ์ ์ ํตํด ์ด ๋ ๋ณ์๊ฐ ๋ ๋ฆฝ์ ์ธ์ง ํ์ธํฉ๋๋ค.
์ ๊ฒ์๊ธ์์ ์๊ฐ์ ์ผ๋ก ์ข ๋ฅ๊ฐ ์์์ ์ํฅ์ ๋ฏธ์น๋ ์ง ํ์ธํ์ต๋๋ค.
๋ ๋ฆฝ์ฑ ๊ฒ์ ์ ํตํด ์ค์ ๋ก ์ํฅ์ ๋ฏธ์น๋์ง ์์๋ด ๋๋ค.
import pandas as pd
import scipy.stats as stats
### 1. ์ข
๋ฅ(๊ฐ์์ง, ๊ณ ์์ด ๋ฑ)์ ์์ ๊ฐ์ ์นด์ด์ ๊ณฑ ๊ฒ์ ###
# ์์๋ฅผ ๋ฒ์ฃผํ์ผ๋ก ๋ถ๋ฅ (์๋ฅผ ๋ค์ด, ์์ 50%๋ฅผ "๋์", ๋๋จธ์ง๋ฅผ "๋ฎ์"์ผ๋ก ๊ตฌ๋ถ)
df['์์_๋ฒ์ฃผ'] = pd.qcut(df['์์'], q=2, labels=['๋ฎ์', '๋์'])
# ์ข
๋ฅ์ ์์_๋ฒ์ฃผ๋ก ๊ต์ฐจํ ์์ฑ
contingency_table_1 = pd.crosstab(df['์ข
๋ฅ'], df['์์_๋ฒ์ฃผ'])
#๋ ๋ฒ์ฃผํ ๋ณ์(์ข
๋ฅ์ ์์, ์ข
๋ฅ์ ์นดํ
๊ณ ๋ฆฌ)์ ๊ต์ฐจํ๋ฅผ ๋ง๋ญ๋๋ค.
# ์นด์ด์ ๊ณฑ ๊ฒ์ ์ํ
chi2_1, p_1, dof_1, expected_1 = stats.chi2_contingency(contingency_table_1)
#์นด์ด์ ๊ณฑ ๊ฒ์ ์ ์ํํ๊ณ , ์นด์ด์ ๊ณฑ ํต๊ณ๋, p-value, ์์ ๋(Degrees of Freedom) ๋ฐ ๊ธฐ๋๋น๋๋ฅผ ๊ณ์ฐ
# ๊ฒฐ๊ณผ ์ถ๋ ฅ
print("์ข
๋ฅ์ ์์ ๊ฐ์ ์นด์ด์ ๊ณฑ ๊ฒ์ ๊ฒฐ๊ณผ:")
print(f"Chi-square Statistic: {chi2_1}")
print(f"P-value: {p_1}")
print(f"Degrees of Freedom: {dof_1}")
print("Expected Frequencies:")
print(expected_1)
### 2. ์ข
๋ฅ์ ์นดํ
๊ณ ๋ฆฌ(์ผ์, ์ฐ์ ๋ฑ) ๊ฐ์ ์นด์ด์ ๊ณฑ ๊ฒ์ ###
# ์ข
๋ฅ์ ์นดํ
๊ณ ๋ฆฌ๋ก ๊ต์ฐจํ ์์ฑ
contingency_table_2 = pd.crosstab(df['์ข
๋ฅ'], df['์นดํ
๊ณ ๋ฆฌ'])
# ์นด์ด์ ๊ณฑ ๊ฒ์ ์ํ
chi2_2, p_2, dof_2, expected_2 = stats.chi2_contingency(contingency_table_2)
# ๊ฒฐ๊ณผ ์ถ๋ ฅ
print("\n์ข
๋ฅ์ ์นดํ
๊ณ ๋ฆฌ ๊ฐ์ ์นด์ด์ ๊ณฑ ๊ฒ์ ๊ฒฐ๊ณผ:")
print(f"Chi-square Statistic: {chi2_2}")
print(f"P-value: {p_2}")
print(f"Degrees of Freedom: {dof_2}")
print("Expected Frequencies:")
print(expected_2)
์ข ๋ฅ์ ์์ ๊ฐ์ ์นด์ด์ ๊ณฑ ๊ฒ์ ๊ฒฐ๊ณผ:
Chi-square Statistic: 53.46431346431346
P-value: 0.04924187116612567 < 0.05
Degrees of Freedom: 38
p-value๊ฐ 0.05 ์ดํ์ผ ๊ฒฝ์ฐ๋ ์ข ๋ฅ์ ์์ ๋๋ ์ข ๋ฅ์ ์นดํ ๊ณ ๋ฆฌ ๊ฐ์ ๊ด๊ณ๊ฐ ํต๊ณ์ ์ผ๋ก ์ ์๋ฏธํจ์ ์๋ฏธํฉ๋๋ค.
์ฆ, ๋ ๋ฆฝ์ ์ด์ง ์๋ค๋ ๋ป์ ๋๋ค. ์ข ๋ฅ(๊ฐ์์ง, ๊ณ ์์ด ๋ฑ)๊ฐ ์์์ ์ํฅ์ ๋ฏธ์น๋ค๋ ๊ฒฐ๋ก ์ ๋ด๋ฆด ์ ์์ต๋๋ค.
์นด์ด์ ๊ณฑ ๊ฒ์ : ์ข ๋ฅ์ ์นดํ ๊ณ ๋ฆฌ์ ๋ ๋ฆฝ์ฑ ์ฌ๋ถ
### 2. ์ข
๋ฅ์ ์นดํ
๊ณ ๋ฆฌ(์ผ์, ์ฐ์ ๋ฑ) ๊ฐ์ ์นด์ด์ ๊ณฑ ๊ฒ์ ###
# ์ข
๋ฅ์ ์นดํ
๊ณ ๋ฆฌ๋ก ๊ต์ฐจํ ์์ฑ
contingency_table_2 = pd.crosstab(df['์ข
๋ฅ'], df['์นดํ
๊ณ ๋ฆฌ'])
# ์นด์ด์ ๊ณฑ ๊ฒ์ ์ํ
chi2_2, p_2, dof_2, expected_2 = stats.chi2_contingency(contingency_table_2)
# ๊ฒฐ๊ณผ ์ถ๋ ฅ
print("\n์ข
๋ฅ์ ์นดํ
๊ณ ๋ฆฌ ๊ฐ์ ์นด์ด์ ๊ณฑ ๊ฒ์ ๊ฒฐ๊ณผ:")
print(f"Chi-square Statistic: {chi2_2}")
print(f"P-value: {p_2}")
print(f"Degrees of Freedom: {dof_2}")
print("Expected Frequencies:")
print(expected_2)
์ข ๋ฅ์ ์นดํ ๊ณ ๋ฆฌ ๊ฐ์ ์นด์ด์ ๊ณฑ ๊ฒ์ ๊ฒฐ๊ณผ:
Chi-square Statistic: 100.09114203601781
P-value: 0.033492996838640536
Degrees of Freedom: 76
p-value๊ฐ 0.05 ์ดํ์ผ ๊ฒฝ์ฐ๋ ์ข ๋ฅ์ ์์ ๋๋ ์ข ๋ฅ์ ์นดํ ๊ณ ๋ฆฌ ๊ฐ์ ๊ด๊ณ๊ฐ ํต๊ณ์ ์ผ๋ก ์ ์๋ฏธํจ์ ์๋ฏธํฉ๋๋ค.
์ฆ, ๋ ๋ฆฝ์ ์ด์ง ์๋ค๋ ๋ป์ ๋๋ค. ํน์ ์ข ๋ฅ(๊ฐ์์ง, ๊ณ ์์ด ๋ฑ)๊ฐ ํน์ ์นดํ ๊ณ ๋ฆฌ(์ผ์, ์ฐ์ )์ ๋ ์์ฃผ ์ํจ์ ์๋ฏธํฉ๋๋ค.