728x90
반응형

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-값과 유의수준의 비교

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')

양측검정에 따른 p-value 값 산정

 

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')

양측검정에 따른 p-value 값 산정

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 ==> 이므로 귀무가설을 기각한다.

 

728x90
반응형

+ Recent posts