
0~10사이 X1,X2..Xn은 uniform하게 분배 되어있고, 독립임
X1의 평균은 뮤, 분산은 시그마제곱이라 했기에
Sn의 평균은 n* μ , 분산은 n*σ^2 (독립이기에...)
Zn을 통해 표준화 => 평균은0, 분산은1이 나오도록 했음
Zn의 CDF가 standard normal CDF로 수렴함
n=1일때,
S1 = X1, Z1 = (X1- μ )/ σ
10000개 samlping 한다는건 Z1을 만개 sampling한다는거...(X1이 결국은 10000개 필요)
cf)
n=2이면, Z2 = (X1+X2-2μ)/루트2 * σ
Z가 10000개 sampling할려면(X1,X2 총 20000개 sampling해야함)
그리고 이거를 각각 표준화 시켜야함
이거를 empirical CDF를 plot해야함
empirical PMF를 통해 CDF를 구하면됨

n이 커질수록 점프 구간이 작아짐(함수가 매끄러워짐) PDF가 CDF로 나타나게됨
standard normal cdf와 empCDF를 비교하는걸 plot해서 나타내보면...
import numpy as np
import matplotlib.pyplot as plt
import scipy.stats as stats
nvec = [1, 2, 5, 10, 100, 1000] # numbers of RVs to be averaged and standardized
K = 10000 # number of samples
# parameters for U[a,b]
a = 0.0
b = 10.0
mu = (a+b)/2 #mean of U[a,b]
sigma = np.sqrt((b-a)**2/12) #standard deviation of U[a,b]
X = np.random.uniform(a,b,K)#a~b구간 K개의 sample 생성(X1이 10000개 있어야하니깐)
Zn = (X-mu)/sigma
# empirical CDF
def ecdf(x):
xs = np.sort(x)
ys = np.arange(1, len(xs)+1)/float(len(xs))
return xs, ys
xs,ys = ecdf(Zn)
xf = np.linspace(-5,5,100)
F = stats.norm.cdf(xf) #values of standard noraml CDF
#n=1일때 empricial cdf와 normal cdf비교
plt.figure()
plt.plot(xs, ys, label='EmpCDF of Zn')
plt.plot(xf, F, label='Standard Normal CDF')
plt.xlabel('$z$')
plt.ylabel('Empirical CDF of Zn')
plt.legend()
plt.title('Xi: Uniform Rvs and n=1')
plt.grid(True)
plt.show()
for n in nvec:
# sum of K samples of uniform RV~U[a,b]
Sn = np.zeros(K) #0으로 구성된 배열생성
for i in range(n):
X = np.random.uniform(a,b,K)
Sn +=X
# calculate Z
Zn = (Sn - n * mu) / (sigma * np.sqrt(n))
xs,ys = ecdf(Zn)
# calculate empirical CDF (eCDF) of Z
ecdf
# plot
plt.figure()
plt.plot(xs, ys, label='EmpCDF of Zn')
plt.plot(xf, F, label='Standard Normal CDF')
plt.xlabel('$z$')
plt.ylabel('Empirical CDF of Zn')
plt.legend()
plt.title(f'Xi: Uniform Rvs and n={n}')
plt.grid(True)
plt.show()
#exponential RV
lamBda = 0.5
exp_mu = 1 / lamBda
exp_sigma = 1 /lamBda
for n in nvec:
# sum of K samples of uniform RV~U[a,b]
Sn = np.zeros(K) #0으로 구성된 배열생성
for i in range(n):
X = np.random.exponential(1/lamBda,K)
Sn +=X
# calculate Z
Zn = (Sn - n * exp_mu) / (exp_sigma * np.sqrt(n))
xs,ys = ecdf(Zn)
# calculate empirical CDF (eCDF) of Z
ecdf
# plot
plt.figure()
plt.plot(xs, ys, label='EmpCDF of Zn')
plt.plot(xf, F, label='Standard Normal CDF')
plt.xlabel('$z$')
plt.ylabel('Empirical CDF of Zn')
plt.legend()
plt.title(f'exp -> Xi: Uniform Rvs and n={n}')
plt.grid(True)
plt.show()
n=1일때






람다 = 0.5 일때, 지수확률변수를 가지는 경우도 구해보면





