★쌍체 t-검정★기초통계학-[연습문제 04- 13]
2023. 1. 19. 09:43
728x90
반응형
15. 실험 전후의 변화를 확인하기 위하여 크기 10인 표본을 선정하여 실험 전후의 측정값을 다음과 같이 얻었다. 실험 전후의 평균에 차이가 없는지 유의수준 5%에서 조사하라.
https://knowallworld.tistory.com/354
★쌍체 t-검정★기초통계학-[소표본 추론-05]
1. 쌍체 t-검정 ==> 서로 독립인 두 모집단으로 부터 각각 표본을 추출하여 모평균을 비교하였으며, 두 표본의 대상은 서로 독립이었다. ==> 쌍체 t-검정은 결과 전·후 자료의 집단의 평균의 차에
knowallworld.tistory.com
==> 쌍체 t-검정
A = pd.DataFrame({'표본' : [1,2,3,4,5,6,7,8,9,10] , '실험 전' : [5.6 , 7.4 , 5.8 , 10.9 , 8.8 , 9.7 , 6.8 , 7.9 , 8.6 , 5.8] , '실험 후' : [5.3 , 6.9 , 5.5 , 9.7 , 8.4 , 9.8 , 7.0 , 7.3 , 8.2 , 5.5]})
A['실험 전 - 실험 후'] = A.iloc[: , 1] - A.iloc[: , 2]
A = A.set_index('표본')
A = A.T
A
H_0 : 실험 전후의 평균에 차이가 없는지(양측검정)
X = np.arange(-5,5 , .01)
fig = plt.figure(figsize=(15,8))
# A = "1073 1067 1103 1122 1057 1096 1057 1053 1089 1102 1100 1091 1053 1138 1063 1120 1077 1091"
# A = list(map(int, A.split(' ')))
MEANS = np.mean(A.loc['실험 전 - 실험 후'])
STDS = np.std(A.loc['실험 전 - 실험 후'], ddof=1)
MO_MEAN = 0
n = len(A.loc['실험 전 - 실험 후']) #표본개수
dof_2 = [n-1] #자유도c
ax = sns.lineplot(x = X , y=scipy.stats.t(dof_2).pdf(X) )
trust = 95 #신뢰도
trust = round( (1- trust/100)/2 , 4)
t_r = scipy.stats.t(dof_2).ppf(1- trust)
print(t_r)
t_l = scipy.stats.t(dof_2).ppf(trust)
print(t_l)
E = round(float(t_r * STDS / math.sqrt(n)),4)
ax.set_title('양측 검정' , fontsize = 15)
# =========================================================
ax.fill_between(X, scipy.stats.t(dof_2).pdf(X) , 0 , where = (X<t_r) & (X>t_l) , facecolor = 'orange') # x값 , y값 , 0 , X조건 인곳 , 색깔
area = round(float(scipy.stats.t(dof_2).cdf(t_r) - scipy.stats.t(dof_2).cdf(t_l)),4)
plt.annotate('' , xy=(0, .2), xytext=(-2.5 , .25) , arrowprops = dict(facecolor = 'black'))
ax.text(-4.6 , .32, f'평균(MEANS) = {MEANS}\n' +f' n = {n} \n 표준편차(s) = {STDS}\n' +r'오차한계 $e_{95\% } = t_{\dfrac{\alpha}{2}}*\dfrac{s}{\sqrt{n}}$'+f'= {E}',fontsize=15)
plt.annotate('' , xy=(0, .25), xytext=(1.5 , .25) , arrowprops = dict(facecolor = 'black'))
ax.text(1.6 , .25, r'$P(t_{%.3f}<T<t_{%.3f})$' % (trust , 1-trust) + f'= {area}\n' + r'신뢰구간 = (MEANS -$e_{\alpha}$ , MEANS + $e_{\alpha}$)' +f'\n' + r' = $({%.4f} - {%.4f} , {%.4f} + {%.4f})$' % (MEANS, E , MEANS , E) +f'\n' +r'$ = ({%.4f} , {%.4f})$' % (MEANS-E , MEANS+E) ,fontsize=15)
ax.vlines(x = t_r ,ymin=0 , ymax= scipy.stats.t(dof_2).pdf(t_r) , colors = 'black')
ax.vlines(x = t_l ,ymin=0 , ymax= scipy.stats.t(dof_2).pdf(t_l) , colors = 'black')
plt.annotate('' , xy=(t_r, .007), xytext=(2.5 , .1) , arrowprops = dict(facecolor = 'black'))
plt.annotate('' , xy=(t_l, .007), xytext=(-3.5 , .1) , arrowprops = dict(facecolor = 'black'))
ax.text(1.71 , .13, r'$t_{\dfrac{\alpha}{2}} = {%.4f}$' % t_r + '\n' +r'$\dfrac{\alpha}{2}$ =' + f'{round(float(1- scipy.stats.t(dof_2).cdf(t_r)),3)}',fontsize=15)
ax.text(-3.71 , .13, r'$t_{\dfrac{\alpha}{2}} = {%.4f}$' % t_l + '\n' +r'$\dfrac{\alpha}{2}$ =' +f'{round(float(scipy.stats.t(dof_2).cdf(t_l)),3)}',fontsize=15)
ax.text(t_r - 1 , 0.02 , r'$t_r$' + f'= {t_r}' , fontsize = 13)
ax.text(t_l + .2 , 0.02 , r'$t_l$' + f'= {t_l}' , fontsize = 13)
#==================================== 가설 검정 ==========================================
t_1 = round((MEANS - MO_MEAN)/ (STDS / math.sqrt(n)),4)
print(t_1)
t_1 = abs(t_1)
area = round(float(scipy.stats.t(dof_2).cdf(-t_1) + 1 - (scipy.stats.t(dof_2).cdf(t_1))),4)
ax.fill_between(X, scipy.stats.t(dof_2).pdf(X) , 0 , where = (X>=t_1) | (X<=-t_1) , facecolor = 'skyblue') # x값 , y값 , 0 , X조건 인곳 , 색깔
ax.fill_between(X, scipy.stats.t(dof_2).pdf(X) , 0 , where = (X>=t_r) | (X<=-t_r) , facecolor = 'red') # x값 , y값 , 0 , X조건 인곳 , 색깔
ax.vlines(x= t_1, ymin= 0 , ymax= stats.t(dof_2).pdf(t_1) , color = 'green' , linestyle ='solid' , label ='{}'.format(2))
ax.vlines(x= -t_1, ymin= 0 , ymax= stats.t(dof_2).pdf(-t_1) , color = 'green' , linestyle ='solid' , label ='{}'.format(2))
annotate_len = stats.t(dof_2).pdf(t_1) /2
plt.annotate('' , xy=(t_1, annotate_len), xytext=(-t_1/2 , annotate_len) , arrowprops = dict(facecolor = 'black'))
plt.annotate('' , xy=(-t_1, annotate_len), xytext=(t_1/2 , annotate_len) , arrowprops = dict(facecolor = 'black'))
ax.text(-1.5 , annotate_len+0.03 , f'P-value : \nP(T<={-t_1}) + P(T>={t_1}) \n = {area}',fontsize=15)
mo = '모평균'
ax.text(-4.6 , .22, r'T = $\dfrac{\overline{X} - {\mu}}{\dfrac{s}{\sqrt{n}}}$' + f'= { round((MEANS - MO_MEAN)/(STDS / math.sqrt(n)),4) }' ,fontsize=15)
b = ['t-(n={})'.format(i) for i in dof_2]
plt.legend(b , fontsize = 15)
H_0 : H_0 : 실험 전후의 평균에 차이가 없는지(양측검정)
p-value : 0.0137
alpha : 0.05
p-value < alpha ==> 0.0137 < 0.05 ==> 귀무가설 H_0 : 실험 전후의 평균 차이가 없다는 주장은 기각한다. 즉 , 유의수준 5%에서 실험 전후의 평균차이는 있다.
16. 자동차 사고가 빈번히 일어나는 교차로의 신호 체계를 바꾸면 사고를 줄일 수 있다고 경찰청에서 말한다. 이것을 알아보기 위하여 시범적으로 사고가 많이 발생하는 지역을 선정하여 지난 한달 동안 발생한 사고 건수와 신호 체계를 바꾼 후의 사고 건수를 조사한 결과 다음과 같았다. 유의수준 5%에서 신호체계를 바꾸면 사고를 줄일 수 있는지 조사하라.
H_0 : 신호체계 바꾸기 전의 사고량 >= 신호체계 바꾼 후의 사고량(하단측 검정)
X = np.arange(-5,5 , .01)
fig = plt.figure(figsize=(15,8))
#
# A = "1073 1067 1103 1122 1057 1096 1057 1053 1089 1102 1100 1091 1053 1138 1063 1120 1077 1091"
# A = list(map(int, A.split(' ')))
MEANS = np.mean(A.loc['바꾸기 전 - 바꾼 후'])
STDS = np.std(A.loc['바꾸기 전 - 바꾼 후'], ddof=1)
MO_MEAN = 0
n = len(A.loc['바꾸기 전 - 바꾼 후']) #표본개수
n = len(A) #표본개수
dof_2 = [n-1] #자유도c
ax = sns.lineplot(x = X , y=scipy.stats.t(dof_2).pdf(X) )
trust = 95 #신뢰도
trust = round( (1- trust/100) , 4)
t_r = scipy.stats.t(dof_2).ppf(1- trust)
print(t_r)
t_l = scipy.stats.t(dof_2).ppf(trust)
print(t_l)
E = round(float(t_r * STDS / math.sqrt(n)),4) #오차한계
ax.set_title('하단측검정' , fontsize = 15)
# =========================================================
ax.fill_between(X, scipy.stats.t(dof_2).pdf(X) , 0 , where = (X>=-t_r) , facecolor = 'orange') # x값 , y값 , 0 , X조건 인곳 , 색깔
area = round(float(1- scipy.stats.t(dof_2).cdf(t_l)),4)
plt.annotate('' , xy=(0, .2), xytext=(-2.5 , .25) , arrowprops = dict(facecolor = 'black'))
ax.text(-4.6 , .32, f'평균(MEANS) = {MEANS}\n' +f' n = {n} \n 표준편차(s) = {STDS}\n' +r'오차한계 $e_{%d} = t_{{\alpha}}*\dfrac{s}{\sqrt{n}}$' % ((1- trust)*100 ) +f'= {E}' ,fontsize=15)
plt.annotate('' , xy=(0, .25), xytext=(1.5 , .25) , arrowprops = dict(facecolor = 'black'))
ax.text(1.6 , .25, r'$P(t_{%.3f}<T)$' % (trust) + f'= {area}\n' + r'신뢰구간 = (MEANS -$e_{\alpha} , \infty$)' +f'\n' + r' = $({%.4f} - {%.4f} , \infty)$' % (MEANS, E) +f'\n' +r'$ = ({%.4f} , \infty)$' % (MEANS-E) ,fontsize=15)
# ax.vlines(x = t_r ,ymin=0 , ymax= scipy.stats.t(dof_2).pdf(t_r) , colors = 'black')
ax.vlines(x = t_l ,ymin=0 , ymax= scipy.stats.t(dof_2).pdf(t_l) , colors = 'black')
# plt.annotate('' , xy=(t_r, .007), xytext=(2.5 , .1) , arrowprops = dict(facecolor = 'black'))
plt.annotate('' , xy=(t_l, .007), xytext=(-3.5 , .1) , arrowprops = dict(facecolor = 'black'))
# ax.text(1.71 , .13, r'$t_{\dfrac{\alpha}{2}} = {%.4f}$' % t_r + '\n' +r'$\dfrac{\alpha}{2}$ =' + f'{round(float(1- scipy.stats.t(dof_2).cdf(t_r)),3)}',fontsize=15)
ax.text(-3.71 , .13, r'$t_{{\alpha}} = {%.4f}$' % t_l + '\n' +r'${\alpha}$ =' +f'{round(float(scipy.stats.t(dof_2).cdf(t_l)),3)}',fontsize=15)
# ax.text(t_r - 1 , 0.02 , r'$t_r$' + f'= {t_r}' , fontsize = 13)
ax.text(t_l + .2 , 0.02 , r'$t_l$' + f'= {t_l}' , fontsize = 13)
#==================================== 가설 검정 ==========================================
t_1 = round((MEANS - MO_MEAN)/ (STDS / math.sqrt(n)),4)
print(t_1)
t_1 = abs(t_1)
area = round(float(scipy.stats.t(dof_2).cdf(-t_1) ),4)
ax.fill_between(X, scipy.stats.t(dof_2).pdf(X) , 0 , where = (X<=-t_1) , facecolor = 'skyblue') # x값 , y값 , 0 , X조건 인곳 , 색깔
ax.fill_between(X, scipy.stats.t(dof_2).pdf(X) , 0 , where = (X<=t_l) , facecolor = 'red') # x값 , y값 , 0 , X조건 인곳 , 색깔
# ax.vlines(x= t_1, ymin= 0 , ymax= stats.t(dof_2).pdf(t_1) , color = 'green' , linestyle ='solid' , label ='{}'.format(2))
ax.vlines(x= -t_1, ymin= 0 , ymax= stats.t(dof_2).pdf(-t_1) , color = 'green' , linestyle ='solid' , label ='{}'.format(2))
annotate_len = stats.t(dof_2).pdf(t_1) /2
# plt.annotate('' , xy=(t_1, annotate_len), xytext=(-t_1/2 , annotate_len) , arrowprops = dict(facecolor = 'black'))
plt.annotate('' , xy=(-t_1, annotate_len), xytext=(t_1/2 , annotate_len) , arrowprops = dict(facecolor = 'black'))
ax.text(0.7, annotate_len+0.03 , f'P-value : \nP(T<={-t_1}) \n = {area}',fontsize=15)
mo = '모평균'
ax.text(-4.6 , .22, r'T = $\dfrac{\overline{X} - {\mu}}{\dfrac{s}{\sqrt{n}}}$' + f'= { round((MEANS - MO_MEAN)/(STDS / math.sqrt(n)),4) }' ,fontsize=15)
b = ['t-(n={})'.format(i) for i in dof_2]
plt.legend(b , fontsize = 15)
H_0 : 신호체계 바꾸기 전의 사고량 >= 신호체계 바꾼 후의 사고량(하단측 검정)
p-value : 0.1853
alpha : 0.05
p-value > alpha ==> 0.1853 > 0.05 ==> 귀무가설H_0 : 신호체계 바꾸기 전의 사고량 >= 신호체계 바꾼 후의 사고량(하단측 검정)의 주장을 채택 한다. 즉 , 유의수준 5%에서 신호체계 바꾼다고 해서 사고량이 줄어들지 않는다.
728x90
반응형