728x90
반응형

1. 중심극한정리

 

==> 정규분포가 아닌 모집단 분포로부터 복원추출로 표본 선정시

 

==> 표본의 크기에 따라 표본평균의 표본분포가 변한다.

 

==> 모평균 뮤 , 모분산(o**2) 의 임의의 모집단으로부터 크기 n인 표본을 선정할 때 , n이 충분히 크면(n>=30) 표본평균 |X의 확률분포는 평균 뮤 , 분산 (o**2 / 루트(n))의 정규분포에 근사 

 

표본평균의 확률분포
표본평균의 정규분포화

==> 모집단의 크기가 충분하다

 

==> 모집단으로부터 비복원추출로 확률표본을 선정했을 때의 표본평균 |X의 표본분포 역시 복원추출로 표본을 선정했을 때의 표본분포와 동일

 

x = 1 , 2, 3, 4 인 모집단 분포 ==> 모집단 분포가 이산균등분포이므로

 

모평균 = 4+1 / 2 = 2.5 

모분산 = (16 - 1) /12 = 1.25

 

1) x = 1,2,3,4  n=2

a = list(itertools.product(np.arange(1,4) , repeat = 2))
print(a)
b = list(map(lambda x : np.mean(x) , a))
d = deque()
for i in zip(a,b):
    d.append(i)
c = sorted(list(set(list(map(lambda x : np.mean(x) , a)))))
print(b)
print(c)
print(d)

 

a = [(1, 1), (1, 2), (1, 3), (1, 4), (2, 1), (2, 2), (2, 3), (2, 4), (3, 1), (3, 2), (3, 3), (3, 4), (4, 1), (4, 2), (4, 3), (4, 4)]
b = [1.0, 1.5, 2.0, 2.5, 1.5, 2.0, 2.5, 3.0, 2.0, 2.5, 3.0, 3.5, 2.5, 3.0, 3.5, 4.0]
c = [1.0, 1.5, 2.0, 2.5, 3.0, 3.5, 4.0]
d= deque([((1, 1), 1.0), ((1, 2), 1.5), ((1, 3), 2.0), ((1, 4), 2.5), ((2, 1), 1.5), ((2, 2), 2.0), ((2, 3), 2.5), ((2, 4), 3.0), ((3, 1), 2.0), ((3, 2), 2.5), ((3, 3), 3.0), ((3, 4), 3.5), ((4, 1), 2.5), ((4, 2), 3.0), ((4, 3), 3.5), ((4, 4), 4.0)])

 

 

d = deque(sorted(d , key = lambda x : x[1]))
e =[[] for i in range(len(c))]
p=0
print(len(d))

==> 16

while len(d)>=2:
    if d[0][1] == d[1][1]:
        e[p].append(d[0][0])
        print(f'e: {e}')
        d.popleft()
        print(f'd: {d}')
    else:
        e[p].append(d[0][0])
        print(f'일치  x e: {e}')
        d.popleft()
        p+=1
e[p].append(d[-1][0])
e

[[(1, 1)], [(1, 2), (2, 1)], [(1, 3), (2, 2), (3, 1)], [(1, 4), (2, 3), (3, 2), (4, 1)], [(2, 4), (3, 3), (4, 2)], [(3, 4), (4, 3)], [(4, 4)]]

 

 

B = pd.DataFrame([e ,c]).T
B.rename(columns= {0 : '표본' , 1: '|X'} , inplace = True)
B
b_len = [len(i) for i in B['표본']]
b_len
B['표본길이'] = b_len
B['P(|X = x)'] = B['표본길이'] / len(a)
B['평균'] = B['|X'] * B['P(|X = x)']
B['분산'] = (B['|X']**2) * B['P(|X = x)']
B

a =  pd.DataFrame(B[:].sum(axis=0))

a = a.transpose()
col_name = a.columns.tolist()

for i in range(len(col_name[:-3])):
    a.iloc[0][i] = '-'
a.iloc[0][3] = '결과값'

a.iloc[0][5] = a.iloc[0][5] - a.iloc[0][4]**2

B = pd.concat([B ,a])
B

==> 평균 : 2.5 , 분산 : 0.625

 

x= C.columns.tolist()
print(x)
# x = np.arange(7)
# print(x)
y = C.iloc[0, :].tolist()
print(y)

fig = plt.figure(figsize=(10,8)) #plt는 matplotlib의 약자
fig.set_facecolor('white')

ax = sns.lineplot(x=x, y=y,
                  color='r', # 색상
                  linestyle='-', # 라인 스타일
                  marker='o') # 마커
#ax 변수에 저장
ax.set_title('n = 2 인 경우' , fontsize = 15)
ax.set_xlabel('X', fontsize = 15 , fontweight = 'bold')
ax.set_ylabel(r'P($\bar X = \bar x$)' , fontsize = 15 , fontweight = 'bold' , rotation = 0 , labelpad=25)
# ax.set_xticklabels(x, fontsize=15) #set_xticklabels(축별 이름 , font 크기)


ax.vlines(x= x, ymin= 0 , ymax= [y] , color = 'black' , linestyle ='dashed' , label ='{}'.format(2) , )

==> ax.set_xtickslabels() --> 하면 x축 값이 이상한 이유는 뭘까?

표본평균의 표본분포

 

 

2) x = 1,2,3,4  n=3

 

a = list(itertools.product(np.arange(1,5) , repeat = 3))
# print(a)
b = list(map(lambda x : np.mean(x) , a))
d = deque()
for i in zip(a,b):
    d.append(i)
c = sorted(list(set(list(map(lambda x : np.mean(x) , a)))))


d = deque(sorted(d , key = lambda x : x[1]))
e =[[] for i in range(len(c))]
# print(type(d))
# print(len(a))
p=0

while len(d)>=2:
    if d[0][1] == d[1][1]:
        e[p].append(d[0][0])
        # print(f'e: {e}')
        d.popleft()
        # print(f'd: {d}')
    else:
        e[p].append(d[0][0])
        # print(f'일치  x e: {e}')
        d.popleft()
        p+=1
e[p].append(d[-1][0])

B = pd.DataFrame([e ,c]).T
B.rename(columns= {0 : '표본' , 1: '|X'} , inplace = True)
B
b_len = [len(i) for i in B['표본']]
b_len
B['표본길이'] = b_len
B['P(|X = x)'] = B['표본길이'] / len(a)
B['평균'] = B['|X'] * B['P(|X = x)']
B['분산'] = (B['|X']**2) * B['P(|X = x)']


a =  pd.DataFrame(B[:].sum(axis=0))
# a.transpose()
a = a.transpose()
col_name = a.columns.tolist()

for i in range(len(col_name[:-3])):
    a.iloc[0][i] = '-'
a.iloc[0][3] = '결과값'

a.iloc[0][5] = a.iloc[0][5] - a.iloc[0][4]**2

B = pd.concat([B ,a])
B

C = B.iloc[ :-1 , [1, 3]]
C = C.set_index('|X')
C = C.T
C

x= C.columns.tolist()
print(x)
# x = np.arange(7)
# print(x)
y = C.iloc[0, :].tolist()
print(y)

fig = plt.figure(figsize=(10,8)) #plt는 matplotlib의 약자
fig.set_facecolor('white')

ax = sns.lineplot(x=x, y=y,
                  color='r', # 색상
                  linestyle='-', # 라인 스타일
                  marker='o') # 마커
#ax 변수에 저장
ax.set_title('n = 3 인 경우' , fontsize = 15)
ax.set_xlabel('X', fontsize = 15 , fontweight = 'bold')
ax.set_ylabel(r'P($\bar X = \bar x$)' , fontsize = 15 , fontweight = 'bold' , rotation = 0 , labelpad=25)
# ax.set_xticklabels(x, fontsize=15) #set_xticklabels(축별 이름 , font 크기)


ax.vlines(x= x, ymin= 0 , ymax= [y] , color = 'black' , linestyle ='dashed' , label ='{}'.format(2) , )

표본평균의 표본분포

3) x = 1,2,3,4  n=4

 

표본평균의 표본분포

4) x = 1,2,3,4  n=5

 

표본평균의 표본분포

==> n이 충분히 크면 평균 뮤 , 분산 : (모분산/n) 정규분포에 근사하게 된다!!!!

 

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

※혼자 공부 정리용

728x90
반응형

+ Recent posts