* 제가 최근에 국민건강영양조사 자료 관련해서 R로 분석할 일이 있었는데 저도 나이가 드니 자주 잊어먹어서 여기에 일부 남겨둡니다. 혹시 잘못된 부분이 있으면 지적 부탁드립니다.
국민건강영양조사 자료: https://knhanes.kdca.go.kr/knhanes/main.do 에서 [원시자료]-[다운로드]에서 SAS 또는 SPSS 형식의 자료를 다운로드하면 된다. 원시자료 부분에서 이용 지침서와 변수 목록도 있으니 같이 다운로드하여 확인한다.
여기에 나오는 내용은 https://knhanes.kdca.go.kr/knhanes/sub03/sub03_07_01.do 에 있는 제 11회 자료활용 워크샵.pdf 파일에 있는 SAS 코드 중 일부를 R로 옮겨놓은 것이다.
SAS, SPSS 파일 아이콘을 누르면 인적사항과 사용관련 서약을 묻는 창이 뜨는데 동의하고 닫으면 다운로드가 시작된다.
SAS 형식의 2017년도 조사 데이터(hn17_all.sas7bdat)를 다운받았다. R에서 sas파일을 읽는 방법은 패키지 sas7bdat에서 read.sas7bdat()으로 읽거나, haven 패키지의 read_sas()로 읽을 수 있다.
원래 데이터는 수백 개 변수가 있는 관계로 일부 변수를 추려내서 원하는 형식으로 재코딩할 필요가 있다. 여기서 연령 변수를 골라 30세 이상을 의미하는 더미변수를 추가하고 다시 지워보았다. 전체 코드는 아래에 첨부했다.
국민건강영양조사나 지역사회건강조사와 같은 데이터는 복합표본자료(complex survey data)라서 가중치와 층(strata), 집락(cluster, psu) 정보가 있다. 이를 이용하면 모집단의 규모를 반영한 결과를 추정할 수 있다. 전체 데이터 hn17_all에서 일부 변수를 추려 hn17이란 데이터셋을 만들었는데 복합표본 데이터 분석을 위한 패키지 survey에서는 가중치 변수에서 결측값을 허용하지 않는 관계로 결측이 없는 subset을 hn17_1이란 이름으로 저장했다. 그리고 이 데이터셋이 가진 표본추출 정보를 dclus1이란 이름의 객체에 저장했다.
R에서 복합표본자료를 분석하려면 표본설계 정보가 있는 객체를 survey::svydesign()으로 설정해야 한다. id에는 집락변수, strata에는 층화변수, weights에는 가중치 변수, nest는 층 내에서 집락을 구분한다고 한다. 자세한 내용은 (https://r-survey.r-forge.r-project.org/survey/html/svydesign.html)을 참고하라.
SAS의 proc survey[freq/mean/reg/logistic ...]은 옵션 중 DOMAIN 집단변수; 에서 부분집단별 결과를 낼 수 있게 해준다. R에서는 아래와 같이 조건별로 디자인 파일을 분리하여 이를 적용해야 한다.
가중치를 적용하여 성별에 따른 빈도를 산출해봤다. subg_p는 30대 이상 성인으로 BMI 정보가 결측이 아닌 사람을 1, 나머지를 0으로 지정했다. 다 합쳐보니 약 5,100만명 정도가 되어 대한민국 전체의 빈도를 대략 추정하고 있다. 30세 미만 인구는 그중 약 1,677만명 정도로 볼 수 있다. 아래에는 고혈압 유병자(HE_HP), 비만(OBE)을 층화한 빈도표가 있다.
수축기 혈압(HE_sbp)의 평균을 구해보았다.
SAS의 결과와 비교하면 다음과 같다.
성별에 따른 결과는 svyby를 이용하여 구할 수 있다.
30세 이상 성인(age30=1)에서 성별(sex, 1=male, 2=female)에 따른 고혈압(HP) 유병률을 구해보았다. 4개 행에서 아래 2개 행이 유병률 평균과 표준오차 값이다.
이번에는 svyglm을 이용하여 체질량지수(BMI)와 수축기 혈압 간의 관계에 대한 복합표본 선형 회귀분석을 실시했다. 여기서 design 부분에 30세 이상에 대한 nested design 값이 있는 subg1을 지정했다.
이번에는 2014~2017 네개 연도별 데이터를 합쳐서 로지스틱 회귀분석을 돌려봤다.
추정값에 exp()를 사용하여 Odds ratio와 신뢰구간을 구해봤다.
표본설계 자료분석 관련 참고문헌:
https://bookdown.org/mpfoley1973/survey/analyzing-survey-data.html
https://wwwn.cdc.gov/nchs/nhanes/tutorials/varianceestimation.aspx (미국 nhanes의 자료분석 tutorial)
본문에서 사용한 R 코드
첫댓글 R로 깔끔하게 되는군요^^
네^^, R로 웬만한 건 다 되는 듯 합니다. 미국 NHANES는 R에 대해서도 설명했는데 우리나라는 아직 SAS, SPSS만 있네요.
잘 보았습니다. 다만 맥에서는 2016 자료를 읽을때 encoding을 지정해주어야 되네요.
hn16_all <- haven::read_sas("hn16_all.sas7bdat",encoding="UTF-8")
정보 감사합니다.^^
한글 읽으려면 그게 필요한가 보죠?
@안재형 2016년도 자료만 그러네요...ㅎㅎ