전체 글
-
★중심극한정리★기초통계학-[모집단 분포와 표본분포 -05]2023.01.06
-
★lineplot★중심극한정리★기초통계학-[모집단 분포와 표본분포 -04]2023.01.05
-
★모비율★표본비율★기초통계학-[모집단 분포와 표본분포 -02]2023.01.05
★중심극한정리★기초통계학-[모집단 분포와 표본분포 -05]
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))
출처 : [쉽게 배우는 생활속의 통계학] [북스힐 , 이재원]
※혼자 공부 정리용
'기초통계 > 표본분포' 카테고리의 다른 글
이항분포에 따른 정규분포의 표준정규분포화★표본비율의 표본분포★기초통계학-[모집단 분포와 표본분포 -07] (0) | 2023.01.06 |
---|---|
★표본분산 S**2 , 관찰 표본분산 s_0**2★카이제곱분포표★모분산의 표본분포★기초통계학-[모집단 분포와 표본분포 -06] (0) | 2023.01.06 |
★lineplot★중심극한정리★기초통계학-[모집단 분포와 표본분포 -04] (0) | 2023.01.05 |
★모분산을 모를땐 t-분포!★stats.norm.cdf()★모분산을 알때/모를때 표본평균의 표본분포★일표본★표본비율★기초통계학-[모집단 분포와 표본분포 -03] (0) | 2023.01.05 |
★모비율★표본비율★기초통계학-[모집단 분포와 표본분포 -02] (0) | 2023.01.05 |
★lineplot★중심극한정리★기초통계학-[모집단 분포와 표본분포 -04]
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) 정규분포에 근사하게 된다!!!!
출처 : [쉽게 배우는 생활속의 통계학] [북스힐 , 이재원]
※혼자 공부 정리용
'기초통계 > 표본분포' 카테고리의 다른 글
★표본분산 S**2 , 관찰 표본분산 s_0**2★카이제곱분포표★모분산의 표본분포★기초통계학-[모집단 분포와 표본분포 -06] (0) | 2023.01.06 |
---|---|
★중심극한정리★기초통계학-[모집단 분포와 표본분포 -05] (0) | 2023.01.06 |
★모분산을 모를땐 t-분포!★stats.norm.cdf()★모분산을 알때/모를때 표본평균의 표본분포★일표본★표본비율★기초통계학-[모집단 분포와 표본분포 -03] (0) | 2023.01.05 |
★모비율★표본비율★기초통계학-[모집단 분포와 표본분포 -02] (0) | 2023.01.05 |
★표본분포★이산균등분포★표본추출 방법★모집단 분포★기초통계학-[모집단 분포와 표본분포 -01] (1) | 2023.01.05 |
★모분산을 모를땐 t-분포!★stats.norm.cdf()★모분산을 알때/모를때 표본평균의 표본분포★일표본★표본비율★기초통계학-[모집단 분포와 표본분포 -03]
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
==> 표준화 방법
(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
==> 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
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)
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
출처 : [쉽게 배우는 생활속의 통계학] [북스힐 , 이재원]
※혼자 공부 정리용
'기초통계 > 표본분포' 카테고리의 다른 글
★표본분산 S**2 , 관찰 표본분산 s_0**2★카이제곱분포표★모분산의 표본분포★기초통계학-[모집단 분포와 표본분포 -06] (0) | 2023.01.06 |
---|---|
★중심극한정리★기초통계학-[모집단 분포와 표본분포 -05] (0) | 2023.01.06 |
★lineplot★중심극한정리★기초통계학-[모집단 분포와 표본분포 -04] (0) | 2023.01.05 |
★모비율★표본비율★기초통계학-[모집단 분포와 표본분포 -02] (0) | 2023.01.05 |
★표본분포★이산균등분포★표본추출 방법★모집단 분포★기초통계학-[모집단 분포와 표본분포 -01] (1) | 2023.01.05 |
★모비율★표본비율★기초통계학-[모집단 분포와 표본분포 -02]
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
출처 : [쉽게 배우는 생활속의 통계학] [북스힐 , 이재원]
※혼자 공부 정리용
'기초통계 > 표본분포' 카테고리의 다른 글
★표본분산 S**2 , 관찰 표본분산 s_0**2★카이제곱분포표★모분산의 표본분포★기초통계학-[모집단 분포와 표본분포 -06] (0) | 2023.01.06 |
---|---|
★중심극한정리★기초통계학-[모집단 분포와 표본분포 -05] (0) | 2023.01.06 |
★lineplot★중심극한정리★기초통계학-[모집단 분포와 표본분포 -04] (0) | 2023.01.05 |
★모분산을 모를땐 t-분포!★stats.norm.cdf()★모분산을 알때/모를때 표본평균의 표본분포★일표본★표본비율★기초통계학-[모집단 분포와 표본분포 -03] (0) | 2023.01.05 |
★표본분포★이산균등분포★표본추출 방법★모집단 분포★기초통계학-[모집단 분포와 표본분포 -01] (1) | 2023.01.05 |
★표본분포★이산균등분포★표본추출 방법★모집단 분포★기초통계학-[모집단 분포와 표본분포 -01]
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
==> 참고
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
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
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
출처 : [쉽게 배우는 생활속의 통계학] [북스힐 , 이재원]
※혼자 공부 정리용
'기초통계 > 표본분포' 카테고리의 다른 글
★표본분산 S**2 , 관찰 표본분산 s_0**2★카이제곱분포표★모분산의 표본분포★기초통계학-[모집단 분포와 표본분포 -06] (0) | 2023.01.06 |
---|---|
★중심극한정리★기초통계학-[모집단 분포와 표본분포 -05] (0) | 2023.01.06 |
★lineplot★중심극한정리★기초통계학-[모집단 분포와 표본분포 -04] (0) | 2023.01.05 |
★모분산을 모를땐 t-분포!★stats.norm.cdf()★모분산을 알때/모를때 표본평균의 표본분포★일표본★표본비율★기초통계학-[모집단 분포와 표본분포 -03] (0) | 2023.01.05 |
★모비율★표본비율★기초통계학-[모집단 분포와 표본분포 -02] (0) | 2023.01.05 |
[프로그래머스 ORACLE SQL]오랜기간 보호한 동물(1)★LEFT JOIN★VER2.0
'SQL > JOIN' 카테고리의 다른 글
https://school.programmers.co.kr/learn/courses/30/lessons/59043
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
'SQL > JOIN' 카테고리의 다른 글
[프로그래머스 ORACLE SQL]오랜 기간 보호한 동물(1)★FETCH_상위 N개 레코드★FULL OUTER JOIN (0) | 2023.06.22 |
---|---|
[프로그래머스 ORACLE SQL]상품 별 오프라인 매출 구하기★어디로 조인할지 차근 차근 생각★ (0) | 2023.06.22 |
[프로그래머스 ORACLE SQL]오랜기간 보호한 동물(1)★LEFT JOIN★VER2.0 (0) | 2023.01.04 |
[프로그래머스 ORACLE SQL]없어진 기록 찾기★LEFT JOIN★NOT IN★VER3.0 (0) | 2023.01.04 |
[프로그래머스 ORACLE SQL]주문량이 많은 아이스크림들 조회하기★LEFT JOIN★FROM 절 서브쿼리 3번★서브쿼리간 더하기★ (0) | 2023.01.04 |
[프로그래머스 ORACLE SQL]없어진 기록 찾기★LEFT JOIN★NOT IN★VER3.0
https://school.programmers.co.kr/learn/courses/30/lessons/59042
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
==> 이게 더 이해가 잘가는듯?