귀무가설 : 두 집단 간 평균이 같다
대립가설 : 두 집단 간 평균이 같지 않다
단일 모집단에서 추출된 하나의 표본이 대상
원래 t검정은 두 집단 간의 평균 비교하는 건데 샘플이 하나?
-> 하나는 모평균임!
=> 모평균과 표본평균의 차이 검정
단일 표본 t검정 실시할 때 사용
popmean
파라미터에 모평균 입력
popmean
파라미터에 모평균과 같은 값 입력하면 1 출력(귀무가설 기각X),
모평균과 멀어질수록 0 출력
검정통계량, p-value 출력
import pandas as pd
from scipy.stats import ttest_1samp
ir = pd.read_csv("iris.csv")
stat, p = ttest_1samp(ir["Sepal.Length"], popmean = 4)
print(round(stat,2))
print(round(p, 2))
# p-value 0 나옴
# 모평균과 표본평균 다르다
# 귀무가설 기각한다
# 모평균은 ir["Sepal.Length"].mean() 이렇게 구하는데 5.84임
대응 표본 t검정 실시할 때 사용
검정에 실시하는 두 변수 차례대로 지정
import pandas as pd
from scipy.stats import ttest_rel
stat, p = ttest_rel(ir["Sepal.Length"], ir["Sepal.Width"])
# 변수 두 개 넣고 출력
print(round(stat,2))
print(round(p, 2))
# round() 함수 이용해서 소수점 둘째자리까지 출력
# 이렇게 출력했을 때
# 검정 통계량은 34.82, p-value는 0.0 출력됨
# p-value의 값이 0이니까 두 평균 다르다
# 따라서 귀무가설을 기각함
독립된 두 표본집단이 대상
등분산 여부에 따라 검정통계량 계산식 다름
보통 t-test하면 이 경우가 제일 많음
독립 2 표본 t검정 실시할 떄 사용
검정에 실시하는 두 변수 차례대로 지정
등분산 가정 만족하는 경우, equal_var
파라미터에 True
값 할당
import pandas as pd
form scipy.stats import ttest_ind
ir = pd.read_csv("iris.csv")
ir["Species"].unique()
# 중복 제거한 값 출력됨
stat, p = ttest_ind(ir.loc[ir["Species"] == "setosa", "Petal.Length"],
ir.loc[ir["Species"] == "versicolor", "Petal.Length"])
# Species가 setosa인 것과 versicolor인 거의 꽃잎 길이 출력한 거임
print(round(stat,3))
print(round(p,3))
- 자료가 수집된 지역의 평균 온도는 20도라고 한다. 수집된 데이터를 사용하여 양측 검정을 실시했을 때 p-value는 얼마인가?
import pandas as pd
form scipy.stats import ttest_1samp
df = pd.read_csv("bike.csv")
stat, p = ttest_1samp(df["temp"], popmean = 20)
# 자료가 수집된 지역의 평균 온도가 20도 = 모평균이 20도
print(round(p,3))
# p-value만 물어봤으니까 p만 출력해도 됨!
# 출력하면 0.002 나옴ㅎㅎ
- 2011년 1월의 데이터를 대상으로 동 시간대의 casual과 registered의 평균차이 검정 시 검정통계량은?
import pandas as pd
form scipy.stats import ttest_rel
df = pd.read_csv("bike.csv")
df["datetime"] = pd.to_datetime(df["datetime"])
df["year"]= df["datetime"].dt.year
df["month"]= df["datetime"].dt.month
# 필요한 게 2011년 1월이니까 년도랑 월 변수 따로 뽑아줌
df_sub = df.loc[(df["year"] == 2011) & (df["month"]==1),]
# 2011년 1월만 따로 뽑아서 저장
stat, p = ttest_1samp(df_sub["casual"], df_sub["registered"])
print(round(abs(stat),3))
- 주중과 주말의 registered 평균 검정 시 검정통계량은?
import pandas as pd
form scipy.stats import ttest_ind
df = pd.read_csv("bike.csv")
df["datetime"] = pd.to_datetime(df["datetime"])
df["wday"] = df["datetime"].dt.weekday
df["hday"] = (df["wday"] >=5) + 0
# 새로운 컬럼 만들 때는 loc나 iloc 사용 안함...
# 주말은 5, 6번이니까 주말은 1에 저장, 나머지(주중)는 0에 저장
stat, p = ttest_ind(df.loc[df["hday"] == 1, "registered"],
df.loc[df["hday"] == 0, "registered"])
print(round(abs(stat),3))