728x90
반응형

1. 카이제곱분포

 

==> 카이제곱분포는 정규모집단의 모분산에 대한 통계적 추론에 사용

 

==> n개의 서로 독립인 표준정규확률변수 Z_1 ,Z_2 ,···· Z_n 에 대하여 확률변수의 확률분포를 자유도(degree of freedom) , d.f. = n인 카이제곱분포

 

카이제곱
카이제곱 확률변수V의 평균과 분산은 각각 자유도에의한 영향

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

 

Matplotlib 수학적 표현 사용하기 - Codetorial

6) 표준 함수 (Standard Functions)와 대형 기호 (Big Symbols) 아래 그림과 같이 Matplotlib에서 삼각함수 (sin, cos, tan 등), 극한 (lim), 최대 (max), 최소 (min) 등의 표현과 다양한 대형 연산자 기호를 사용할 수 있

codetorial.net

카이제곱분포표

 

==> 자유도 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)

카이제곱분포표(자유도 = 5)

x_0 = 11.07

 

출처 :  [쉽게 배우는 생활속의 통계학]  [북스힐 , 이재원] 

※혼자 공부 정리용

728x90
반응형

+ Recent posts