전체 글

728x90
반응형

EX-01) 남성의 평균 결혼연령 32세 , 분산 8.41세 , 36명 임의로 선정하여 표본조사

 

1> 평균 결혼 연령의 근사 표본분포

 

n = 36 >= 30 이므로 중심극한 정리에 의하여 평균결혼 연령은 |X ~ N(32 , 8.41/ 36)

 

 

2> 평균 결혼 연령이 31세 이상 33세 이하일 근사 확률

 

P(31<=|X<=33) = P( (31-32)/루트(8.41/36) <= Z <= 33-32 / 루트(8.41/36) ) = (P(Z<= 1/루트(8.41/36)) - P(Z<=0) ) * 2

 

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 인 정규분포 플롯

z_1 = round((33-32) / math.sqrt(8.41/36) ,2)
# z_2 = round((21.5-20) / 0.833 , 2)

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 인곳 , 색깔



area =  (stats.norm.cdf((z_1)) - stats.norm.cdf(0)) * 2
ax.text(1.71 , .17, f'P({-z_1}<=Z<={z_1}) : {round(area,4)}',fontsize=15)
plt.annotate('' , xy=(0, .17), xytext=(1.7 , .17)  , 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))

중심극한정리 표본분포 그래프

P(31<=|X<=33) = 0.9615

 

 

3>평균결혼 연령이 33.5세 이상일 근사 확률

 

P(|X>=33.5) = 1 - P(Z<= (33.5 - 32) / 루트(8.41/36) ) = P(3.1<=Z)

 

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 인 정규분포 플롯

z_1 = round((33.5-32) / math.sqrt(8.41/36) ,2)
# z_2 = round((21.5-20) / 0.833 , 2)

ax.fill_between(x, stats.norm.pdf(x, loc=0 , scale =1) , 0 , where =  (x>= z_1) , facecolor = 'skyblue') # x값 , y값 , 0 , x<=0 인곳 , 색깔



area =  1- (stats.norm.cdf((z_1)))
ax.text(3.4, .04, f'P({z_1}<=Z) : {round(area,5)}',fontsize=15)
plt.annotate('' , xy=(3.6, .001), xytext=(3.6 , .037)  , 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))

중심극한정리 표본분포 그래프

EX-02) 한달동안 사용한 금액은 평균 185만원 , 모분산 900만원 , 카드 소지자 중에서 36명 선정

 

1> 평균 사용 금액의 근사 표본분포

 

|X ~ N(185 , 900/36)

 

2> 평균 사용 금액이 175만원 이상, 200만원 이하일 근사 확률

 

P(176<=|X<=200) = P( (176-185) / 루트(900/36) <= Z <= (200-185)/루트(900/36) ) = P(Z <= (200-185)/루트(900/36) ) - P( (176-185) / 루트(900/36) ) = P(-1.8<= Z<= 3.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 인 정규분포 플롯

z_1 = round((176-185) / math.sqrt(900/36) ,2)
z_2 = round((200-185) / math.sqrt(900/36) , 2)

ax.fill_between(x, stats.norm.pdf(x, loc=0 , scale =1) , 0 , where = (x<=z_2) & (x>= z_1) , facecolor = 'skyblue') # x값 , y값 , 0 , x<=0 인곳 , 색깔



area =  (stats.norm.cdf((z_2)) - stats.norm.cdf(z_1))
ax.text(1.71 , .17, f'P({z_1}<=Z<={z_2}) : {round(area,4)}',fontsize=15)
plt.annotate('' , xy=(0, .17), xytext=(1.7 , .17)  , 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_2, ymin= 0 , ymax= stats.norm.pdf(z_2, loc=0 , scale =1) , color = 'black' , linestyle ='solid' , label ='{}'.format(2))

중심극한정리 표본분포 그래프

P(-1.8<= Z<= 3.0) = 0.9627

 

 

3> 평균 사용 금액이 173만 원 이하일 근사확률

 

P(|X<=173) = P(Z<=  (173-185) / 루트(900/36) ) = P(-2.4 <=Z ) = 0.0082

 

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 인 정규분포 플롯

z_1 = round((173-185) / math.sqrt(900/36) ,2)
# z_2 = round((21.5-20) / 0.833 , 2)

ax.fill_between(x, stats.norm.pdf(x, loc=0 , scale =1) , 0 , where =  (x<= z_1) , facecolor = 'skyblue') # x값 , y값 , 0 , x<=0 인곳 , 색깔



area =  (stats.norm.cdf((z_1)))
ax.text(-2.4, .04, f'P({z_1}<=Z) : {round(area,5)}',fontsize=15)
plt.annotate('' , xy=(-2.6, .001), xytext=(-2.6 , .037)  , 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))

중심극한정리 표본분포 그래프

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

※혼자 공부 정리용

728x90
반응형
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
반응형
728x90
반응형

1. 표본평균의 표본분포(모분산을 아는 경우)

 

 

표본평균에 대한 표본분포
표본평균에 대한 표본분포

==> 표본평균에 대한 표본분포는 정규분포를 따른다.

 

 

 

EX-01)  모평균 100 , 모분산 9인 정규모집단으로부터 크기 25인 표본을 임의로 추출

 

1> 표본평균 |X의 표본분포

 

뮤_|X = 100 , 분산_|X = 9/25 = 0.36

 

|X ~ N(100, 0.6**2)

 

2> 표본평균이 99이상, 101이하일 확률

 

https://knowallworld.tistory.com/254

 

정규분포의 표준정규분포로의 변환★기초통계학-[Chapter06 - 연속확률분포-03]

1. 정규분포와 표준정규분포의 관계 =========================== ==> P(z_a =2.5 , facecolor = 'skyblue') # x값 , y값 , 0 , x= 2.5) = P(Z 박테리아의 수가 75마리 이상 103마리 이하일 확률 P(75

knowallworld.tistory.com

==> 표준화 방법

 

(99-100) / 0.6 = -1.67

(101-100) /0.6 = 1.67

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 인 정규분포 플롯


ax.fill_between(x, stats.norm.pdf(x, loc=0 , scale =1) , 0 , where = (x<=1.67) & (x>=-1.67) , facecolor = 'skyblue') # x값 , y값 , 0 , x<=0 인곳 , 색깔



area =  (stats.norm.cdf(1.67) - stats.norm.cdf(0)) * 2
ax.text(1.71 , .17, f'P(-1.67<=Z<=1.67) : {round(area,4)}',fontsize=15)
plt.annotate('' , xy=(0, .17), xytext=(1.7 , .17)  , arrowprops = dict(facecolor = 'black'))
ax.vlines(x= 1.67, ymin= 0 , ymax= stats.norm.pdf(1.67, loc=0 , scale =1) , color = 'black' , linestyle ='solid' , label ='{}'.format(2))
ax.vlines(x= -1.67, ymin= 0 , ymax= stats.norm.pdf(-1.67, loc=0 , scale =1) , color = 'black' , linestyle ='solid' , label ='{}'.format(2))

P(-1.67 <= Z <= 1.67) = (P(Z<=1.67)  - P(Z<=0) ) * 2= 0.9051

 

표본평균의 정규분포

3> 표본평균이 모평균보다 1.5이상 더 클 확률

 

모평균 = 100

 

표본평균 + 1.5 이상 클 확률 = P(|X >= 100+1.5) 

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 인 정규분포 플롯


ax.fill_between(x, stats.norm.pdf(x, loc=0 , scale =1) , 0 , where = (x>=2.5)  , facecolor = 'skyblue') # x값 , y값 , 0 , x<=0 인곳 , 색깔



area =  (1-  stats.norm.cdf(2.5) )
ax.text(1.71 , .11, f'P(Z>=2.5) : {round(area,4)}',fontsize=15)
plt.annotate('' , xy=(2.6, .007), xytext=(2.6 , .1)  , arrowprops = dict(facecolor = 'black'))
ax.vlines(x= 2.5, ymin= 0 , ymax= stats.norm.pdf(2.5, loc=0 , scale =1) , color = 'black' , linestyle ='solid' , label ='{}'.format(2))

 

표본평균의 정규분포

 

Z = (101.5 - 100) / 0.6 = 2.5

 

1 - P(Z<=2.5) = 0.0062

 

 

EX-02)  모평균 20 , 모분산 25인 정규모집단에서 크기 36인 표본을 임의로 추출

 

1> 표본평균 |X의 표본분포

 

뮤_|X = 20 , 분산_X = 25/36

 

|X ~ N(20 , 0.833**2)

 

 

2> 표본평균이 19.4이상 , 21.8 이하일 확률

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 인 정규분포 플롯

z_1 = round((19.4-20) / 0.833 ,2)
z_2 = round((21.8-20) / 0.833 , 2)

ax.fill_between(x, stats.norm.pdf(x, loc=0 , scale =1) , 0 , where = (x<=z_2) & (x>=z_1) , facecolor = 'skyblue') # x값 , y값 , 0 , x<=0 인곳 , 색깔



area =  (stats.norm.cdf((z_2)) - stats.norm.cdf(z_1))
ax.text(1.71 , .17, f'P({z_1}<=Z<={z_2}) : {round(area,4)}',fontsize=15)
plt.annotate('' , xy=(0, .17), xytext=(1.7 , .17)  , arrowprops = dict(facecolor = 'black'))
ax.vlines(x= z_2, ymin= 0 , ymax= stats.norm.pdf(z_2, 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))

표본평균의 정규분포

P(19.4 <= |X <= 21.8) = P(19.4-20 / 0.833 <=Z <= 21.8-20 / 0.833) = P(-0.72<= Z<= 2.16) = 0.7489

 

 

3> 표본평균과 모평균의 차의 절대값이 1.5보다 클 확률

 

모평균 = 20

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 인 정규분포 플롯

z_1 = round((18.5-20) / 0.833 ,2)
z_2 = round((21.5-20) / 0.833 , 2)

ax.fill_between(x, stats.norm.pdf(x, loc=0 , scale =1) , 0 , where = (x<=z_2) & (x>=z_1) , facecolor = 'skyblue') # x값 , y값 , 0 , x<=0 인곳 , 색깔



area =  (stats.norm.cdf((z_2)) - stats.norm.cdf(z_1))
ax.text(1.71 , .17, f'P({z_1}<=Z<={z_2}) : {round(area,4)}',fontsize=15)
plt.annotate('' , xy=(0, .17), xytext=(1.7 , .17)  , arrowprops = dict(facecolor = 'black'))
ax.vlines(x= z_2, ymin= 0 , ymax= stats.norm.pdf(z_2, 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))

표본평균의 정규분포

P(20 -1.5<=|X < = 20 + 1.5) = P(18.5 - 20 / 0.833 < Z <= 21.5 / 0.833) = P(-1.8<= Z <= 1.8) = 0.9281

 

 

2. 표본평균의 표본분포(모분산을 모르는 경우)

 

==> 대부분의 모집단은 모분산 또는 모표준편차가 알려지지 않음. ==> 표본평균이 정규분포를 따른다고 할 수 없다.

 

==> |X의 표준화 확률변수 Z는 자유도가 n-1인 t-분포를 따른다. 

 

==> 모분산이 알려지지 않은 정규모집단에서 크기 n인 표본을 선정할때, 표본평균 |X의 표준화 확률변수를 T로 나타낸다.

 

https://knowallworld.tistory.com/259

 

★scipy.stats.t(자유도).ppf()★t-분포★기초통계학-[Chapter06 - 연속확률분포-07]

1. T-분포(Chi-square Distribution) ==> T-분포는 모분산이 알려지지 않은 정규모집단의 모평균에 대한 추론 ==>서로 독립인 표준정규화확률변수 Z와 자유도 n인 카이제곱 확률변수 V에 대하여 정의 ==> T ~

knowallworld.tistory.com

==> T-분포

 

표준화 확률변수 T

 

EX-03)  평균이 77점인 정규분포 따른다. 신입생 9명 선정하여 표본조사

 

1> 표본평균에 대한 표본분포

 

뮤 = 77 , n = 9 ==> 모분산을 모르는 정규분포

 

==> 표본평균에 대한 표본분포는 자유도 (9-1)인 t-분포를 따른다. 

 

T = (|X - 77) / (s/3) ~ t(8)

 

 

 

2> 무작위로 얻은 표본 [72 ,86 ,75 , 83 ,67 ,77 ,82 ,79 ,88] 일때 표본평균과 표본표준편차

a = [72 ,86 ,75 , 83 ,67 ,77 ,82 ,79 ,88]

print(np.mean(a))

print(np.std(a , ddof= 1))

==> ddof = 1 이 표본에 대한 계산

 

|x = (72+86 ········ + 88) / 9 ~ 78.78

 

s = 6.778

 

 

3> [72 ,86 ,75 , 83 ,67 ,77 ,82 ,79 ,88]의 표본을 이용하여 표본평균이 상위 5%인 점수를 구하라.

 

P(|X >= x_0) = 0.05, T = (|X - 77) / (6.778/3) ~ t(8) 

 

P(|X>= x_0) = P( (|X - 77) / (6.778/3) >= (x_0 - 77) / (6.778/3)) = P(T>=(x_0 - 77) / (6.778/3) ) = 0.05

 



X = np.arange(-5,5 , .01)

fig = plt.figure(figsize=(15,8))
dof_2 = [8] #자유도

ax = sns.lineplot(x = X , y=scipy.stats.t(dof_2).pdf(X) )
t_r =  scipy.stats.t(dof_2).ppf(1- 0.05)
print(t_r)



ax.fill_between(X, scipy.stats.t(dof_2).pdf(X) , 0 , where = (X>=t_r) , facecolor = 'skyblue') # x값 , y값 , 0 , X조건 인곳 , 색깔

ax.vlines(x = t_r ,ymin=0 , ymax= scipy.stats.t(dof_2).pdf(t_r) , colors = 'black')

plt.annotate('' , xy=(3.0, .007), xytext=(2.5 , .16)  , arrowprops = dict(facecolor = 'black'))

ax.text(1.71 , .17, r'$P(T>t_{0.05})$' + f'= {0.05}',fontsize=15)


ax.text(t_r - 1 , 0.02 , r'$t_r$' + f'= {t_r}'  , fontsize = 13)


b = ['t-(n={})'.format(i) for i in dof_2]
plt.legend(b , fontsize = 15)

자유도 8인 t-분포표에서 상위 5%인 95% 백분위수가 t_0.05 = 1.86

t-분포

x_0 = sympy.Symbol('k')
sol_k = ((x_0 - 77) / (6.778/3))  - 1.86
k_sol = solve(sol_k)
print(k_sol)

==> SOLVE () 함수는 0값을 만들어 놓아야 한다.

 

==> 81.20235

 

 

 

EX-04)  신차의 연비가 평균 15km인 정규분포를 따른다. 크기 10인 표본을 임의로 추출하여 표본조사

 

1> 표본평균에 대한 표본분포

 

뮤 = 15 , n = 10 ==> 모분산을 모르는 정규분포

 

==> 표본평균에 대한 표본분포는 자유도 (10-1)인 t-분포를 따른다. 

 

T = (|X - 15) / (s/루트10) ~ t(9)

 

 

2> 무작위로 얻은 표본 [15.1 ,14.6 ,16.4 , 15.5 ,14.2 ,14.4 ,14.6 ,16.0 ,16.2 , 16.7] 일때 표본평균과 표본표준편차

 

a = [15.1 ,14.6 ,16.4 , 15.5 ,14.2 ,14.4 ,14.6 ,16.0 ,16.2 , 16.7]

print(np.mean(a))

print(np.std(a , ddof= 1))

뮤_|X = 15.37

s_|x = 0.913

 

 

3> [15.1 ,14.6 ,16.4 , 15.5 ,14.2 ,14.4 ,14.6 ,16.0 ,16.2 , 16.7]의 표본평균이 상위 10%인 연비를 구하라.

 

P(|X >= x_0) = 0.1, T = (|X - 15) / (0.913/3) ~ t(9) 

 

P(|X>= x_0) = P( (|X - 15) / (0.913/3) >= (x_0 - 15) / (0.913/3)) = P(T>=(x_0 - 77) / (0.913/3) ) = 0.1

 



X = np.arange(-5,5 , .01)

fig = plt.figure(figsize=(15,8))
dof_2 = [9] #자유도

ax = sns.lineplot(x = X , y=scipy.stats.t(dof_2).pdf(X) )
t_r =  scipy.stats.t(dof_2).ppf(1- 0.1)
print(t_r)



ax.fill_between(X, scipy.stats.t(dof_2).pdf(X) , 0 , where = (X>=t_r) , facecolor = 'skyblue') # x값 , y값 , 0 , X조건 인곳 , 색깔

ax.vlines(x = t_r ,ymin=0 , ymax= scipy.stats.t(dof_2).pdf(t_r) , colors = 'black')

plt.annotate('' , xy=(2.0, .007), xytext=(2.5 , .16)  , arrowprops = dict(facecolor = 'black'))

ax.text(1.71 , .17, r'$P(T>t_{0.1})$' + f'= {0.1}',fontsize=15)


ax.text(t_r - 1 , 0.02 , r'$t_r$' + f'= {t_r}'  , fontsize = 13)


b = ['t-(n={})'.format(i) for i in dof_2]
plt.legend(b , fontsize = 15)

t-분포

x_0 = sympy.Symbol('k')
sol_k = (x_0 - 15) / (0.913/3)   - 1.383
k_sol = solve(sol_k)
print(k_sol)

==> 15.4208

 

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

※혼자 공부 정리용

728x90
반응형
728x90
반응형

1. 모비율(Population Proportion)

 

==> 모집단을 형성하고 있는 모든 대상에 대한 특정한 성질을 갖고 있는 대상의 비율(p)를 나타낸다.

 

모비율

2. 표본비율(Sample Proportion)

==> 확률분포를 이루는 대상에 대한 특정한 성질을 갖는 대상의 비율

 

표본비율

 

EX-01) 20세 이상 성인 245명 대상으로 136명이 프로축구 좋아한다. 프로축구를 좋아하는 성인의 표본비율

 

<p = 136/ 245 = 0.5551

 

EX-02) 1500명 중에서 250명 임의 선정 , 11명이 자동차 갖고 있다. 자동차 소유한 사람의 표본비율

 

<p = 11/ 250 = 0.044

 

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

※혼자 공부 정리용

728x90
반응형
728x90
반응형

1) 모집단 분포

 

1. 모집단 분포(Population Distribution)

 

==> 실제 현장에서 모집단의 모든 자료값을 구하는 것은 어렵다.

 

==> 표본을 선정하여 모집단의 특성을 과학적으로 추론 ==> 추측 통계학

 

==> 어떤 통계적 실험 결과인 모집단의 자료가 가지는 확률분포

 

 

2) 표본추출 방법

 

1. 표본추출 방법_ 단순임의 추출법(Simple Random Sampling)

 

==> 추측통계학은 표본을 기초로 하여 알려지지 않은 모수를 추론

 

==> 공정하고 객관적인 방법으로 표본을 선정해야만 함.

 

 

 

단순임의 추출법 ==> 모집단을 형성하고 있는 대상들의 선정 가능성이 동등하도록 추출

 

==>but. 시간이 부족한 환경에서는 부적당하다.

 

EX) 1000명의 평균 점수를 추론하기 위해 30명으로 구성된 표본을 선정 ==> 동일한 크기의 메모지에 각자의 학번 기재이후 30 장의 메모지를 꺼낸다.

2. 표본추출 방법_ 계통 추출법(Systematic Sampling)

 

==> 각 모집단의 각 대상에 일련번호 부여하고, 1,2,3,....n 중에서 어느 하나를 무작위로 선정한 이후로 k씩 커지는 순서로 표본 선정

 

EX) 1000개의 지점별로 판매한 평균 수입 추정 ==> 100개의 지점 선정

 

==> 100개의 매출 장부 선정하는 과정의 시간 낭비 발생

 

==> 0~9사이의 임의의 수를 선정 이후 10씩 커지는 숫자 선정 ==> K씩 커지도록 표본 선정

3. 표본추출 방법_ 층화 추출법(Stratified Sampling)

 

==> 모집단의 특성에 따라 층화된 곳에서 각 층마다 표본을 무작위로 추출

 

 

EX) 정당의 지지율에 대한 표본 추출 ==> 전국을 각 권역별로 할당된 수만큼 표본 선정

 

 

4. 표본추출 방법_ 집락 추출법(Cluster Sampling)

 

==> 모집단을 몇 개의 조사 단위인 집락으로 구분, 집락을 추출단위로 표본 추출

 

EX) 서울시 거주 가구의 월평균 소득 조사

==> 25개의 행정구역(집락)으로 분할 ==> 5개 구를 무작위로 선정하여 표본 추출

 

 

3) 표본분포

 

1. 표본의 크기(Sample Size) , 표본평균(Sample mean) , 표본분산(Sample Variance)

==> 모집단으로부터 표본 추출 ==> 표본으로 선정된 대상의 수

 

==> 선정된 표본의 평균과 분산 ==> 표본평균 , 표본분산

 

2. 표본분포(Sampling Distribution)

 

==> 모집단에서 크기 n인 표본을 반복하여 선정할 때 얻어지는 통계량의 확률분포

https://knowallworld.tistory.com/214

 

★DDOF = 1★모/표본분산 , 모/표본표준편차★평균편차★기초통계학-[Chapter03 - 04]

산포의 척도 ==> 평균깊이가 1.2M인 강을 키가 1.7M인 사람이 걸어서 무사히 건널 수 있는지에 대해 생각 ==> 강의 평균 깊이가 1.2M 라는 뜻은 1.2M보다 작은 부분도 있지만 1.2M보다 깊은 곳도 있을 수

knowallworld.tistory.com

==> 참고

표본평균
표본분산
표본표준편차

 

EX-01) 1,2,3,4 의 번호가 적힌 공을 주머니에 넣고 복원추출에 의해 임의로 2개를 추출하여 표본 선정==> 각각의 공이 나올 확률을 동일하게 1/4

 

1> 표본으로 나올 수 있는 모든 경우의 수

 

print(list(itertools.permutations(np.arange(1,5) ,  2)))

[(1, 2), (1, 3), (1, 4), (2, 1), (2, 3), (2, 4), (3, 1), (3, 2), (3, 4), (4, 1), (4, 2), (4, 3)] ==>12

 

==> 순열

 

print(list(itertools.product(np.arange(1,5) , repeat = 2)))

[(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)]==>16

 

==> 중복순열

 

==> 복원추출이므로 중복순열 해야한다!

https://knowallworld.tistory.com/230

 

복원, 비복원 추출★SET활용하여 차집합,여집합 가능!★기초통계학-[Chapter04 - 경우의 수-03]

1. 복원추출(Replacement) ==> 표본공간에서 표본점을 선택할 때 , 동일한 표본점이 1번이상 반복하여 추출되도록 허용 EX) 1~5까지의 숫자가 적힌 공이 들어 있는 주머니에서 차례대로 2개의 공 꺼내기

knowallworld.tistory.com

 

2> 표본평균

 

a = list(itertools.product(np.arange(1,5) , repeat = 2))
a = sorted(list(set(list(map(lambda x : np.mean(x) , a)))))
a

==> list(map(lambda) 활용

[1.0, 1.5, 2.0, 2.5, 3.0, 3.5, 4.0]

 

3> 표본평균 |X의 확률 분포

 

a = list(itertools.product(np.arange(1,5) , repeat = 2))

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)

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 ==> zip으로 나열 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]))
d


print(d)

==> 요소별 평균의 순서로 sort

 

deque([((1, 1), 1.0), ((1, 2), 1.5), ((2, 1), 1.5), ((1, 3), 2.0), ((2, 2), 2.0), ((3, 1), 2.0), ((1, 4), 2.5), ((2, 3), 2.5), ((3, 2), 2.5), ((4, 1), 2.5), ((2, 4), 3.0), ((3, 3), 3.0), ((4, 2), 3.0), ((3, 4), 3.5), ((4, 3), 3.5), ((4, 4), 4.0)])

 

e =[[] for i in range(len(c))]
# print(type(d))
# print(len(a))
p=0
print(len(d))

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

==> 알고리즘 이상하다. 

 

e ==> 2중 리스트 생성

 

d ==> deque이므로 popleft() 사용 가능

 

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

4> 표본평균 |X의 평균과 분산

 

B['평균'] = B['|X'] * B['P(|X = x)']
B

MEANS = np.sum(B['평균'])
MEANS

==> 2.5

 

 

B['분산'] = (B['|X']**2) * B['P(|X = x)']
B

VARS = np.sum(B['분산'])
VARS

VARS = 6.875

print(VARS - math.pow(MEANS, 2))

==> 6.875 - (2.5)**2 = 0.625

print(f'모분산 var : {np.var(b ,ddof =0)}')
print(f'표본분산 var : {np.var(b ,ddof =1)}')

모분산 var : 0.628
표본분산 var : 0.666666==> 틀리다?!

 

 

5> 모평균의 평균과 분산

 

https://knowallworld.tistory.com/245

 

★초기하분포★기하분포★이산균등분포★기초통계학-[Chapter05 - 이산확률분포-06]

1. 이산균등분포(Discrete Uniform Distribution) 1> 동전을 한 번 던져서 앞면이 나온 횟수를 X ==> p(x) = 1/2 , x= 0 ,1 2> 주사위를 한 번 던질 때 나온 눈의 수를 확률 변수 X라 하면 ==> p(x) = 1/6 , x =1 , 2, 3, 4, 5,

knowallworld.tistory.com

x = 1 , 2, 3, 4

 

평균 = (1+4)/2 = 2.5

분산 = (4**2 -1) /12 = 1.25 ==> 이산균등분포에선 np.var() 사용하면 안된다 ==> 표본분산이 아닌 모분산 

 

==> because 다 뽑았기 때문이다!!!!!!

 

 

EX-02) 1, 2, 3 의 번호가 적힌 공을 주머니에 넣고 복원추출에 의해 임의로 2개를 추출하여 표본, 각각의 공이 나올 확률은 1/3 이다.

 

1> 표본으로 나올 수 있는 모든 경우의 수

a = list(itertools.product(np.arange(1,4) , repeat = 2))
print(a)

 

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

 

2> 표본의 평균

a = list(itertools.product(np.arange(1,5) , repeat = 2))

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)

b = [1.0, 1.5, 2.0, 1.5, 2.0, 2.5, 2.0, 2.5, 3.0]

c = [1.0, 1.5, 2.0, 2.5, 3.0]

 

3> 표본평균 |X의 확률분포를 구하라.

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

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)], [(2, 3), (3, 2)], [(3, 3)]]

 

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

4> 표본평균 |X의 평균과 분산을 구하라.

 

B['평균'] = B['|X'] * B['P(|X = x)']
B
MEANS = np.sum(B['평균'])
MEANS

==> 2.0

 

B['분산'] = (B['|X']**2) * B['P(|X = x)']
B

==> 0.333

b

==> [1.0, 1.5, 2.0, 1.5, 2.0, 2.5, 2.0, 2.5, 3.0]

print(f'모분산 var : {np.var(b ,ddof =1)}')
print(f'표본분산 var : {np.var(b ,ddof =0)}')

모분산 var : 0.375
표본분산 var : 0.3333333333333333

 

5> 모집단의 평균과 분산을 구하라.

 

모평균 = 1+3 /2  = 2

모분산 = 3**2 - 1 / 12 = 8/12 = 2/3

 

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

※혼자 공부 정리용

728x90
반응형
728x90
반응형

https://school.programmers.co.kr/learn/courses/30/lessons/59044

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

728x90
반응형
728x90
반응형

https://school.programmers.co.kr/learn/courses/30/lessons/59043

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

VERSION 2.0

SELECT A.ANIMAL_ID , A.NAME FROM ANIMAL_INS A
LEFT JOIN ANIMAL_OUTS B
ON A.ANIMAL_ID = B.ANIMAL_ID
WHERE  TO_NUMBER(B.DATETIME - A.DATETIME) <0
ORDER BY  A.DATETIME ASC

==> A.DATETIME ASC ==> 오래된 순서대로

==> ORACLE에는 DATETIME 차이에 따른 숫자표현 없다!!

 

VERSION 1.0

SELECT A.ANIMAL_ID, A.NAME   FROM 
(SELECT ANIMAL_ID , NAME ,DATETIME FROM ANIMAL_INS) A LEFT JOIN 
(SELECT ANIMAL_ID ,NAME, DATETIME FROM ANIMAL_OUTS) B ON A.ANIMAL_ID = B.ANIMAL_ID
WHERE TO_NUMBER(B.DATETIME - A.DATETIME)<0
ORDER BY A.DATETIME
728x90
반응형
728x90
반응형

https://school.programmers.co.kr/learn/courses/30/lessons/59042

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

VERSION 3.0

SELECT ANIMAL_ID , NAME FROM ANIMAL_OUTS
WHERE ANIMAL_ID NOT IN 
(SELECT A.ANIMAL_ID FROM ANIMAL_INS A
LEFT JOIN ANIMAL_OUTS B
ON A.ANIMAL_ID = B.ANIMAL_ID)
ORDER BY ANIMAL_ID

==> LEFT JOIN 사용 해서 NOT IN 사용하기

 

VERSION 2.0

SELECT A.ANIMAL_ID , A.NAME FROM ANIMAL_OUTS A

LEFT JOIN ANIMAL_INS B

ON A.ANIMAL_ID = B.ANIMAL_ID

WHERE B.ANIMAL_ID IS NULL

ORDER BY A.ANIMAL_ID

 

VERSION 1.0

SELECT ANIMAL_ID , NAME FROM ANIMAL_OUTS
WHERE ANIMAL_ID NOT IN
(SELECT A.ANIMAL_ID FROM
(SELECT ANIMAL_ID  FROM ANIMAL_INS) A LEFT JOIN
(SELECT ANIMAL_ID  FROM ANIMAL_OUTS) B ON A.ANIMAL_ID = B.ANIMAL_ID)
ORDER BY ANIMAL_ID , NAME

 

 

 

==> 이게 더 이해가 잘가는듯?

728x90
반응형

+ Recent posts