★양측검정에 따른 p-value 값 산정★표본평균의 정규분포★p-값(p-value)★기초통계학-[통계적 가설검정 -03]
1. p-값
==> 주어진 유의수준 a에 대하여 표본으로부터 얻은 검정통계량의 관찰값이 기각역에 놓이는지 아니면 채택역에 놓이는지 알 수 있다.
==> 유의수준이 달라지면 다른 결과값을 얻게된다.
==> 귀무가설 H_0이 참이라고 가정할 때, 관찰값에 의해 H_0을 기각시킬 수 있는 가장 작은 유의수준
x = np.arange(-5,5 , .001)
fig = plt.figure(figsize=(15,8))
ax = sns.lineplot(x , stats.norm.pdf(x, loc=0 , scale =1)) #정의역 범위 , 평균 = 0 , 표준편차 =1 인 정규분포 플롯
trust = [90,95,99] #신뢰도
ax.set_title('상단측검정' ,fontsize = 18)
z_1 = round(scipy.stats.norm.ppf(1 - (1-(trust[0]/100))/2) ,3 )
z_2 = round(scipy.stats.norm.ppf(1 - (1-(trust[1]/100))/2) ,3 )
z_3 = round(scipy.stats.norm.ppf(1 - (1-(trust[2]/100))/2) ,3 )
ax.fill_between(x, stats.norm.pdf(x, loc=0 , scale =1) , 0 , where = (x<=z_1) , facecolor = 'skyblue') # x값 , y값 , 0 , x<=0 인곳 , 색깔
ax.fill_between(x, stats.norm.pdf(x, loc=0 , scale =1) , 0 , where = (x>=z_1) , facecolor = 'red') # x값 , y값 , 0 , x<=0 인곳 , 색깔
ax.fill_between(x, stats.norm.pdf(x, loc=0 , scale =1) , 0 , where = (x>=z_2) , facecolor = 'purple') # x값 , y값 , 0 , x<=0 인곳 , 색깔
ax.fill_between(x, stats.norm.pdf(x, loc=0 , scale =1) , 0 , where = (x>=z_3) , facecolor = 'green') # x값 , y값 , 0 , x<=0 인곳 , 색깔
area_1 = scipy.stats.norm.cdf(z_1)
area_2 = scipy.stats.norm.cdf(z_2)
area_3 = scipy.stats.norm.cdf(z_3)
plt.annotate('' , xy=(0, .2), xytext=(2 , .33) , arrowprops = dict(facecolor = 'black'))
ax.vlines(x= z_1, ymin= 0 , ymax= stats.norm.pdf(z_1, loc=0 , scale =1) , color = 'black' , linestyle ='solid' , label ='{}'.format(2))
# ax.vlines(x= -z_1, ymin= 0 , ymax= stats.norm.pdf(-z_1, loc=0 , scale =1) , color = 'black' , linestyle ='solid' , label ='{}'.format(2))
annotate_len_1 = stats.norm.pdf(z_1, loc=0 , scale =1) /2
annotate_len_2 = stats.norm.pdf(z_2, loc=0 , scale =1) /2
annotate_len_3 = stats.norm.pdf(z_3, loc=0 , scale =1) /2
plt.annotate('' , xy=(z_1, annotate_len_1), xytext=(z_1+ 1 , annotate_len_1+0.2) , arrowprops = dict(facecolor = 'black'))
plt.annotate('' , xy=(z_2, annotate_len_2), xytext=(z_2+ 1 , annotate_len_1) , arrowprops = dict(facecolor = 'black'))
plt.annotate('' , xy=(z_3, annotate_len_3), xytext=(z_3+ 1 , annotate_len_1) , arrowprops = dict(facecolor = 'black'))
# plt.annotate('' , xy=(-z_1, annotate_len), xytext=(-1-z_1 , annotate_len) , arrowprops = dict(facecolor = 'black'))
# ax.text(1 + z_1 , annotate_len , r'$z_{\alpha/2} = $' + f'{round(scipy.stats.norm.ppf(trust/100),3)}\n' + r'$H_{0}$의 기각역',fontsize=15)
ax.text(1 + z_1 , annotate_len_1+0.2 , r'$z_{\alpha} = $' + f'{z_1}\n' + r'$H_{0}$의 기각역' + f'\nP(Z>={z_1}) = {round(1-area_1 ,3)}',fontsize=15)
ax.text(2 , .35, r'$H_{0}$의 채택역' +f'\nP(Z<={z_1}) : {round(area_1,4)}',fontsize=15)
ax.text(1 + z_2 , annotate_len_2+0.1 , r'$z_{\alpha} = $' + f'{z_2}\n' + r'$H_{0}$의 기각역' + f'\nP(Z>={z_2}) = {round(1-area_2 ,3)}',fontsize=15)
ax.text(1 + z_3 , annotate_len_3+0.02 , r'$z_{\alpha} = $' + f'{z_3}\n' + r'$H_{0}$의 기각역' + f'\nP(Z>={z_3}) = {round(1-area_3 ,3)}',fontsize=15)
MEANS = 60.8
STDS = round(math.sqrt(10.5**2),3) #모표준편차
n = 2490
# ax.text(-5.5 , .35, r'$\overline{X} = $'+f'{MEANS}\n' + r'$\sigma = $' + f'{STDS}\n' + r'$\sqrt{n} = $' + f'{round(math.sqrt(n),3)}',fontsize=15)
b= 'N(0,1)'
plt.legend([b] , fontsize = 15 , loc='upper left')
# ax.text(-5.5 , .15, f'신뢰구간 모평균에 대한 {trust}% : \n' + r'$\overline{X}$' +f'-{z_1}' + r'$\dfrac{\sigma}{\sqrt{n}},\overline{X}$' + f'+{z_1}' + r'$\dfrac{\sigma}{\sqrt{n}}$ = ' + f'({round(MEANS - z_1*STDS/math.sqrt(n),2)} , {round(MEANS + z_1*STDS/math.sqrt(n),2)})',fontsize=15)
# ax.text(-5.5 , .25, r'신뢰구간 L = $2*{%.3f}\dfrac{\sigma}{\sqrt{n}} = $' % z_1 + f'{round(2* z_1 * STDS / math.sqrt(n),3)}',fontsize=15)
#
# ax.text(-5.5 , .3, r'오차한계 = ${%.3f}\dfrac{\sigma}{\sqrt{n}} = $' % z_1 + f'{round(z_1 * STDS / math.sqrt(n),3)}',fontsize=15)
ax.text(-5.5 , .25, f'신뢰구간 모평균에 대한 {trust[0]}% : \n' + r'$\overline{X}$' +f'-{z_1}' + r'$\dfrac{\sigma}{\sqrt{n}},\overline{X}$' + f'+{z_1}' + r'$\dfrac{\sigma}{\sqrt{n}}$ ' ,fontsize=15)
ax.text(-5.5 , .2, f'신뢰구간 모평균에 대한 {trust[1]}% : \n' + r'$\overline{X}$' +f'-{z_2}' + r'$\dfrac{\sigma}{\sqrt{n}},\overline{X}$' + f'+{z_2}' + r'$\dfrac{\sigma}{\sqrt{n}}$ ' ,fontsize=15)
ax.text(-5.5 , .15, f'신뢰구간 모평균에 대한 {trust[2]}% : \n' + r'$\overline{X}$' +f'-{z_3}' + r'$\dfrac{\sigma}{\sqrt{n}},\overline{X}$' + f'+{z_3}' + r'$\dfrac{\sigma}{\sqrt{n}}$ ' ,fontsize=15)
p-값 \ 유의수준(a) | 10% | 5% | 1% |
p>=0.1 | H_0 채택 | H_0 채택 | H_0 채택 |
0.05<=p<=0.1 | H_0 기각 | H_0채택 | H_0채택 |
0.01<=p<0.05 | H_0 기각 | H_0 기각 | H_0채택 |
p<0.01 | H_0 기각 | H_0 기각 | H_0 기각 |
2. 모평균에 대한 양측 검정
==> 대표본을 이용하여 모분산이 알려져 있는 정규모집단의 모평균에 대한 주장을 검정
https://knowallworld.tistory.com/302
★모분산을 모를땐 t-분포!★stats.norm.cdf()★모분산을 알때/모를때 표본평균의 표본분포★일표본
1. 표본평균의 표본분포(모분산을 아는 경우) ==> 표본평균에 대한 표본분포는 정규분포를 따른다. EX-01) 모평균 100 , 모분산 9인 정규모집단으로부터 크기 25인 표본을 임의로 추출 1> 표본평균 |X
knowallworld.tistory.com
기각역 R = Z < -z_a/2 또는 Z > z_a/2
a= 0.05
p-value >= a이면 H_0 채택
p-value <= a이면 H_0 기각
EX-01) 고 3 남학생의 평균 키가 10년전보다 3.1cm 더 큰 172.3cm라고 주장하였다. 이러한 주장의 진위를 조사하기 위하여 이 지역에 거주하는 고3 남학생 120명을 임의로 선정하여 측정한 결과 평균 키가 171.8cm였다. 이때 남학생의 키는 표준편차가 3.26cm인 정규분포를 따른다.
1> 귀무가설과 대립가설 설정하라.
u = 172.3cm
H_0 : 10년전보다 3.1cm 더 큰 172.3cm ==> u >= 3.1 ==> 귀무가설
H_1 :10년전보다 3.1cm 보다 적은 키이다. ==> u<3.1 ==> 대립가설
|X ~ N(171.8 , 3.26**2 / 120)
x = np.arange(-5,5 , .001)
fig = plt.figure(figsize=(15,8))
ax = sns.lineplot(x , stats.norm.pdf(x, loc=0 , scale =1)) #정의역 범위 , 평균 = 0 , 표준편차 =1 인 정규분포 플롯
# trust = 95 #신뢰도
MEANS = 171.8 - 172.3
STDS = 3.26
n = 120
ax.set_title('양측검정' ,fontsize = 18)
#==========================================귀무가설 기각과 채택 ====================================================
trust = 95 #신뢰도_유의수준
t_1 = round(scipy.stats.norm.ppf(1 - (1-(trust/100))/2) ,3 )
ax.fill_between(x, stats.norm.pdf(x, loc=0 , scale =1) , 0 , where = (x<=t_1) & (x>=-t_1) , facecolor = 'orange') # x값 , y값 , 0 , x<=0 인곳 , 색깔
area = scipy.stats.norm.cdf(t_1) - scipy.stats.norm.cdf(-t_1)
plt.annotate('' , xy=(0, .2), xytext=(2 , .2) , arrowprops = dict(facecolor = 'black'))
ax.text(2 , .2, r'$H_{0}$의 채택역' +f'\nP({-t_1}<=Z<={t_1}) : {round(area,4)}',fontsize=15)
annotate_len = stats.norm.pdf(t_1, loc=0 , scale =1) /2
ax.vlines(x= t_1, ymin= 0 , ymax= stats.norm.pdf(t_1, loc=0 , scale =1) , color = 'green' , linestyle ='solid' , label ='{}'.format(2))
ax.vlines(x= -t_1, ymin= 0 , ymax= stats.norm.pdf(-t_1, loc=0 , scale =1) , color = 'green' , linestyle ='solid' , label ='{}'.format(2))
ax.text(1 + t_1 , annotate_len , r'$z_{\alpha/2} = $' + f'{t_1}\n' + r'$H_{0}$의 기각역',fontsize=15)
ax.text(-2.5 -t_1 , annotate_len , r'$z_{\alpha/2} = $' + f'{-t_1}\n' + r'$H_{0}$의 기각역',fontsize=15)
plt.annotate('' , xy=(t_1, annotate_len-0.02), xytext=(t_1+ 1 , annotate_len) , arrowprops = dict(facecolor = 'black'))
plt.annotate('' , xy=(-t_1, annotate_len-0.02), xytext=(-1-t_1 , annotate_len) , arrowprops = dict(facecolor = 'black'))
ax.text(-5.5 , .15, f'신뢰구간 모평균에 대한 {trust}% : \n' + r'$\overline{X}$' +f'- {t_1}' + r'$\dfrac{\sigma}{\sqrt{n}},\overline{X}$' + f'+ {t_1}' + r'$\dfrac{\sigma}{\sqrt{n}}$ ' ,fontsize=15)
ax.text(-5.5 , .25, r'신뢰구간 L = $2*{%.3f}\dfrac{\sigma}{\sqrt{n}} $' % t_1 ,fontsize=15)
ax.text(-5.5 , .3, r'오차한계 = ${%.3f}\dfrac{\sigma}{\sqrt{n}} $' % t_1,fontsize=15)
#============================================표본평균의 정규분포화 =========================================================
z_1 = round(MEANS/ math.sqrt(STDS**2/n) ,2)
# # z_2 = round((34.5 - 35) / math.sqrt(5.5**2 / 25) , 2)
# z_1 = round(scipy.stats.norm.ppf(1 - (1-(trust/100))/2) ,3 )
ax.fill_between(x, stats.norm.pdf(x, loc=0 , scale =1) , 0 , where = (x<=z_1) | (x>=-z_1) , facecolor = 'skyblue') # x값 , y값 , 0 , x<=0 인곳 , 색깔
ax.fill_between(x, stats.norm.pdf(x, loc=0 , scale =1) , 0 , where = (x>=t_1) | (x<=-t_1) , facecolor = 'red') # x값 , y값 , 0 , x<=0 인곳 , 색깔
area = scipy.stats.norm.cdf(-z_1) - scipy.stats.norm.cdf(z_1)
ax.vlines(x= z_1, ymin= 0 , ymax= stats.norm.pdf(z_1, loc=0 , scale =1) , color = 'black' , linestyle ='solid' , label ='{}'.format(2))
ax.vlines(x= -z_1, ymin= 0 , ymax= stats.norm.pdf(-z_1, loc=0 , scale =1) , color = 'black' , linestyle ='solid' , label ='{}'.format(2))
annotate_len = stats.norm.pdf(z_1, loc=0 , scale =1) /2
plt.annotate('' , xy=(z_1, annotate_len), xytext=(z_1+ 1 , annotate_len) , arrowprops = dict(facecolor = 'black'))
plt.annotate('' , xy=(-z_1, annotate_len), xytext=(-1-z_1 , annotate_len) , arrowprops = dict(facecolor = 'black'))
ax.text(-1.5 , annotate_len+0.01 , f'P(Z<={z_1}) + P(Z>={-z_1}) = {round(1-area,4)}',fontsize=15)
# ax.text(0 , annotate_len+0.01 ,f'P(Z>={-z_1})',fontsize=15)
MEANS = 171.8 - 172.3
STDS = 3.26
n = 120
ax.text(2 , .35, r'$\overline{X}$ = ' +f'{MEANS}\n'+ r'$\sigma = $' + f'{STDS}\n' + r'$\sqrt{n} = $' + f'{round(math.sqrt(n),3)}',fontsize=15)
b= 'N(0,1)'
plt.legend([b] , fontsize = 15 , loc='upper left')
2>유의수준 5%에서 기각역을 구하라.
기각역 R : |Z| > z_0.025 = 1.96
a = 0.05
a/2 = 0.025
3> 검정통계량의 관찰값을 구하라.
|X ~ N(172.3-171.8 , 3.26**2 / 120)
|z_0| = (172.3 - 171.8) / (3.26 / 10.954) = 1.68
4> p-value 값
p-value 값 = P(Z<-1.68) + P(Z>1.68) = 0.093
5> 검정통계량의 관찰값 또는 p-value을 이용하여 유의수준 5%에서 귀무가설을 검정하라.
p-value > a = 0.093 > 0.05 ==> H_0 채택
==> P-VALUE의 넓이가 기각역 넓이보다 넓으므로 귀무가설을 채택한다!!
EX-02) 어두운 곳에 적응하는 데 걸리는 시간은 평균 7.88초라고 주장한다. 이 주장을 검정하기 위해 임의로 50명을 추출하여 실험한 결과, 적응시간이 평균 7.83초 였다. 이때 적응 시간은 표준편차 0.15인 정규분포를 따른다고 한다.
1> 귀무가설과 대립가설 설정하라.
귀무가설 : 어두운곳에 적응하는 데 걸리는 시간은 7.88초이다. ==> u_0 = 7.88
대립가설 : 어두운곳에 적응하는 데 걸리는 시간은 7.88초가 아니다. ==> u_0 != 7.88
2> 유의수준 5%에서 기각역을 구하라.
|X ~ N(7.83 - 7.88 , 0.15**2 /50)
기각역 R : |Z| > z_0.025 = 1.96
x = np.arange(-5,5 , .001)
fig = plt.figure(figsize=(15,8))
ax = sns.lineplot(x , stats.norm.pdf(x, loc=0 , scale =1)) #정의역 범위 , 평균 = 0 , 표준편차 =1 인 정규분포 플롯
# trust = 95 #신뢰도
MEANS = 171.8 - 172.3
STDS = 3.26
n = 120
ax.set_title('양측검정' ,fontsize = 18)
#==========================================귀무가설 기각과 채택 ====================================================
trust = 95 #신뢰도_유의수준
t_1 = round(scipy.stats.norm.ppf(1 - (1-(trust/100))/2) ,3 )
ax.fill_between(x, stats.norm.pdf(x, loc=0 , scale =1) , 0 , where = (x<=t_1) & (x>=-t_1) , facecolor = 'orange') # x값 , y값 , 0 , x<=0 인곳 , 색깔
area = scipy.stats.norm.cdf(t_1) - scipy.stats.norm.cdf(-t_1)
plt.annotate('' , xy=(0, .2), xytext=(2 , .2) , arrowprops = dict(facecolor = 'black'))
ax.text(2 , .2, r'$H_{0}$의 채택역' +f'\nP({-t_1}<=Z<={t_1}) : {round(area,4)}',fontsize=15)
annotate_len = stats.norm.pdf(t_1, loc=0 , scale =1) /2
ax.vlines(x= t_1, ymin= 0 , ymax= stats.norm.pdf(t_1, loc=0 , scale =1) , color = 'green' , linestyle ='solid' , label ='{}'.format(2))
ax.vlines(x= -t_1, ymin= 0 , ymax= stats.norm.pdf(-t_1, loc=0 , scale =1) , color = 'green' , linestyle ='solid' , label ='{}'.format(2))
ax.text(1 + t_1 , annotate_len , r'$z_{\alpha/2} = $' + f'{t_1}\n' + r'$H_{0}$의 기각역',fontsize=15)
ax.text(-2.5 -t_1 , annotate_len , r'$z_{\alpha/2} = $' + f'{-t_1}\n' + r'$H_{0}$의 기각역',fontsize=15)
plt.annotate('' , xy=(t_1, annotate_len-0.02), xytext=(t_1+ 1 , annotate_len) , arrowprops = dict(facecolor = 'black'))
plt.annotate('' , xy=(-t_1, annotate_len-0.02), xytext=(-1-t_1 , annotate_len) , arrowprops = dict(facecolor = 'black'))
ax.text(-5.5 , .15, f'신뢰구간 모평균에 대한 {trust}% : \n' + r'$\overline{X}$' +f'- {t_1}' + r'$\dfrac{\sigma}{\sqrt{n}},\overline{X}$' + f'+ {t_1}' + r'$\dfrac{\sigma}{\sqrt{n}}$ ' ,fontsize=15)
ax.text(-5.5 , .25, r'신뢰구간 L = $2*{%.3f}\dfrac{\sigma}{\sqrt{n}} $' % t_1 ,fontsize=15)
ax.text(-5.5 , .3, r'오차한계 = ${%.3f}\dfrac{\sigma}{\sqrt{n}} $' % t_1,fontsize=15)
#============================================표본평균의 정규분포화 =========================================================
MEANS = round(7.83-7.88,2)
STDS = 0.15
n = 50
z_1 = round(MEANS/ math.sqrt(STDS**2/n) ,2)
# # z_2 = round((34.5 - 35) / math.sqrt(5.5**2 / 25) , 2)
# z_1 = round(scipy.stats.norm.ppf(1 - (1-(trust/100))/2) ,3 )
ax.fill_between(x, stats.norm.pdf(x, loc=0 , scale =1) , 0 , where = (x<=z_1) | (x>=-z_1) , facecolor = 'skyblue') # x값 , y값 , 0 , x<=0 인곳 , 색깔
ax.fill_between(x, stats.norm.pdf(x, loc=0 , scale =1) , 0 , where = (x>=t_1) | (x<=-t_1) , facecolor = 'red') # x값 , y값 , 0 , x<=0 인곳 , 색깔
area = scipy.stats.norm.cdf(-z_1) - scipy.stats.norm.cdf(z_1)
ax.vlines(x= z_1, ymin= 0 , ymax= stats.norm.pdf(z_1, loc=0 , scale =1) , color = 'black' , linestyle ='solid' , label ='{}'.format(2))
ax.vlines(x= -z_1, ymin= 0 , ymax= stats.norm.pdf(-z_1, loc=0 , scale =1) , color = 'black' , linestyle ='solid' , label ='{}'.format(2))
annotate_len = stats.norm.pdf(z_1, loc=0 , scale =1) /2
plt.annotate('' , xy=(z_1, annotate_len), xytext=(z_1+ 1 , annotate_len) , arrowprops = dict(facecolor = 'black'))
plt.annotate('' , xy=(-z_1, annotate_len), xytext=(-1-z_1 , annotate_len) , arrowprops = dict(facecolor = 'black'))
ax.text(-1.5 , annotate_len+0.01 , f'P(Z<={z_1}) + P(Z>={-z_1}) = {round(1-area,4)}',fontsize=15)
# ax.text(0 , annotate_len+0.01 ,f'P(Z>={-z_1})',fontsize=15)
ax.text(2 , .35, r'$\overline{X}$ = ' +f'{MEANS}\n'+ r'$\sigma = $' + f'{STDS}\n' + r'$\sqrt{n} = $' + f'{round(math.sqrt(n),3)}',fontsize=15)
b= 'N(0,1)'
plt.legend([b] , fontsize = 15 , loc='upper left')
3> 검정통계량의 관찰값을 구하라.
z_0 = (7.83 - 7.88) / (0.15 /루트(50)) = -2.36
4> p-값을 구하라.
p-value = P(Z<= -2.36) + P(Z>= 2.36) = 0.0183
5> 검정통계량의 관찰값 또는 p-value 값 이용하여 유의수준 5%에서 귀무가설을 검정하라.
a= 0.05
p-value < a ==> 0.0183 < 0.05 ==> 이므로 귀무가설을 기각한다.
'기초통계 > 대표본 가설검정' 카테고리의 다른 글
★p-value값★검정통계량의 관찰값★모평균 차의 검정★기초통계학-[통계적 가설검정 -06] (0) | 2023.01.15 |
---|---|
★p-value값★검정통계량의 관찰값★모평균에 대한 상단측 검정★기초통계학-[통계적 가설검정 -05] (0) | 2023.01.13 |
★p-value값★검정통계량의 관찰값★모평균에 대한 하단측 검정★기초통계학-[통계적 가설검정 -04] (0) | 2023.01.13 |
★채택역★기각역★양측검정★상단측검정★하단측검정★기초통계학-[통계적 가설검정 -02] (0) | 2023.01.13 |
★채택,기각역★제1,2종오류★유의수준★대립가설★귀무가설★가설검정★기초통계학-[통계적 가설검정 -01] (0) | 2023.01.13 |