-
통계-6 가설 감정통계 2023. 5. 29. 21:56
1. 가설 검정
가설 검정은 가지고 있는 가설이 사실인지 아닌지를 검증하는 통계적 방법이며 정확한 결정을 내리기 위해 필요한 과정이다.
2. t-검정, z-검정
t검정이란 두 집단의 평균을 비교하는 모수적 방법이다. z검정이란 정규분포를 가정하며 추출된 표본과 모집단의 통계치를 비교한다.
t검정은 모집단의 표준 편차를 모를 때 사용하며 z검정은 표준편차를 알 때 사용한다. 보통의 경우에는 표준편차를 모르기 때문에 t검정을 사용한다.
titanic_df = pd.read_csv('../data/Titanic_data.csv') male_df = titanic_df[titanic_df['Sex']=='male'] female_df= titanic_df[titanic_df['Sex']=='female']
타이타닉 데이터를 불러오고 남자와 여자의 데이터프레임을 구분한다.
male_survival_rate = male_df['Survived'].mean() female_survival_rate = female_df['Survived'].mean() print(male_survival_rate) print(female_survival_rate) t,p=stats.ttest_ind(male_df['Survived'], female_df['Survived']) alpha = 0.05 if p < alpha: print(f"p-value: {p:.4f}, 귀무가설 기각") else: print(f"p-value: {p:.4f}, 귀무가설 채택") 0.18890814558058924 0.7420382165605095 p-value: 0.0000, 귀무가설 기각
각 데이터 프레임의 생존여부 평균을 계산하여 비교한다. stats.ttest_ind함수로 p값을 구한다. p값이 0.05보다 작기 때문에 귀무가설을 기각하였고 성별에 따라 생존 여부가 다르다는 것을 알 수 있다.
3. 일원 분산 분석(one-way anova)
일원 분산 분석은 표본이 3개 이상일 때 평균을 비교하여 유의미한것인지 아닌지 판단한다.
np.random.seed(1) data ={ 'a': np.random.randint(1,6,10), 'b': np.random.randint(1,6,10), 'c': np.random.randint(1,6,10), } df = pd.DataFrame(data) print(df) a b c 0 4 2 5 1 5 3 2 2 1 5 2 3 2 3 1 4 4 5 2 5 1 4 2 6 1 5 2 7 2 3 2 8 5 5 1 9 5 3 5
무작위 데이터를 생성한다.
from scipy.stats import f_oneway f_stat, p_val = f_oneway(df['a'],df['b'],df['c']) print('one way anova') print('----------------------') print(f'F-statistic:{f_stat:.4f}') print(f'p_va;ue:{p_val:.4f}') alpha=0.05 if p_val < alpha: print('귀무가설 기각') else: print('귀무가설 채택') one way anova ---------------------- F-statistic:2.2966 p_va;ue:0.1199 귀무가설 채택
f_oneway 함수로 일원 분산 분석을 진행한다. f통계량은 2.29이고 p-value는 0.11이다. 일원 분산분석의 귀무가설은 모든 그룹의 평균이 같다이고 p-value가 0.05보다 크기 때문에 귀무가설을 채택하고 그룹 간에 유의미한 차이가 없다는 것을 확인할 수 있다.
4. 이원 분산 분석
이원 분산 분석은 일원 분산 분석에서 한가지였던 독립 변수를 두 가지 이상으로 늘려서 두 가지 이상의 요인에 따른 평균값의 차이를 비교하는 방법이다.
!pip install statsmodels from statsmodels.formula.api import ols from statsmodels.stats.anova import anova_lm titanic_df = pd.read_csv('../data/Titanic_data.csv') model = ols('Survived ~ C(Sex) + C(Pclass) + C(Sex):C(Pclass)', titanic_df).fit() anova_results = anova_lm(model, typ=2) sns.catplot(x='Sex', y='Survived',hue='Pclass', data=titanic_df,kind='bar')
타이타닉 데이터를 불러와 모델을 생성한다. anova_lm으로 이원분석을 실행하고 시각화한다.
성별과 객실 클래스 모두 생존 여부에 유의미한 영향을 미치는 것을 확인할 수 있다.
5. 교호작용
예를 들어 비타민과 다른 비타민을 같이 먹으면 효과가 더 좋아지는 것처럼 각각의 변수가 결합되면서 결과에 영향을 미치는 작용이다.
titanic = sns.load_dataset('titanic') sns.pointplot(x='sex',y='survived',hue='pclass',data=titanic) plt.legend(title='pclass',loc='best') plt.title('survival rate by sex and pclass')
성별과 객실 등급이 생존여부에 영향을 미친다는 것을 알 수 있다. 3등급 객실의 남성의 생존율이 가장 낮고 1등급 객실의 여성의 생존율이 가장 높은 것을 확인할 수 있다.
'통계' 카테고리의 다른 글
통계-8 확률 분포 (0) 2023.05.30 통계-7 상관 분석 (0) 2023.05.29 통계-5 데이터 분석 방법 (0) 2023.05.29 통계-4 순서형 데이터, 이진 데이터, 시계열 데이터, 공간 데이터 (0) 2023.05.29