빅데이터분석기사나 ADsP 응시 때 포기했던 통계분석이 이번에도 필자를 괴롭힙니다. 도대체 이해가 안 되는 내요입니다. 이번에는 강의에서 풀지 못했던 일부 문제를 Bing 챗(chat) GPT 의 도움으로 작성해 보았습니다. 잘 작성된 단측검정 코드로 양측검정 코드 생성을 요청하니 제대로 답해줬습니다.
자유도 30 (사건회수) + 검정통계량 1.5 / 1.9 / 2.4 일 때, 단측 t-검정 코드 생성
자유도 30 (사건회수) + 검정통계량 1.5 / 1.9 / 2.4 일때, 단측 t-검정 후 검정통계량, 신뢰구간, 유의 수준, 검정경례 산출 후 시각화까지 파이썬 코드 작성 요청
챗 gpt 실행결과의 코드는 아래 접은글에 작성되어 있습니다.
더보기
for i in [1.5, 1.9, 2.4]:
t_check_oneway(i, 30, 0.05)
def t_check_oneway(t_stat, df, alpha):
# 검정통계량
t_stat = t_stat
# 자유도
df = df
# 유의수준
alpha = alpha
print(f"검정통계량 : ({t_stat:.2f}, 자유도 : {df:.2f}, 유의수준 : {alpha:.2f})")
# 단측검정 범위 구하기 (상한값만 구함)
t_crit = t.ppf(1 - alpha, df) # 누적분포함수의 역함수 사용
upper_bound = t_crit # 상한값은 그대로 사용
print(f"단측검정 범위: (-inf, {upper_bound:.2f})")
# p-value 구하기 (상한값만 구함)
p_value = 1 - t.cdf(t_stat, df) # 누적분포함수 사용하고 양쪽 꼬리 곱하지 않음
print(f"p-value: {p_value:.3f}")
# 유의수준과 p-value 비교하여 결론 도출
if p_value < alpha:
print("p-value가 유의수준보다 작으므로 귀무가설을 기각합니다.")
else:
print("p-value가 유의수준보다 크거나 같으므로 귀무가설을 채택합니다.")
# t-분포 그래프 그리기
x = np.linspace(-4, 4, 100) # x축 범위 설정
y = t.pdf(x, df) # y축 값 설정 (확률밀도함수 사용)
plt.plot(x, y) # 그래프 그리기
# 임계영역 색칠하기 (상한값만 색칠) - 우측
x_fill = np.linspace(upper_bound, 4) # x축 임계영역 설정
y_fill = t.pdf(x_fill, df) # y축 임계영역 설정
plt.fill_between(x_fill, y_fill) # 임계영역 색칠하기
# 검정 통계량 표시하기 (점으로 표시)
plt.scatter(t_stat, 0) # 점으로 표시
plt.annotate(f"t={t_stat}", (t_stat + 0.1 ,0)) # 점 옆에 값 표시
# 축 이름 및 제목 설정하기
plt.xlabel("t value")
plt.ylabel("Probability density")
plt.title("One-tailed t-test")
# 그래프 보여주기
plt.show()
단측검정 결과는 다음과 같이 출력됩니다.
자유도 30 (사건회수) + 검정통계량 1.5 / 1.9 / 2.4 일 때, 양측 t-검정 코드 생성
여러 번 시도 중에 위 단측 검정 코드가 괜찮아서 아래처럼 단측 검정 함수를 입력한 후 양측 t-검정 코드 생성을 요청했습니다.
결과 코드는 다음과 같습니다.
더보기
for i in [1.5, 1.9, 2.4]:
t_check_twoway(i, 30, 0.05)
def t_check_twoway(t_stat, df, alpha):
# 검정통계량
t_stat = t_stat
# 자유도
df = df
# 유의수준
alpha = alpha
print(f"검정통계량 : ({t_stat:.2f}, 자유도 : {df:.2f}, 유의수준 : {alpha:.2f})")
# 양측검정 범위 구하기 (상한값과 하한값 모두 구함)
t_crit = abs(t.ppf(alpha / 2, df)) # 누적분포함수의 역함수 사용하고 절대값 취함
lower_bound = -t_crit # 하한값은 음수로 사용
upper_bound = t_crit # 상한값은 그대로 사용
print(f"양측검정 범위: ({lower_bound:.2f}, {upper_bound:.2f})")
# p-value 구하기 (상한값과 하한값 모두 구함)
p_value = 2 * (1 - t.cdf(abs(t_stat), df)) # 누적분포함수 사용하고 절대값 취하고 양쪽 꼬리 곱하기 2
print(f"p-value: {p_value:.3f}")
# 유의수준과 p-value 비교하여 결론 도출
if p_value < alpha:
print("p-value가 유의수준보다 작으므로 귀무가설을 기각합니다.")
else:
print("p-value가 유의수준보다 크거나 같으므로 귀무가설을 채택합니다.")
# t-분포 그래프 그리기
x = np.linspace(-4, 4, 100) # x축 범위 설정
y = t.pdf(x, df) # y축 값 설정 (확률밀도함수 사용)
plt.plot(x, y) # 그래프 그리기
#임계영역 색칠하기 (상한값과 하한값 모두 색칠) - 양쪽
x_fill1 = np.linspace(-4, lower_bound) # x축 임계영역 설정 (좌측)
y_fill1 = t.pdf(x_fill1, df) # y축 임계영역 설정
plt.fill_between(x_fill1, y_fill1) # 임계영역 색칠하기
x_fill2 = np.linspace(upper_bound, 4) # x축 임계영역 설정 (우측)
y_fill2 = t.pdf(x_fill2, df) # y축 임계영역 설정
plt.fill_between(x_fill2, y_fill2) # 임계영역 색칠하기
#검정 통계량 표시하기 (점으로 표시)
plt.scatter(t_stat, 0) # 점으로 표시
plt.annotate(f"t={t_stat}", (t_stat + 0.1 ,0)) # 점 옆에 값 표시
# 축 이름 및 제목 설정하기
plt.xlabel('t value')
plt.ylabel('Probability density')
plt.title('Two-tailed t-test')
#그래프 보여주기
plt.show()
양측검정 결과는 다음과 같이 출력됩니다.
여러모로 챗 gpt 도움을 많이 받네요.
'IT > 오랫만코딩:파이썬' 카테고리의 다른 글
DAY14 로지스틱 회귀분석 및 군집분석-(Bing 챗(chat) GPT 생성한 파이썬 코드 첨삭) (0) | 2023.03.23 |
---|---|
DAY12 특징선택-feature selection 및 재현율 (recall)-(Bing 챗(chat) GPT 생성한 파이썬 코드 첨삭) (1) | 2023.03.21 |
DAY 09 머신러닝 관련 Bing 챗(chat) GPT 생성한 파이썬 코드 및 동일 절차 Weka 실행 (0) | 2023.03.16 |
DAY06 통계정리 (with OpenAI/Bing 챗(chat) GPT 생성한 파이썬 코드 첨삭) (0) | 2023.03.13 |
댓글