320x100
이번에는 가설을 검정해주는 함수를 만들어봤다
저번 모평균, 모비율 추정하는 함수를 만들 때
global 변수를 너무 무분별하게 사용한 것 같아서
이번에는 하나도 안 쓰고 만들어봤다!
덕분에 매개 변수의 개념에 대해서 조금 더 잘 알 수 있게 되었다.
코드 설명 :
1. 단측, 양측에 따라 검정 통계량에 - 부호를 달거나, 절대값을 달아줘야 하고
무엇보다 표본의 검정값과 비교하는 기각역이 달라지기 때문에
기각역을 결정하기 위해 대립 가설의 종류를 물어본다.
2. 표본의 크기를 물어 z 검정값을 쓸지 t 검정값을 쓸지 결정한다.
3. 유의 확률을 입력받아 z 검정값을 반환한다. t 검정값은 자유도에 따라 너무나 다양하기 때문에 직접 입력받는 걸로
4. 표본의 통계량을 입력받아 표본 검정값을 계산한다.
5. 표본 검정값과 검정 통계량을 같이 출력하여 왜 귀무가설을 기각할 수 있는지, 또는 없었는지를 확인 가능!
마지막으로 그 가설 검정의 결론을 출력한다
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 83 84 85 86 87 88 89 90 91 92 93 94 95 96 | import math def verify(): say=0 temp=True flag='' while(temp==True): say=input('어떤 주장을 하고 싶은가요?\n1. ~보다 작다 2. ~와 차이가 있다 3. ~보다 크다 : ') if say=='1' or say=='3': print() print('---단측 검정을 실시합니다---') temp=False elif say=='2': print() print('---양측 검정을 실시합니다---') temp=False else: print() print('---다시 입력하세요---') n=int(input('표본의 크기를 입력하세요 : ')) if n>=30: flag='Z' print() print('---z검정 통계량을 사용합니다---') else: print() print('---t검정 통계량을 사용합니다---') flag='T' tong2=tong(flag,temp,say) comp=ask(n) if say=='1': tong2*=-1 elif say=='2': tong2=abs(tong2) print('검정 통계량은 : ',tong2, '이고,') print('표본에 따른 통계량은 : ',comp, '이기 때문에,') if say=='1': if comp<=tong2: print('와~ 표본의 검정값이 더 작으므로 귀무가설을 기각할 수 있습니다!!') else: print('표본의 검정값이 더 작지 않으므로 귀무가설을 기각할 수 없습니다 ㅠ') elif say=='2': if comp>=tong2: print('와~ 표본의 검정값이 검정 통계량의 절대값보다 크므로 귀무가설을 기각할 수 있습니다!!') else: print('표본의 검정값이 검정 통계량의 절대값보다 크지 않으므로 귀무가설을 기각할 수 없습니다 ㅠ') elif say=='3': if comp>tong2: print('와~ 표본의 검정값이 더 크므로 귀무가설을 기각할 수 있습니다!!') else: print('표본의 검정값이 더 크지 않으므로 귀무가설을 기각할 수 없습니다 ㅠ') def tong(flag,temp,say): if flag=='Z' and say=='2': while(temp==False): per=float(input('몇 %의 유의 확률? (0.1, 0.05, 0.01 만 가능합니다) : ' )) if per==0.1: z=1.645 return z elif per==0.05: z=1.96 return z elif per==0.01: z=2.576 return z else: print() print('-----다시 입력하세요-----') elif flag=='Z' and (say=='1' or say=='3') : while(temp==False): per=float(input('몇 %의 유의 확률? (0.1, 0.05, 0.01 만 가능합니다) : ' )) if per==0.1: z=1.23 return z elif per==0.05: z=1.64 return z elif per==0.01: z=2.33 return z else: print() print('-----다시 입력하세요-----') elif flag=='T': f=float(input('유의 확률에 따른 t 값을 입력하세요\n자유도를 표본의 수 -1로 하여 표에서 직접 찾아 입력해주세요 : ')) return f else: print('tong 함수에서 오류 발생') def ask(n): sam_mean=float(input('표본의 평균을 입력하세요 : ')) mean=float(input('귀무 가설의 평균을 입력하세요 : ')) std=float(input('모표준편차 또는 표본표준편차를 입력하세요 \n(둘 다 알고 있을 경우는, 모표준편차를 입력해주세요) : ')) compare=(sam_mean-mean)/(std/math.sqrt(n)) return compare verify() | cs |
문제 풀이
--> 정답!
--> 정답!
반응형
'나 취준생 > 파이썬' 카테고리의 다른 글
파이썬 오류 처리 ( try~except, else, finally, exception as e, 특정 예외) (0) | 2020.12.03 |
---|---|
클래스 생성자, self, 상속, 클래스 변수와 인스턴스 변수 차이점 (1) | 2020.12.03 |
모비율 추정해서 출력하는 함수 만들어보기 (0) | 2020.12.02 |
모평균 추정해서 출력하는 함수 만들어보기 (0) | 2020.12.02 |
백준 1357번 [Python] - 뒤집힌 덧셈 (0) | 2020.11.24 |