320x100
모평균 u를 추정할 때 체크할 사항!
1. 모분산을 아는가? -> z 검정
2. 모분산을 모르는가?
2-1 표본의 크기가 30보다 작은 경우 -> t 검정
2-2 표본의 크기가 30보다 큰 경우 -> z 검정
위를 활용해서
데이터를 입력받아서 모평균을 출력하는 함수를 만들어보자!
대신 t 검정의 경우는 신뢰도 뿐만 아니라 자유도에 따라서도 t 값이 변하기 때문에
변수가 너무 다양해서 미리 입력시켜두지 않았으니
t값은 스스로 표에서 찾아서 입력해야 한다는 한계점이 있다 ㅠㅠ
https://www.geogebra.org/m/Mmf3AX7y --> t 값 편하게 찾는 웹사이트
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 | import math flag='temp' temp=True std=0 n=0 z=0 sam_std=0 mo=False def ask(): global flag global std global n global mo while(True): n=int(input('표본의 크기를 입력하세요 : ')) ans=input('모집단의 분산이나 표준 편차를 알고 있나요?\n맞으면 o 모르면 x를 입력 : ') if ans=='o': mo=True flag='Z' print('---z검정 실시---') std=float(input('모집단의 표준 편차를 입력하세요\n표준 편차는 분산의 제곱근입니다 ')) break elif ans=='x': if n>=30: flag='Z' print('---z검정 실시---') break else: print('---t검정 실시---') flag='T' break else:print('-----다시 입력하세요-----') def z_case(): global n global temp global z global mo global std while(temp==True): per=int(input('몇 %의 신뢰구간? (90, 95, 99만 가능합니다) : ' )) if per==90: z=1.645 temp=False elif per==95: z=1.96 temp=False elif per==99: z=2.576 temp=False else: print('-----다시 입력하세요-----') if mo==False: std=float(input('표본의 표준 편차를 입력하세요\n표준 편차는 분산의 제곱근입니다 ')) sam_mean=float(input('표본의 평균을 입력하세요 ')) u_range_A=sam_mean-z*std/math.sqrt(n) u_range_B=sam_mean+z*std/math.sqrt(n) print('모평균의 추정 구간은 %.3f 부터 %.3f 이며 신뢰 구간은 %s%%입니다.' %(u_range_A,u_range_B,per)) def t_case(): global mo_std global n global sam_std per=input('몇 %의 신뢰구간? : ') f=float(input('신뢰구간에 따른 t 값을 입력하세요\n자유도를 표본의 수 -1로 하여 표에서 직접 찾아 입력해주세요 ')) sam_std=float(input('표본의 표준 편차를 입력하세요\n표준 편차는 분산의 제곱근입니다 ')) sam_mean=float(input('표본의 평균을 입력하세요 ')) u_range_A=sam_mean-f*sam_std/math.sqrt(n) u_range_B=sam_mean+f*sam_std/math.sqrt(n) print('모평균의 추정 구간은 %.3f 부터 %.3f 이며 신뢰 구간은 %s%%입니다.' %(u_range_A,u_range_B,per)) def final(): global flag ask() if flag=='Z': z_case() elif flag=='T': t_case() else: print('첨부터 다시 입력 해주세여') print(flag) final() |
제대로 작동하는지 확인해보자~
정답 확인!!
세 번째 소수점을 날렸기 때문에 0.001 정도 차이는 있지만.. 만족!
반응형
'나 취준생 > 파이썬' 카테고리의 다른 글
가설 검정해주는 함수 만들어보기 (0) | 2020.12.02 |
---|---|
모비율 추정해서 출력하는 함수 만들어보기 (0) | 2020.12.02 |
백준 1357번 [Python] - 뒤집힌 덧셈 (0) | 2020.11.24 |
백준 1292번 [Python] - 쉽게 푸는 문제 (0) | 2020.11.24 |
백준 1225번 [Python] - 이상한 곱셈 (0) | 2020.11.24 |