★scipy.stats.chi2().ppf()★matplotlib 수학식표현★카이제곱분포★정규분포★기초통계학-[Chapter06 - 연속확률분포-06]
2022. 12. 22. 18:04
728x90
반응형
1. 카이제곱분포
==> 카이제곱분포는 정규모집단의 모분산에 대한 통계적 추론에 사용
==> n개의 서로 독립인 표준정규확률변수 Z_1 ,Z_2 ,···· Z_n 에 대하여 확률변수의 확률분포를 자유도(degree of freedom) , d.f. = n인 카이제곱분포
X = np.linspace(0.5 , 50 , 100)
fig = plt.figure(figsize=(15,8))
a = [1,2,3,4,5,10,20,30]
for dof in a:
sns.lineplot(X , scipy.stats.chi2(dof).pdf(X))
b = [r'$\chi^2(\eta$ = {})'.format(i) for i in a]
print(b)
plt.legend(b , fontsize = 15)
==> matplotlib 수학식 표현!!!
https://codetorial.net/matplotlib/mathematical_expressions.html
==> 자유도 n이 커질수록 종 모양의 분포에 가까워진다.
==> n이 커질수록 카이제곱 분포는 정규분포에 근사한다.
EX-01) 자유도 10인 카이제곱분포에서 왼쪽 꼬리확률과 오른쪽 꼬리확률이 각가 5%인 두 임계점을 구하라.
d.f = 10
P(V> x_L**2) = 0.95
matplotlib.rc("font" , family = "Times New Roman" , weight = "bold")
X = np.arange(0,30,.1)
fig = plt.figure(figsize=(15,8))
dof = 10 #자유도
ax = sns.lineplot(X , scipy.stats.chi2(dof).pdf(X)) #18.31 , 3.94 어케?
#P(X>X_r) = 0.05
#P(X<=X_r) = 0.95
X_r = scipy.stats.chi2(dof).ppf(0.95) #==> 1.644
#X_r = 10 + math.sqrt(20)*1.644 #평균 = n , 분산 = 2n
print(X_r)
#P(X<X_l) = 0.05
X_l = scipy.stats.chi2(dof).ppf(0.05) #==> 1.644
print(X_l)
ax.fill_between(X, scipy.stats.chi2(dof).pdf(X) , where = (X>=X_r) | (X<=X_l) , facecolor = 'skyblue') # x값 , y값 , 0 , x조건 인곳 , 색깔
area = 1- scipy.stats.chi2(dof).cdf(X_r) #넓이 구하기!!!!!
print(area)
ax.text(25 , .015, 'P(X >' + r'$\chi^2_{0.05}$)' + f"= {round(area,4)}",fontsize=15)
plt.annotate('' , xy=(22, .002), xytext=(24 , .014) , arrowprops = dict(facecolor = 'black'))
ax.vlines(x= X_r, ymin= 0 , ymax= scipy.stats.chi2(dof).pdf(X_r) , color = 'black' , linestyle ='solid' , label ='{}'.format(2))
ax.vlines(x= X_l, ymin= 0 , ymax= scipy.stats.chi2(dof).pdf(X_l) , color = 'black' , linestyle ='solid' , label ='{}'.format(2))
area = scipy.stats.chi2(dof).cdf(X_l) #넓이 구하기!!!!!
ax.text(-1 , .02, 'P(X >' + r'$\chi^2_{0.05}$)' + f"= {round(area,4)}",fontsize=15)
ax.text(X_l + 1, .02, r'$\chi^2_L= {}$'.format(round(X_l,2)) ,fontsize=15)
ax.text(X_r - 3.5, .01, r'$\chi^2_R= {}$'.format(round(X_r,2)) ,fontsize=15)
plt.annotate('' , xy=(2.5, .002), xytext=(0 , .014) , arrowprops = dict(facecolor = 'black'))
b = [r'$\chi^2(\eta$ = {})'.format(i) for i in a]
print(b)
plt.legend(b , fontsize = 15)
==> scipy.stats.chi2(자유도).ppf(꼬리확률) ==> X_l , X_R 값 구할 수 있게 된다!
EX-02) 확률변수 V가 자유도 5인 카이제곱분포에서 P(V<x_0) = 0.95를 만족하는 임계값 x_0를 구하라.
matplotlib.rc("font" , family = "Times New Roman" , weight = "bold")
X = np.arange(0,30,.1)
fig = plt.figure(figsize=(15,8))
dof = 5 #자유도
ax = sns.lineplot(X , scipy.stats.chi2(dof).pdf(X)) #18.31 , 3.94 어케?
#P(X>X_r) = 0.05
#P(X<=X_r) = 0.95
X_r = scipy.stats.chi2(dof).ppf(0.95)
#X_r = 10 + math.sqrt(20)*1.644 #평균 = n , 분산 = 2n
print(X_r)
ax.fill_between(X, scipy.stats.chi2(dof).pdf(X) , where = (X<=X_r) , facecolor = 'skyblue') # x값 , y값 , 0 , x조건 인곳 , 색깔
area = scipy.stats.chi2(dof).cdf(X_r) #넓이 구하기!!!!!
print(area)
ax.text(10 , .08, 'P(X <=' + r'$\chi^2_{0.95}$)' + f"= {round(area,4)}",fontsize=15)
plt.annotate('' , xy=(7, .06), xytext=(10 , .08) , arrowprops = dict(facecolor = 'black'))
ax.vlines(x= X_r, ymin= 0 , ymax= scipy.stats.chi2(dof).pdf(X_r) , color = 'black' , linestyle ='solid' , label ='{}'.format(2))
ax.text(X_r - 3.5, .01, r'$\chi^2_R= {}$'.format(round(X_r,2)) ,fontsize=15)
b = [r'$\chi^2(\eta$ = {})'.format(dof)]
print(b)
plt.legend(b , fontsize = 15)
x_0 = 11.07
출처 : [쉽게 배우는 생활속의 통계학] [북스힐 , 이재원]
※혼자 공부 정리용
728x90
반응형
'기초통계 > 연속확률변수' 카테고리의 다른 글
★scipy.stats.f(자유도1 , 자유도 2).pdf()★F-분포★기초통계학-[Chapter06 - 연속확률분포-08] (0) | 2022.12.23 |
---|---|
★scipy.stats.t(자유도).ppf()★t-분포★기초통계학-[Chapter06 - 연속확률분포-07] (0) | 2022.12.23 |
이항분포, 푸아송분포,정규분포 기억하기★cdf, pdf 사용법!★정규근사★파스칼★이항분포의 정규근사★기초통계학-[Chapter06 - 연속확률분포-05] (0) | 2022.12.22 |
★정규분포의 표준정규분포로의 변환★추측통계학-[Chapter06 - 연속확률분포-04] (0) | 2022.12.22 |
정규분포의 표준정규분포로의 변환★기초통계학-[Chapter06 - 연속확률분포-03] (0) | 2022.12.20 |