TOP
class="layout-aside-left paging-number">
본문 바로가기
[파이썬 Projects]/<파이썬 - 수학 | 통계학>

[파이썬+통계학] 현대통계학 연습문제 파이썬 구현(ch.11) - 1

by 기록자_Recordian 2024. 10. 21.
728x90
반응형
★ 시작에 앞서 

 
해당 내용은 '<현대통계학-제6판>, 다산출판사, 2024' 에 나와있는 챕터별 연습문제를 교재를 응용하여 풀이하고, 수학적인 문제에 대한 답변을 파이썬으로 구현해보기 위해 작성하는 글이다.
해당 답변을 구현하는 방식은 답안지 없이 필자가 스스로 구현하는 것이므로, 정확한 (혹은 가장 효과적인) 답변이 아닐 수 있다. 이 글의 목적은 통계학 공부와 파이썬 프로그래밍 언어 공부를 동시에 하고자 함이며, 통계학을 공부하고 싶으신 분들은 해당 교재를 구매하는 것을 추천한다.
또한, 연습문제 번호 및 문제 내용은 필자가 임의대로 작성하였으며, 교재와는 다를 수 있다.
 
잘못된 부분이 있다면 언제든 피드백 부탁 드립니다! 감사합니다


이전 내용
 

[파이썬+통계학] 현대통계학 연습문제 파이썬 구현(ch.10)

★ 시작에 앞서 ★ 해당 내용은 ', 다산출판사, 2024' 에 나와있는 챕터별 연습문제를 교재를 응용하여 풀이하고, 수학적인 문제에 대한 답변을 파이썬으로 구현해보기 위해 작성하는 글이다.해

puppy-foot-it.tistory.com


챕터 11 주요 개념

 

- 모집단 평균에 대한 가설검정방법은 모집단 분산을 알고 있는 경우와, 모집단 분산을 알지 못하는 경우에 따라 서로 다르다.

 

◆ 모집단 평균에 대한 가설검정 순서

  • 귀무가설과 대립가설: 귀무가설은 기존에 사실이라 전제하고 있는 것이므로 등식(=)으로 표현
  • 유의수준의 결정: 대체로 0.01, 0.05, 0.10 등으로 정함 (연구자의 연구목적, 주관적인 판단 등에 따라 다름). 실제 의사결정을 할 때에는 의사결정에 오류를 범함으로써 발생할 수 있는 손실을 고려하여 유의수준 결정
  • 채택영역과 기각영역 - 임곗값: 대체로 표준정규분포를 기준으로 하는 Z값을 임곗값으로 사용하여 귀무가설의 채택영역과 기각영역 설정
  • 양측 검정에서의 임곗값: Za/2, 단측검정에서의 임곗값: Za
  • 통계량의 계산과 임곗값과의 비교: 임곗값이 결정되면, 표본에서 계산한 통계량이 기각영역에 속하는지 채택영역에 속하는지 결정. ▶ 표본에서 얻은 통계량을 Z-통계량으로 바꾸는 것이 비교에 편리하며, Z-통계량이 기각영역 안에 있으면 귀무가설을 기각하고, 채택 영역 안에 있으면 귀무가설을 채택.
  • p-값과의 비교: 임곗값 대신 표본에서 계산한 통계량을 p-값을 계산하여 유의수준(a)과 비교하는 방법도 있음. (p-값이 유의수준보다 작으면 귀무가설 기각)
  • 결과의 해석: 기각이나 채택 여부 자체보다 더 중요한 것은 이에 대한 해석인데, 즉 최종적으로 귀무가설을 기각하거나 채택하는 것이 무엇을 의미하는가를 해석해야 한다.

▶ 모집단의 분산을 알 때에는 위의 과정을 거쳐 모집단 평균에 대한 가설검정을 수행하면 된다.

 

[모집단의 분산을 모를 때]

  • t-분포와 임곗값: 모집단의 표준편차를 모르는 상황에서 표본의 표준편차를 사용할 때에는 t값을 이용하여 가설검정을 하게 된다. (통계량 t는 자유도 n-1)
  • t-분포를 이용하여 가설검정을 할 때에는 임곗값을 결정할 때 Z값 대신 t값을 이용
  • 유의수준 a로 양측검정을 할 때 왼쪽 임곗값: -ta/2,n-1, 오른쪽 임곗값: ta/2,n-1
  • 단측검정 시에는 임곗값은 -ta,n-1 또는 ta,n-1이 된다.

- t-분포와 Z-분포와의 관계

  • 모집단분포가 정규분포를 이루며, 모집단의 분산을 알고 있을 때: Z분포
  • 모집단분포가 정규분포이긴 하나, 분산을 모르고 있을 때: t분포
  • 모집단 분산을 알기 위하여 표본을 뽑을 때 그 크기가 크면: 편의상 Z-분포 사용
  • 모집단이 비정규분포이며 표본이 작을 때: 적절한 검정 통계량이 없음 ▶ 비모수통계 사용

- 모집단 비율에 관한 가설검정: 모집단 비율에 대한 가설검정도 자주 사용됨.

예. 선거 때 모 정당의 지지율이 총투표수의 40%일 것이다.

 

- 모집단 분산에 관한 가설검정: 카이제곱 분포를 이용하여 정규분포를 이루는 단일모집단의 분산에 관한 가설검정을 할 수 있다.

 

 

[파이썬+통계학] 현대통계학 연습문제 파이썬 구현(ch.8)-2

★ 시작에 앞서 ★ 해당 내용은 ', 다산출판사, 2024' 에 나와있는 챕터별 연습문제를 교재를 응용하여 풀이하고, 수학적인 문제에 대한 답변을 파이썬으로 구현해보기 위해 작성하는 글이다.해

puppy-foot-it.tistory.com

분산에 대한 가설검정도 계산된 통계량이 표집분포에서 채택영역에 속하는지 또는 기각영역에 속하는지를 알아서 귀무가설을 채택하기도, 거부하기도 한다.

◆ 분산에 대한 가설검정 - 양측검정

귀무가설을 채택할 수 있는 의사결정기준은 유의수준 a에 따라 다르나, 일정한 a 수준에 따른 채택영역과 기각영역은 아래와 같이 표시할 수 있다.

◆ 분산에 대한 가설검정 - 단측검정

귀무가설을 채택하는 영역과 기각하는 영역은 a에 따라 다르며, 대립가설이 𝜎^2>q 이냐, σ^2<q 이냐에 따라 달라진다.

[ 대립가설: 𝜎^2>q]

 

[ 대립가설: 𝜎^2<q]

※ q는 임의의 수치를 나타낸다


챕터11 예제 1 및 파이썬 풀이

 

Q. 우리나라 여성의 평균 키는 160cm 라고 알려져 있다. 이에 대한 가설을 검정하기 위하여, 10,000명을 표본으로 하여 조사한 결과, 평균 169cm, 분산 300을 얻었다. 우리나라 여성의 평균 키는 이제 160cm보다 더 커졌다고 할 수 있는가?

# 우리나라 여성 평균 키
import scipy.stats as stats
import numpy as np

# 관련 데이터
mu = 160
n = 10000 # 표본의 수
mean = 169 # 표본 평균
var = 300 # 표본 분산
std = var **0.5 # 표준편차는 분산의 제곱근
a = 0.05 # 유의 수준

# z-검정 통계량 계산
z_score = (mean - mu) / (std / np.sqrt(n))

# 유의수준에 따른 임곗값 계산
c_value = stats.norm.ppf(1 - a)

# 결과 출력
print(f'Z-통계량: {z_score:.2f}')
print(f'임곗값: {c_value:.2f}')

# 가설 검정 해석
if z_score > c_value:
    print('귀무가설 기각: 여자 평균 키가 160cm 라고 할 수 없다')

else:
    print('귀무가설 기각 불가: 여자 평균 키가 160cm 라고 할 수 있다.')

- 귀무가설(H0​): 한국 여성의 평균 키는 160cm 이다.
- 대립가설(H1​): 한국 여성의 평균 키는 160cm 이상이다.

- 계산된 z-score(51.94)가 임계값(1.64)보다 훨씬 크기 때문에 귀무가설을 기각한다.
▶ 한국 여성의 평균 키가 160cm를 훨씬 넘는다는 결론을 내릴 수 있다.


챕터 11 예제2 및 파이썬 풀이

 

Q. 어떤 제조업체가 파이어누들이라는 라면을 해외에 수출하고 있다. 이 라면의 무게는 평균 160그램이며, 정규분포를 따른다는 것이 알려져 있다. 그러나 해외에서는 라면의 무게가 160그램이 아니라는 불평이 들어오고 있다. 회사측에서는 이를 확인하기 위해 100개의 라면을 표본으로 뽑아 평균을 조사하여 본 결과, 표본 평균은 155 그램이었다.

모집단의 표준편차가 30 그램이라는 것을 과거의 경험으로 알고 있다고 하자. 유의수준을 0.05라 하면, 위의 결과로부터 이 회사 라면의 평균무게가 160그램이 아니라고 말할 수 있는가?

(다른 조건은 같고 라면의 내용량이 부족하다는 불평이 들어온다는 가정)

# 라면의 무게
import scipy.stats as stats
import numpy as np

# 연관 데이터
mu = 160
n = 100
mean = 155
std = 30
a = 0.05

# z-검정 통계량 계산
z_score = (mean - mu) / (std / np.sqrt(n))

# 유의수준에 다른 임곗값
c_value = stats.norm.ppf(a)

# 결과 출력
print(f'Z-통계량: {z_score:.2f}')
print(f'임곗값: {c_value:.2f}')

# 가설 검정 해석
if z_score < c_value:
    print('귀무가설 기각: 라면 평균 무게는 160g과 다르다고 할 수 없다')

else:
    print('귀무가설 기각 불가: 라면 평균 무게는 160g과 다르다고 할 수 있다.')

- 귀무가설(H0): 라면의 무게는 160그램이다.

- 대립가설(H1): 라면의 무게는 160그램이 아니다. (그에 비해 부족하다)

- 계산된 Z-통계량이 기각영역 안에 있으므로 귀무가설은 기각된다

▶ 라면의 내용량이 160g 이라고 고객들에게 주장할 수 없다. (그에 비해 부족하다)


챕터 11 예제3 및 파이썬 풀이

 

Q. 통신사 간 고객 유치 경쟁이 치열하다. 일반적으로 약정기간이 종료되면 타 통신사로 이동하는 고객의 비율은 60%라고 알려져 있다. 그런데 A사에서는 B사의 서비스를 이용하였던 고객 중에서 약정기간이 종료되면 60% 보다 더 많은 고객들이 타사로 이동한다는 주장을 하고 있다. 이러한 A사의 주장을 실증적으로 조사하기 위하여, B사가 자사의 고객 중 500명을 대상으로 조새해 본 결과, 315명이 타사로 이동하였다. 이러한 사실은 A사의 주장에 충분한 증거가 되는가? 유의수준 0.01에서 A사의 주장을 가설검정하라.

# 통신사 이동 고객 비율
import scipy.stats as stats
import numpy as np

# 연관 데이터
move_ratio = 0.6 # 알려진 이동 비율
n = 500 # 표본 수
moved_n = 315 # 표본 중 이동한 수
a = 0.01 # 유의수준

# 표본 비율
p = 315/500

# 표집분포의 표준편차
sp = ((move_ratio * ( 1- move_ratio)) / n) ** 0.5

# z_score 계산
z_score = (p - move_ratio) / sp

# 유의수준에 다른 임곗값
c_value = stats.norm.ppf(1-a)

# 결과 출력
print(f'표본비율(p): {p:.2f}')
print(f'표준편차(sp): {sp:.3f}')
print(f'Z-통계량: {z_score:.3f}')
print(f'임곗값: {c_value:.2f}')

# 가설 검정 해석
if z_score > c_value:
    print('귀무가설 기각: B사의 고객 중 약정기간 종료 후 타사로 이동한 고객은 60%보다 더 많은 고객이 이동한다고 할 수 없다')

else:
    print('귀무가설 기각 불가: B사의 고객 중 약정기간 종료 후 타사로 이동한 고객은 60%보다 더 많은 고객이 이동한다고 할 수 있다')

- 귀무가설(H0): B사의 고객 중 약정기간 종료 후 타사로 이동한 고객은 60%보다 더 많은 고객이 이동한다.

- 대립가설(H1); B사의 고객 중 약정기간 종료 후 타사로 이동한 고객은 60%보다 더 많은 고객이 이동하는 것은 아니다.

▶ A회사의 주장 (B사의 서비스를 이용하였던 고객 중에서 약정기간이 종료되면 60% 보다 더 많은 고객들이 타사로 이동한다는 주장)을 반박하기에 충분치 못하다.


챕터 11 예제4 및 파이썬 풀이

 

Q. 어느 연구소에서 발표한 바에 의하면 우리나라 중소기업의 종업원 입금은 어느 정도 안정되어 있어 시간당 임금의 표준편차가 500원 이라고 한다. 그러나 많은 종업원들은 임금격차가 너무 심하기 때문에 표준편차가 이보다 훨씬 클 것이라고 생각하며, 또 어떤 사람은 전국의 중소기업의 임금수준은 대동소이하여 표준편차가 더 작을 것이라고 생각하고 있다. 이를 검정하기 위하여 51명을 무작위로 뽑아 그들의 시간당 임금을 조사하여 본 결과 표준편차가 700원이었다. 

종업원 임금은 정규분포를 이룬다고 가정하고 연구소의 발표를 유의수준 0.10에서 검정하라.

(표준편차의 분산은 제곱이므로, 250,000 이다)

# 시간당 임금 표준편차
import scipy.stats as stats

# 연관 데이터
sample_std = 700 #표본의 표준 편차
pop_std = 500 # 모집단의 표준 편차

sample_var = sample_std ** 2 # 표본의 분산
pop_var = pop_std ** 2 # 모집단의 분산

n = 51 # 표본의 수
a = 0.10 # 유의 수준

# 카이제곱 검정 통계
chi = (n - 1) * sample_var / pop_var

df = n - 1 # 자유도

# 양측검정 임곗값
chi_critical_low = stats.chi2.ppf(a / 2, df)
chi_critical_high = stats.chi2.ppf(1 - a / 2, df)

# 결과 출력
print(f'카이제곱 통계: {chi:.2f}')
print(f'임곗값 범위: {chi_critical_low:.2f}~ {chi_critical_high:.2f}')

# 가설검정 결과
if chi < chi_critical_low or chi > chi_critical_high:
    print("귀무가설 기각: 임금 표준 편차는 500원이라는 발표를 받아들일 수 없다.")
else:
    print("귀무가설 기각 불가: 임금 표준 편차는 500원이라는 발표를 받아들인다.")

- 귀무가설(H0): 시간당 임금의 표준편차가 500원이다

- 대립가설(H1): 시간당 임금의 표준편차가 500원이 아니다.

- 카이제곱 통계, 양측검정 사용

▶ 카이제곱 통계량은 98로써, 임곗값인 67.5보다 크므로 귀무가설을 기각한다. 즉, 시간당 임금의 표준편차가 500원이라는 발표를 받아들일 수 없다.


챕터 11 예제5 및 파이썬 풀이

 

Q. 어느 고등학교에서는 문.이과 통합 이후 이전보다 학생들의 성적이 고르지 않다고 주장하고 있다. 통합 전의 성적의 분산은 60 이라고 하며, 교육부에서는 지금도 전과 마찬가지일 것이라는 주장이다. 한 연구자는 교육부의 주장을 검정하기 위하여 61명을 선택하여 그 표본의 분산을 계산하여 본 결과 70이었다. 통합 이후 성적의 분산이 상상하였는지를 유의수준 0.10에서 검정하려 한다. 고등학교의 성적분포는 정규분포라고 가정한다.

# 문이과 통합 이후 성적
import scipy.stats as stats

# 연관 데이터
pop_var = 60
sample_var = 70
a = 0.10
n = 61

# 자유도
df = n -1

# 카이제곱 검정 통계
chi = df * sample_var / pop_var

# 임곗값
critical = stats.chi2.ppf(1-a, df)

# 결과 출력
print(f'카이제곱 통계: {chi:.2f}')
print(f'임곗값: {critical:.2f}')

# 가설검정 결과
if chi > critical:
    print("귀무가설 기각: 통합 이후 성적의 분산이 상승하였다고 볼 수 있다")
else:
    print("귀무가설 기각 불가: 통합 이후 성적이 분산이 상승하였다고 볼 수 없다")

- 귀무가설(H0): 통합 이후 성적의 분산이 상승하였다고 볼 수 없다. (통합 전과 동일하다 - 교육부 주장)

- 대립가설(H1): 통합 이후 성적의 분산이 상승하였다고 볼 수 있다. (통합 이후 이전보다 성적이 고르지 않다 - 학교 주장)

- 카이제곱 통계, 단측검정 사용

카이제곱 통계량은 70으로, 임곗값 74.4보다 작으므로 귀무가설을 기각할 수 없다. 즉, 통합 이후 성적의 분산이 상승하였다고 볼 수 없다. (교육부 주장이 더 설득력이 있음)


다음 내용

 

[파이썬+통계학] 현대통계학 연습문제 파이썬 구현(ch.11) - 2

★ 시작에 앞서 ★ 해당 내용은 ', 다산출판사, 2024' 에 나와있는 챕터별 연습문제를 교재를 응용하여 풀이하고, 수학적인 문제에 대한 답변을 파이썬으로 구현해보기 위해 작성하는 글이다.해

puppy-foot-it.tistory.com

 

728x90
반응형