핀아의 저장소 ( •̀ ω •́ )✧

36일차(2020-12-29) 본문

Big Data/데이터 분석

36일차(2020-12-29)

_핀아_ 2020. 12. 29. 23:51

일표본(One Sample) t-test_국민건강보험

 

건강검진정보: 2002년부터 2013년까지의 국민건강보험의 직장가입자와 40세 이상의 피부양자, 세대주인 지역가입자와 40세 이상의 지역가입자의 일반건강검진 결과와 이들 일반건강검진 대상자 중에 만40세와 만66세에 도달한 이들이 받게 되는 생애전환기건강진단 수검이력이 있는 각 연도별 수진자 100만 명에 대한 기본정보(성, 연령대, 시도코드 등)와 검진내역(신장, 체중, 총콜레스테롤, 혈색소 등)으로 구성된 개방데이터이다. 
다만, 그 수가 100만명인 만큼 보다 자료를 수월히 보기 위해 성별과 신장, 체중만 남겨두었다.

1
2
3
4
5
6
7
8
9
10
11
##패키지##
library(psych)
 
#### 일표본(One Sample) t-test #####
# two-sided test: alternative = c("two.sided") #일치하는가? = 양측
# right-sided test: alternative = c("greater") #~보다 큰가? = 우측
# left-sided test: alternative = c("less")     #~보다 작은가? = 좌측
 
#가설: 건강검진을 받은 환자들의 평균키는 170cm인지 통계분석하라.
#귀무: 건강검진을 받은 환자들의 평균키는 170cm이다.   = p>0.05
#연구: 건강검진을 받은 환자들의 평균키는 170cm아니다. = p<0.05
cs

1
2
3
4
5
6
7
8
9
10
11
# 01. 데이터 불러오기
aa <- read.csv("health.csv",
               header = TRUE,
               na.string = ","
)
View(aa)
str(aa)
 
#데이터 전처리
names(aa)=c("성별","키""몸무게")
aa$성별 = factor(aa$성별, levels = c(12), labels = c("남성""여성"))
cs

 

데이터 프레임 형태 / 1000000개 데이터 / 3개 변수


1
2
3
4
5
# 02.기본통계치 확인
attach(aa) # 객체연결 (attach  -> detach)
#attach: 앞으로 이 파일에서 값을 불러올 것이란 뜻
View(키) 
describe(키) #어디에 있는 aa가 없어도 자동으로 aa에서 가져옴
cs

 

평균(mean): 162.23 / 표준오차(se): 0.01


1
2
3
4
5
6
7
8
9
10
# 03. 그래프 그리기(박스그래프,히스토그램)
opar <- par(no.readonly = TRUE) #디폴트 par 값을 미리 할당--> par(opar)
# no.readonly = TRUE -> 화면 원복
par(mfrow=c(1,2)) #화면 
boxplot(키)
hist(키, breaks= 10, col="yellow",
     xlab="cm", ylab="명",
     ylim=c(0,200000),
     main="건강검진을 받은 환자들의 평균키"
par(opar)
cs

 


1
2
3
4
5
6
7
# 04.통계분석
options("scipen" = 20)
# t test 구하기(결론 구하기)
t.test(aa$키,
       alternative = c("two.sided"), #옵션 매우 중요
       mu = 170#(원하는)평균
       conf.level = 0.95#신뢰구간
cs

 

유의수준(p-vlaue)이 0.05보다 작다.


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
# 05.통계결과 그래프
mu=170  #원하는 평균
se=0.01 # 표본이므로 sd대신에 se 사용
data <- rnorm(1000, mu, se) # r + normal = 난수 + 정규분포 / 랜덤하게 뽑을 땐 r을 사용
#임의의 정규분포를 그리기 위해서 1000개의 점을 가져온 것 = 본래 자료 개수와는 상관 없음
data <- sort(data) #데이터 정렬
 
par(mfrow=c(1,1)) #위에서 복원이 안 먹히는 경우
plot(data, dnorm(data, mu, se), type='l'# 랜덤하게 뽑은걸 쌓을 땐 d 사용
     main="건강검진을 받은 환자들의 평균키"
     xlim=c(150,180))
abline(v=mu, col="green", lty=5#lty는 선유형
abline(v=mu+1.96*se, col="blue", lty=5#오차 허용범위
abline(v=mu-1.96*se, col="blue", lty=5#오차 허용범위
abline(v=162.1, col="red", lty=5#원하는 평균이 아닌 계산하여 나온 평균
 
detach(aa) #앞에서 attach를 쓴 경우 꼭 detach를 해줘야 한다.
cs

=> 유의수준(p-vlaue)이 0.05보다 작으며 예측한 값(170)보다 평균이 정규분포 95%안에 들어있지 않으므로 귀무가설은 기각(건강검진을 받은 환자들의 평균키는 170cm이다)되고 연구가설(건강검진을 받은 환자들의 평균키는 170cm가 아니다)이 채택 된다.

 

★부족한 점★

  1.  단순히 오늘 배운 것을 활용해보기 위해 건강검진 데이터를 사용한 것이라 딱히 의미있는 가설검정은 아니었다.
  2. 데이터 표본이 너무 많아서 인지 표준오차가 너무 작아 그래프가 제대로 그려지지 않았다. 이를 해결할 방법이 있을듯한데 아직 거기까진 배운게 없어 조정하지 못해 아쉽다. 

 

'Big Data > 데이터 분석' 카테고리의 다른 글

38일차(2020-12-31)  (0) 2020.12.31
37일차(2020-12-30)  (0) 2020.12.30
35일차(2020-12-24)  (0) 2020.12.24
34일차(2020-12-23)  (0) 2020.12.24
33일차(2020-12-22)  (0) 2020.12.23
Comments