데이터 step
종사자 규모 비교
library(readxl)
library(tidyverse)
library(DT)
library(htmlTable)
Kosis 의 종사자와 Nhis 의 종사자를 비교하고자 한다. ### kosis 종사자 자료 우리 논문이 2006년부터 2015까지 추적 관찰한 것으로, 2012년의 임근금로자 중에 상용 근로자 수를 확인하여 비교하기로함. 사이트는 https://kosis.kr/임. kosis
employ_status = c("non-per", "permenent")
workers_employgp =c(7034+(5032+1639), 17921-(5032+1639))
agegp =c("others", "25-64")
workers_agegp=c(25781 -(24011-1617), 24011-1617)
dat1 = tibble(employ_status, workers_employgp)
dat2 = tibble(agegp, workers_agegp)
dat1= dat1 %>%
mutate(ratio = workers_employgp/ sum(workers_employgp))
ratio1 = dat1%>% filter(employ_status == "permenent") %>% pull(ratio)
dat2 = dat2 %>%mutate(ratio = workers_agegp/sum(workers_agegp))
ratio2 = dat2%>% filter(agegp == "25-64") %>% pull(ratio)
dat1 %>% htmlTable()
employ_status | workers_employgp | ratio | |
---|---|---|---|
1 | non-per | 13705 | 0.549188539370868 |
2 | permenent | 11250 | 0.450811460629132 |
dat2 %>% htmlTable()
agegp | workers_agegp | ratio | |
---|---|---|---|
1 | others | 3387 | 0.131375819401885 |
2 | 25-64 | 22394 | 0.868624180598115 |
즉 전체 경제활동인구의 0.4508115 가 임금 근로자, 이중 0.8686242가 25-64세로 추정 가능함. 2012년 전체 경제활동인구는 25781000 이었음. 이에 따르면 아래의 공식으로 추정할 수 있음. 우리 연구는 10605077 이었음.
workers_kosis = 25781000 * ratio1 * ratio2
workers_kosis
## [1] 10095472
workers_nhis = 10605077
error = round((workers_kosis - workers_nhis)/workers_kosis, 6 )*100
sprintf("%s%%", error)
## [1] "-5.0479%"
즉 오차는 -5.0479% 임.
암 발생자 수 비교
kosis 암 발생자수 확인
우리 논문이 2006년부터 2015까지 추적 관찰한 것으로, 2012년의 5세별 암발생자 수를 확인하여 비교하기로함. 사이트는 https://kosis.kr/임. kosis
library(readxl)
library(tidyverse)
library(DT)
library(htmlTable)
kosis = readxl::read_xlsx("data/cancers_kosis.xlsx")
head(kosis) %>% datatable()
데이터를 보기 좋게 가공합니다.
kosis2 = kosis %>%
fill(type, gender, .direction = "down") %>%
mutate(type1 = str_replace_all(type, "\\([^)]*\\)", "")) %>%
mutate(type2 = str_replace_all(type, ".*\\(|\\)", "")) %>%
mutate(agegp=str_sub(age, 1, 2)) %>%
select(type1, type2, gender, agegp, case, crude_rate_per_100th)
head(kosis2) %>% htmlTable()
type1 | type2 | gender | agegp | case | crude_rate_per_100th | |
---|---|---|---|---|---|---|
1 | 모든암 | C00-C96 | 계 | 25 | 2793 | 82.4 |
2 | 모든암 | C00-C96 | 계 | 30 | 6184 | 154.19999999999999 |
3 | 모든암 | C00-C96 | 계 | 35 | 9647 | 234 |
4 | 모든암 | C00-C96 | 계 | 40 | 15112 | 331 |
5 | 모든암 | C00-C96 | 계 | 45 | 19137 | 461.4 |
6 | 모든암 | C00-C96 | 계 | 50 | 26984 | 629.1 |
nhis 데이터 불러오기
base = readxl::read_xlsx("data/base.xlsx", sheet=1)
base %>%
mutate(sex_type = ifelse(is.na(sex_type), 0, sex_type)) %>%
filter(disease =="all cancer") %>%
filter(sex_type ==0) %>%
pull(pm)%>%sum(.) *1000000/12-> person_year
mean_follow_up_year = person_year /10786000
base_2009 = 10786000
2009년에 1.0786^{7} 명이고, 총 person_year 는 7.356124^{7} 이므로, 평균 추적 관찰년수는 6.8200668 이다. > 위암
위암을 중심으로 비교해 보겠다.
kosis3 = kosis2 %>%
rename(cr100 = crude_rate_per_100th) %>%
filter(type2 =="C16") %>%
filter(gender=="계") %>%
mutate(pyear = as.numeric(case)/as.numeric(cr100)*100000) %>%
mutate(tpyer = sum(pyear))
kosis3 %>% htmlTable()
type1 | type2 | gender | agegp | case | cr100 | pyear | tpyer | |
---|---|---|---|---|---|---|---|---|
1 | 위 | C16 | 계 | 25 | 85 | 2.5 | 3400000 | 30129950.2017537 |
2 | 위 | C16 | 계 | 30 | 314 | 7.8 | 4025641.02564103 | 30129950.2017537 |
3 | 위 | C16 | 계 | 35 | 667 | 16.2 | 4117283.95061728 | 30129950.2017537 |
4 | 위 | C16 | 계 | 40 | 1386 | 30.4 | 4559210.52631579 | 30129950.2017537 |
5 | 위 | C16 | 계 | 45 | 1999 | 48.2 | 4147302.90456431 | 30129950.2017537 |
6 | 위 | C16 | 계 | 50 | 3459 | 80.599999999999994 | 4291563.27543424 | 30129950.2017537 |
7 | 위 | C16 | 계 | 55 | 3800 | 117 | 3247863.24786325 | 30129950.2017537 |
8 | 위 | C16 | 계 | 60 | 4228 | 180.6 | 2341085.27131783 | 30129950.2017537 |
이 결과는 우리나라 전체 국민 중에 25세 미만, 65세 이상을 제외한 3000만 명을 1년간 추적했다는 결과이다. 우리는 1000만명을 추적관찰한 것임. 이에 따라 이의 약 1/3인 1000만 명을 평균 6.82년 추적 관찰한다면, 단순 계산으로는 몇몇이 발생하는지 추정해볼 수 있다.
kosis4= kosis3 %>%
mutate(predic_7years = as.numeric(case)*6.82/3) %>%
mutate(total_observed_cancer = sum(predic_7years))
kosis4 %>% htmlTable()
type1 | type2 | gender | agegp | case | cr100 | pyear | tpyer | predic_7years | total_observed_cancer | |
---|---|---|---|---|---|---|---|---|---|---|
1 | 위 | C16 | 계 | 25 | 85 | 2.5 | 3400000 | 30129950.2017537 | 193.233333333333 | 36232.3866666667 |
2 | 위 | C16 | 계 | 30 | 314 | 7.8 | 4025641.02564103 | 30129950.2017537 | 713.826666666667 | 36232.3866666667 |
3 | 위 | C16 | 계 | 35 | 667 | 16.2 | 4117283.95061728 | 30129950.2017537 | 1516.31333333333 | 36232.3866666667 |
4 | 위 | C16 | 계 | 40 | 1386 | 30.4 | 4559210.52631579 | 30129950.2017537 | 3150.84 | 36232.3866666667 |
5 | 위 | C16 | 계 | 45 | 1999 | 48.2 | 4147302.90456431 | 30129950.2017537 | 4544.39333333333 | 36232.3866666667 |
6 | 위 | C16 | 계 | 50 | 3459 | 80.599999999999994 | 4291563.27543424 | 30129950.2017537 | 7863.46 | 36232.3866666667 |
7 | 위 | C16 | 계 | 55 | 3800 | 117 | 3247863.24786325 | 30129950.2017537 | 8638.66666666667 | 36232.3866666667 |
8 | 위 | C16 | 계 | 60 | 4228 | 180.6 | 2341085.27131783 | 30129950.2017537 | 9611.65333333333 | 36232.3866666667 |
kosis_obs = kosis4 %>% pull(total_observed_cancer) %>% unique()
예측되는 총 발생수는 3.6232387^{4} 이다.
우리 nhis 데이터 중에 위암을 확인해 보자
base1= base %>%
mutate(sex_type = ifelse(is.na(sex_type), 0, sex_type)) %>%
filter(disease =="60") %>%
filter(sex_type ==0) %>%
mutate(total_observed_cancer = sum(as.numeric(observed)))
nhis_obs=33410
base1 %>% select(-c(disease,disease,reference_observed_rate))
## # A tibble: 8 × 5
## sex_type agegp pm observed total_observed_cancer
## <dbl> <dbl> <dbl> <chr> <dbl>
## 1 0 1 146. 551 33410
## 2 0 2 153. 1284 33410
## 3 0 3 156. 2707 33410
## 4 0 4 139. 4150 33410
## 5 0 5 122. 6013 33410
## 6 0 6 93.1 7341 33410
## 7 0 7 52.9 6251 33410
## 8 0 8 29.5 5113 33410
error_cancer = sprintf("%.2f%%", (nhis_obs -kosis_obs)/kosis_obs *100)
error_cancer
## [1] "-7.79%"
우리 연구에서 2009년부터 2015년 동안 발생한 총 위암의 수는 3.341^{4}이다. 이를 kosis 데이터와 비교하면 -7.79% 차이가 난다. 이는 error일 수도 건강근로자 효과 일 수도 있다.
정리
Kosis 데이터는 모든 경제활동인구 (비 임금 근로자 표함), 모든 연령대 (65세 이상 포함, 25세 미만 포함)의 데이터이다. 반면에 nhis데이터는 임금 근로자(비 상용직은 건보 등록이 않되는 경우가 많음), 25-65세 근로자를 포함한다. 인구 수로는 약 1/3의 규모이다. 따라서 추적 관찰 년수 (person year)는 1/3 규모고, case 수도 1/3 규모이다. 여기서의 차이는 3%정도 였다. 이는 연령별 가중치의 차기가 하나의 원인이라고 판단된다. 암 발생은 당연히 인구수가 1/3정도 관찰되었으므로 발생수는 1/3 정도이나, crute rate (단순 율)은 큰 차이가 없었다. 7%의 차이가 있었다. 이는 kosis 는 암 발생을 비 경제활동을 포함하여 연령만을 통해 추산된 것도 하나의 이유이다. 이는 기존 논문에서는 근로자가 일반인구보다 더 건강하다는 건강근로자 효과를 일부 반영하는 결과로 판단된다.