Kosis and Nhis comparison

데이터 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 는 암 발생을 비 경제활동을 포함하여 연령만을 통해 추산된 것도 하나의 이유이다. 이는 기존 논문에서는 근로자가 일반인구보다 더 건강하다는 건강근로자 효과를 일부 반영하는 결과로 판단된다.