library(foreign)
library(dplyr)
##
## 다음의 패키지를 부착합니다: 'dplyr'
## The following objects are masked from 'package:stats':
##
## filter, lag
## The following objects are masked from 'package:base':
##
## intersect, setdiff, setequal, union
library(ggplot2)
library(readxl)
library(widyr)
library(xts)
## 필요한 패키지를 로딩중입니다: zoo
##
## 다음의 패키지를 부착합니다: 'zoo'
## The following objects are masked from 'package:base':
##
## as.Date, as.Date.numeric
##
## ######################### Warning from 'xts' package ##########################
## # #
## # The dplyr lag() function breaks how base R's lag() function is supposed to #
## # work, which breaks lag(my_xts). Calls to lag(my_xts) that you type or #
## # source() into this session won't work correctly. #
## # #
## # Use stats::lag() to make sure you're not using dplyr::lag(), or you can add #
## # conflictRules('dplyr', exclude = 'lag') to your .Rprofile to stop #
## # dplyr from breaking base R's lag() function. #
## # #
## # Code in packages is not affected. It's protected by R's namespace mechanism #
## # Set `options(xts.warn_dplyr_breaks_lag = FALSE)` to suppress this warning. #
## # #
## ###############################################################################
##
## 다음의 패키지를 부착합니다: 'xts'
## The following objects are masked from 'package:dplyr':
##
## first, last
최근 “의대 증원”을 두고 정부와 대한의사협회는 갈등을 겪고 있으며 이로 인해 “의사 총파업”까지 이어지고 있다. 필자는 최근 의대 증원에 대한 뉴스를 보며 의대생인 오빠와 “의대생증원”과 “의사총파업”에 대한 이야기를 나누던 중중 의대 증원을 반대하는 입장의 주장을 듣게 되었다.
그들의 주장에 의하면 의대생이 증가할 경우 의료서비스 이용의 불평등은 심화될 수 있다는 것이 우려점이다. 우리나라는 건강보험이 적용되는 급여와 그렇지 않은 급여로 나뉘어있다. 증원된 의사가 비필수 의료로 가서 시장이 포화될 경우, 시장에서 살아남기 위한 의사들은 민간의료보험을 통해 수익을 얻고자하여 각종 불필요한 처치를 권하게 될 것이다. 의학 지식은 전문 지식이기에 환자들은 의사의 말을 믿을 수 밖에 없다. 국가는 늘어가는 부양인구에 따라 급여의 항목을 제한할 수 밖에 없고 비급여 부분이 민간의료보험 항목으로 넘어갈 경우 민간의료보험 비용의 인상으로 이어지며 소득이 낮은 사람들은 민간의료보험 조차 들지 못하게 되어 미국과 같은 민영화 상태에 놓일 위험이 크다는 것이다. 의료서비스 앞에서는 모두가 평등해지기 위해 노력해야하는데 이렇게 된다면 의료서비스의 불균형은 심화될 것이다.
대화 이후 평소에 자유롭게 이용하고있는 의료서비스가 누군가에겐 큰 부담이 될 수도 있다는 생각을 하게 되며 그 영향은 어느정도인지, 또한 오빠가 말한 우려점들이 실제로 발생하게 된다면 그 영향이 클지에 대한 궁금증이 생겼다. 그래서 현재 우리나라 의료서비스가 사회적 경제능력과 어떤 관련이 있는지, 또한 실제로 민간의료보험 가입여부가 의료서비스 이용에 어떤 영향을 알아보고자 하였다. 한국 복지 패널은 경제활동 상태, 민간의료보험 가입여부등에 따른 의료서비스 혜택을 누리는 정도를 파악하기 위한 조사로 복지에 대한 인식을 명확하게 알 수 있을 것으로 기대되며 이를 통해 앞으로 우리 사회의 의료서비스 체제가 어떤 목적을 갖고 복지를 제공해야하는지 방향성을 제시하는 연구가 되길 기대한다.
의료서비스 이용에 경제활동 및 소득이 미치는 영향을 파악하고자 했다. 우선, 세부적으로 따지기 전에 우리나라 전반적인 소득과 의료서비스 이용을 파악하기 위해 최신 통계인 2023년 18차를 기준으로 3년주기의 데이터를 활용하고자 3/6/9/12/15/18차 한국복지패널데이터를 사용하였다.
세부적으로 소득수준별 의료서비스이용정도를 비교하기 위해 최신 통계인 2023년 18차 한국복지패널데이터를 사용했다. 소득수준은 일시적으로 발생하는 비용이 아닌 정기적이고 재현가능성이 높은 소득인 경상소득을 기준으로 파악하였다. 또한 소득의 분위는 임의로 하위 25%미만을을 1분위, 하위 25%이상 하위 50%미만을 2분위, 하위 50%이상 하위 75%미만을 3분위, 하위 75%이상을 4분위로 구분하였다.
의료서비스의 불평등 정도를 연구하기 위해서 소득분위별로 ‘보건의료비’, ‘1년간 의료기관 이용’, ‘1년간 건강검진 횟수’, ‘주로 이용하는 의료기관 형태’, ’민간의료보험 가입여부’를 비교했다.이때, ’민간의료보험 가입여부’는 ’민간의료가입 건수’에 대한 조사를 이용하였다.
민간의료보험 가입의 비용적 측면에서의 영향을 알아보기 위해 민간의료보험 가입자와 비가입자를 구분하여 ‘보건의료비’ 항목에서 소득분위별로 비교하였다.
# 데이터 불러오기기
data3rd_i <- read.spss(file = "Koweps_hpda03_2008_beta18.sav",
to.data.frame = T)
## Warning in read.spss(file = "Koweps_hpda03_2008_beta18.sav", to.data.frame =
## T): Koweps_hpda03_2008_beta18.sav: Compression bias (0) is not the usual value
## of 100
data3rd_m <- read.spss(file = "Koweps_h03_2008_beta18.sav",
to.data.frame = T)
## Warning in read.spss(file = "Koweps_h03_2008_beta18.sav", to.data.frame = T):
## Koweps_h03_2008_beta18.sav: Compression bias (0) is not the usual value of 100
data6th_i <- read.spss(file = "Koweps_hpda06_2011_beta14.sav",
to.data.frame = T)
## Warning in read.spss(file = "Koweps_hpda06_2011_beta14.sav", to.data.frame =
## T): Koweps_hpda06_2011_beta14.sav: Compression bias (0) is not the usual value
## of 100
## Warning in read.spss(file = "Koweps_hpda06_2011_beta14.sav", to.data.frame =
## T): Koweps_hpda06_2011_beta14.sav: Very long string record(s) found (record
## type 7, subtype 14), each will be imported in consecutive separate variables
data6th_m <- read.spss(file = "Koweps_h06_2011_beta14.sav",
to.data.frame = T)
## Warning in read.spss(file = "Koweps_h06_2011_beta14.sav", to.data.frame = T):
## Koweps_h06_2011_beta14.sav: Compression bias (0) is not the usual value of 100
## Warning in read.spss(file = "Koweps_h06_2011_beta14.sav", to.data.frame = T):
## Koweps_h06_2011_beta14.sav: Very long string record(s) found (record type 7,
## subtype 14), each will be imported in consecutive separate variables
data9th_i <- read.spss(file = "Koweps_hpda09_2014_beta10.sav",
to.data.frame = T)
## Warning in read.spss(file = "Koweps_hpda09_2014_beta10.sav", to.data.frame =
## T): Koweps_hpda09_2014_beta10.sav: Compression bias (0) is not the usual value
## of 100
## Warning in read.spss(file = "Koweps_hpda09_2014_beta10.sav", to.data.frame =
## T): Koweps_hpda09_2014_beta10.sav: Very long string record(s) found (record
## type 7, subtype 14), each will be imported in consecutive separate variables
data9th_m <- read.spss(file = "Koweps_h09_2014_beta10.sav",
to.data.frame = T)
## Warning in read.spss(file = "Koweps_h09_2014_beta10.sav", to.data.frame = T):
## Koweps_h09_2014_beta10.sav: Compression bias (0) is not the usual value of 100
## Warning in read.spss(file = "Koweps_h09_2014_beta10.sav", to.data.frame = T):
## Koweps_h09_2014_beta10.sav: Very long string record(s) found (record type 7,
## subtype 14), each will be imported in consecutive separate variables
data12th_i <- read.spss(file = "Koweps_hpda12_2017_beta7.sav",
to.data.frame = T)
## Warning in read.spss(file = "Koweps_hpda12_2017_beta7.sav", to.data.frame = T):
## Koweps_hpda12_2017_beta7.sav: Compression bias (0) is not the usual value of
## 100
## Warning in read.spss(file = "Koweps_hpda12_2017_beta7.sav", to.data.frame = T):
## Koweps_hpda12_2017_beta7.sav: Very long string record(s) found (record type 7,
## subtype 14), each will be imported in consecutive separate variables
data12th_m <- read.spss(file = "Koweps_h12_2017_beta7.sav",
to.data.frame = T)
## Warning in read.spss(file = "Koweps_h12_2017_beta7.sav", to.data.frame = T):
## Koweps_h12_2017_beta7.sav: Compression bias (0) is not the usual value of 100
## Warning in read.spss(file = "Koweps_h12_2017_beta7.sav", to.data.frame = T):
## Koweps_h12_2017_beta7.sav: Very long string record(s) found (record type 7,
## subtype 14), each will be imported in consecutive separate variables
data15th_i <- read.spss(file = "Koweps_hpda15_2020_beta4.sav",
to.data.frame = T)
## Warning in read.spss(file = "Koweps_hpda15_2020_beta4.sav", to.data.frame = T):
## Koweps_hpda15_2020_beta4.sav: Compression bias (0) is not the usual value of
## 100
## Warning in read.spss(file = "Koweps_hpda15_2020_beta4.sav", to.data.frame = T):
## Koweps_hpda15_2020_beta4.sav: Very long string record(s) found (record type 7,
## subtype 14), each will be imported in consecutive separate variables
data15th_m <- read.spss(file = "Koweps_h15_2020_beta4.sav",
to.data.frame = T)
## Warning in read.spss(file = "Koweps_h15_2020_beta4.sav", to.data.frame = T):
## Koweps_h15_2020_beta4.sav: Compression bias (0) is not the usual value of 100
## Warning in read.spss(file = "Koweps_h15_2020_beta4.sav", to.data.frame = T):
## Koweps_h15_2020_beta4.sav: Very long string record(s) found (record type 7,
## subtype 14), each will be imported in consecutive separate variables
data18th_i <- read.spss(file = "Koweps_h18_2023_beta1.sav",
to.data.frame = T)
## Warning in read.spss(file = "Koweps_h18_2023_beta1.sav", to.data.frame = T):
## Koweps_h18_2023_beta1.sav: Compression bias (0) is not the usual value of 100
## Warning in read.spss(file = "Koweps_h18_2023_beta1.sav", to.data.frame = T):
## Koweps_h18_2023_beta1.sav: Very long string record(s) found (record type 7,
## subtype 14), each will be imported in consecutive separate variables
data18th_m <- read.spss(file = "Koweps_hpda18_2023_beta1.sav",
to.data.frame = T)
## Warning in read.spss(file = "Koweps_hpda18_2023_beta1.sav", to.data.frame = T):
## Koweps_hpda18_2023_beta1.sav: Compression bias (0) is not the usual value of
## 100
## Warning in read.spss(file = "Koweps_hpda18_2023_beta1.sav", to.data.frame = T):
## Koweps_hpda18_2023_beta1.sav: Very long string record(s) found (record type 7,
## subtype 14), each will be imported in consecutive separate variables
data1 <- read.spss(file = "Koweps_h18_2023_beta1.sav",
to.data.frame = T)
## Warning in read.spss(file = "Koweps_h18_2023_beta1.sav", to.data.frame = T):
## Koweps_h18_2023_beta1.sav: Compression bias (0) is not the usual value of 100
## Warning in read.spss(file = "Koweps_h18_2023_beta1.sav", to.data.frame = T):
## Koweps_h18_2023_beta1.sav: Very long string record(s) found (record type 7,
## subtype 14), each will be imported in consecutive separate variables
data2 <- read.spss(file = "Koweps_hpda18_2023_beta1.sav",
to.data.frame = T)
## Warning in read.spss(file = "Koweps_hpda18_2023_beta1.sav", to.data.frame = T):
## Koweps_hpda18_2023_beta1.sav: Compression bias (0) is not the usual value of
## 100
## Warning in read.spss(file = "Koweps_hpda18_2023_beta1.sav", to.data.frame = T):
## Koweps_hpda18_2023_beta1.sav: Very long string record(s) found (record type 7,
## subtype 14), each will be imported in consecutive separate variables
# 복사본 만들기기
data_new1 <- data1 #2023년 데이터
data_new2 <- data2 #20223년 데이터
# 특성 변수 선택하기 및 변수명 바꾸기
data_new1 <- data_new1 %>% select(가구패널= h18_id, #가구패널식별코드
보건의료비 = h1807_3aq8) #월평균 보건의료비
data_new2 <- data_new2 %>% select(가구패널 = h18_id, #가구패널식별코드
경상소득 = h18_cin, #1년간 경상소득
의료기관이용 = h18_med3, #1년간 의료기관 이용 횟수
건강검진횟수 = h18_med8, #1년간 건강검진 받은 횟수
의료기관형태 = h18_med7, #주로 이용하는 의료기관형태
민간의료보험 = h18_med10 ) #민간의료보험가입 횟수
data3rd_i <- data3rd_i %>% select(가구패널 = h03_id, #2008년 데이터
보건의료비08 = h0307_3aq8)
data6th_i <- data6th_i %>% select(가구패널 = h06_id, #2011년 데이터
보건의료비11 = h0607_3aq8 )
data9th_i <- data9th_i %>% select(가구패널 = h09_id, #2014년 데이터
보건의료비14 = h0907_3aq8)
data12th_i <- data12th_i %>% select(가구패널 = h12_id, #2017년 데이터
보건의료비17 = h1207_3aq8)
data15th_i <- data15th_i %>% select(가구패널 = h15_id, #2020년 데이터
보건의료비20 = h1507_3aq8)
data18th_i <- data18th_i %>% select(가구패널 = h18_id, #2023년 데이터
보건의료비23 = h1807_3aq8)
data3rd_m <- data3rd_m %>% select(가구패널 = h03_id, #2008년 데이터
경상소득08 = h03_cin)
data6th_m <- data6th_m %>% select(가구패널 = h06_id, #2011년 데이터
경상소득11 = h06_cin)
data9th_m <- data9th_m %>% select(가구패널 = h09_id, #2014년 데이터
경상소득14 = h09_cin)
data12th_m <- data12th_m %>% select(가구패널 = h12_id, #2017년 데이터
경상소득17 = h12_cin)
data15th_m <- data15th_m %>% select(가구패널 = h15_id, #2020년 데이터
경상소득20 = h15_cin)
data18th_m <- data18th_m %>% select(가구패널 = h18_id, #2023년 데이터
경상소득23 = h18_cin)
#연간추이를 살펴보기 위한 그래프 합치기기
datayear_i <- data3rd_i %>%
left_join(data6th_i, by = "가구패널") %>%
left_join(data9th_i, by = "가구패널") %>%
left_join(data12th_i, by = "가구패널") %>%
left_join(data15th_i, by = "가구패널") %>%
left_join(data18th_i, by = "가구패널")
## Warning in left_join(., data6th_i, by = "가구패널"): Detected an unexpected many-to-many relationship between `x` and `y`.
## ℹ Row 2 of `x` matches multiple rows in `y`.
## ℹ Row 2 of `y` matches multiple rows in `x`.
## ℹ If a many-to-many relationship is expected, set `relationship =
## "many-to-many"` to silence this warning.
## Warning in left_join(., data9th_i, by = "가구패널"): Detected an unexpected many-to-many relationship between `x` and `y`.
## ℹ Row 6 of `x` matches multiple rows in `y`.
## ℹ Row 3 of `y` matches multiple rows in `x`.
## ℹ If a many-to-many relationship is expected, set `relationship =
## "many-to-many"` to silence this warning.
## Warning in left_join(., data12th_i, by = "가구패널"): Detected an unexpected many-to-many relationship between `x` and `y`.
## ℹ Row 6 of `x` matches multiple rows in `y`.
## ℹ Row 3 of `y` matches multiple rows in `x`.
## ℹ If a many-to-many relationship is expected, set `relationship =
## "many-to-many"` to silence this warning.
## Warning in left_join(., data15th_i, by = "가구패널"): Detected an unexpected many-to-many relationship between `x` and `y`.
## ℹ Row 14 of `x` matches multiple rows in `y`.
## ℹ Row 2 of `y` matches multiple rows in `x`.
## ℹ If a many-to-many relationship is expected, set `relationship =
## "many-to-many"` to silence this warning.
## Warning in left_join(., data18th_i, by = "가구패널"): Detected an unexpected many-to-many relationship between `x` and `y`.
## ℹ Row 5581 of `x` matches multiple rows in `y`.
## ℹ Row 2 of `y` matches multiple rows in `x`.
## ℹ If a many-to-many relationship is expected, set `relationship =
## "many-to-many"` to silence this warning.
datayear_m <- data3rd_m %>%
left_join(data6th_m, by = "가구패널") %>%
left_join(data9th_m, by = "가구패널") %>%
left_join(data12th_m, by = "가구패널") %>%
left_join(data15th_m, by = "가구패널") %>%
left_join(data18th_m, by = "가구패널")
## Warning in left_join(., data6th_m, by = "가구패널"): Detected an unexpected many-to-many relationship between `x` and `y`.
## ℹ Row 23 of `x` matches multiple rows in `y`.
## ℹ Row 29 of `y` matches multiple rows in `x`.
## ℹ If a many-to-many relationship is expected, set `relationship =
## "many-to-many"` to silence this warning.
## Warning in left_join(., data9th_m, by = "가구패널"): Detected an unexpected many-to-many relationship between `x` and `y`.
## ℹ Row 17 of `x` matches multiple rows in `y`.
## ℹ Row 21 of `y` matches multiple rows in `x`.
## ℹ If a many-to-many relationship is expected, set `relationship =
## "many-to-many"` to silence this warning.
## Warning in left_join(., data12th_m, by = "가구패널"): Detected an unexpected many-to-many relationship between `x` and `y`.
## ℹ Row 17 of `x` matches multiple rows in `y`.
## ℹ Row 14 of `y` matches multiple rows in `x`.
## ℹ If a many-to-many relationship is expected, set `relationship =
## "many-to-many"` to silence this warning.
## Warning in left_join(., data15th_m, by = "가구패널"): Detected an unexpected many-to-many relationship between `x` and `y`.
## ℹ Row 25 of `x` matches multiple rows in `y`.
## ℹ Row 12 of `y` matches multiple rows in `x`.
## ℹ If a many-to-many relationship is expected, set `relationship =
## "many-to-many"` to silence this warning.
## Warning in left_join(., data18th_m, by = "가구패널"): Detected an unexpected many-to-many relationship between `x` and `y`.
## ℹ Row 4 of `x` matches multiple rows in `y`.
## ℹ Row 22 of `y` matches multiple rows in `x`.
## ℹ If a many-to-many relationship is expected, set `relationship =
## "many-to-many"` to silence this warning.
# 경상소득 변수 검토 및 전처리
class(data_new2$경상소득)
## [1] "numeric"
table(is.na(data_new2$경상소득)) #경상소득득 변수에 결측치가 없다
##
## FALSE
## 15931
# 파생변수 만들기 - 소득 몇분위에 해당하는가?
boxplot(data_new2$경상소득)$stats
## [,1]
## [1,] -2165
## [2,] 2514
## [3,] 5433
## [4,] 8805
## [5,] 18229
summary(data_new2$경상소득)
## Min. 1st Qu. Median Mean 3rd Qu. Max.
## -2165 2514 5433 6352 8805 63860
data_new2$경상소득분위 <- ifelse(data_new2$경상소득<2514,"1분위",
ifelse(data_new2$경상소득<5433, "2분위",
ifelse(data_new2$경상소득<8805, "3분위","4분위")))
class(data_new2$경상소득분위)
## [1] "character"
table(data_new2$경상소득분위)
##
## 1분위 2분위 3분위 4분위
## 3981 3983 3979 3988
table(is.na(data_new2$경상소득분위)) # 소득분위 변수에는 결측치가 없다다
##
## FALSE
## 15931
비정기적인 소득을 제외하고 정기적인 소득인 경상소득을 기준으로 가구 별 소득 수준을 파악하였다. 1년간 벌어들인 경상소득의 변수명을 ’경상소득’이라고 하였으며 그 단위는 만원이다. 소득수준은 임의로 1-4분위로 나누어서 파악하였다. 경상소득의 하위 25% 미만을 “1분위”, 하위 25% 이상 하위 50%미만을 “2분위”, 하위 50%이상 하위 75%미만을 “3분위”, 하위 75%이상을 “4분위”로 구분하였다.
# 의료기관형태 변수 검토 및 전처리리
class(data_new2$의료기관형태)
## [1] "numeric"
table(data_new2$의료기관형태) #의료기관형태 변수에 이상치가 없다
##
## 0 1 2 3 4 5 6 7
## 1257 1814 12164 200 126 3 357 10
table(is.na(data_new2$의료기관형태)) #의료기관형태 변수에 결측치가 없다
##
## FALSE
## 15931
#의료기관형태 항목 이름 부여
data_new2$의료기관형태 <- ifelse(data_new2$의료기관형태 == 0, "비해당",
ifelse(data_new2$의료기관형태 == 1, "종합,대학병원",
ifelse(data_new2$의료기관형태 == 2, "병,의원",
ifelse(data_new2$의료기관형태 == 3, "한방 병,의원",
ifelse(data_new2$의료기관형태 == 4, "보건소",
ifelse(data_new2$의료기관형태 == 5, "기타",
ifelse(data_new2$의료기관형태 == 6, "치과병,의원",
ifelse(data_new2$의료기관형태 == 7, "요양병원", NA))))))))
주로 이용하는 의료기관의 형태의 변수명을 ’의료기관형태’리고 하였으며 의료기관형태 항목에 이름을 각각 부여하여 그래프 항목을 알아보기 쉽도록 하였다.
# 민간의료보험 변수 검토 및 전처리리
class(data_new2$민간의료보험)
## [1] "numeric"
summary(data_new2$민간의료보험)
## Min. 1st Qu. Median Mean 3rd Qu. Max.
## 0.00 0.00 1.00 1.42 2.00 18.00
# 파생변수만들기 - 민간의료보험에 가입하였나?
data_new2$민간의료보험가입여부 <- ifelse(data_new2$민간의료보험 == 0, "NO", "YES")
table(data_new2$민간의료보험가입여부)
##
## NO YES
## 4831 11100
table(is.na(data_new2$민간의료보험가입여부)) #민간의료보험 변수에 결측치가 없다
##
## FALSE
## 15931
민간의료보험 변수에 대해서는 민간의료보험 가입 여부가 의료서비스 이용에 주는 영향을 파악해야한다. 즉, 민간의료보험 가입 여부가 파생변수로 필요하여 이를 “YES”, “NO” 답변으로만 구분하였다.
# 의료기관이용 변수 검토 및 전처리
class(data_new2$의료기관이용)
## [1] "numeric"
summary(data_new2$의료기관이용) #코드북에 의거하여 범위 제한이 없고 모름/무응답은 999로 코딩되어 있다. 그래서 이상치는 없다.
## Min. 1st Qu. Median Mean 3rd Qu. Max.
## 0.00 3.00 9.00 15.35 18.00 383.00
table(is.na(data_new2$의료기관이용)) #의료기관이용 변수에 결측치가 없다
##
## FALSE
## 15931
# 보건의료비 변수 검토 및 전처리
class(data_new1$보건의료비)
## [1] "numeric"
summary(data_new1$보건의료비)
## Min. 1st Qu. Median Mean 3rd Qu. Max.
## 0.00 7.00 14.00 24.11 29.00 776.00
table(is.na(data_new1$보건의료비)) #보건의료비 변수에 결측치가 없다
##
## FALSE
## 7654
# 건강검진횟수 변수 검토 및 전처리리
class(data_new2$건강검진횟수)
## [1] "numeric"
summary(data_new2$건강검진횟수) #코드북에 의거하여 범위 제한이 없고 모름/무응답은 99로 코딩되어 있다. 그래서 이상치는 없다.
## Min. 1st Qu. Median Mean 3rd Qu. Max.
## 0.0000 0.0000 0.0000 0.4842 1.0000 9.0000
table(is.na(data_new2$건강검진횟수)) #건강검진횟수 변수에 결측치가 없다
##
## FALSE
## 15931
의료기관이용 변수, 보건의료비 변수, 건강검진횟수 변수, 그리고 민간의료보험 변수 모두 코딩북을 확인해보면 범위 제한이 없고 모름/무응답만 9999로 코딩되어 있다. 그러므로 0에 해당하는 응답은 결측처리가 아닌 의료기관이용, 보건의료비, 건강검진이용, 민간의료보험가입 이 없음으로 판단할려고 한다.
보건의료비는 월평균이용한 보건의료비로 그 단위는 만원이다.
#2023년데이터 합치기
data_new3 <- data_new2 %>% left_join(data_new1, by = "가구패널")
## Warning in left_join(., data_new1, by = "가구패널"): Detected an unexpected many-to-many relationship between `x` and `y`.
## ℹ Row 30 of `x` matches multiple rows in `y`.
## ℹ Row 4 of `y` matches multiple rows in `x`.
## ℹ If a many-to-many relationship is expected, set `relationship =
## "many-to-many"` to silence this warning.
data_new3 <- data_new3 %>% distinct() #중복되는 가구패널 제외하기기
2023년 전체데이터를 여러가지 형태로 활용할 예정이므로 2023년 데이터를 하나로 합쳐준다.
꺾은선 그래프를 통해 추이를 확인하고자 하였으나 꺾은선 그래프는 연속형 변수일 경우 확인할 수 있다. 그래서 연도가 바뀜에 따라 각각 평균경상소득과 평균의료비가 어떻게 바뀌는지의 상관관계를 확인할 수 있는 산점도를 이용했다. 두 그래프의 y축의 단위는 ’만원’이다.
# 경상소득분위별 연평균 소득의 변화
해당년도경상소득 <- datayear_m %>% select(가구패널,
"2008" = 경상소득08,
"2011" = 경상소득11,
"2014" = 경상소득14,
"2017" = 경상소득17,
"2020" = 경상소득20,
"2023" = 경상소득23)
해당년도경상소득평균 <- 해당년도경상소득 %>%
tidyr::pivot_longer(cols=`2008`:`2023`, names_to="연도", values_to="경상소득") %>%
group_by(연도) %>%
summarise(경상소득평균 = mean(경상소득, na.rm=T)) %>%
ungroup
ggplot(data = 해당년도경상소득평균, aes(x = 연도, y = 경상소득평균)) + geom_point()
# 경상소득분위별 평균의료비 변화
해당년도보건의료비 <- datayear_i %>% select(가구패널,
"2008" = 보건의료비08,
"2011" = 보건의료비11,
"2014" = 보건의료비14,
"2017" = 보건의료비17,
"2020" = 보건의료비20,
"2023" = 보건의료비23)
해당년도보건의료비평균<- 해당년도보건의료비 %>%
tidyr::pivot_longer(cols=`2008`:`2023`, names_to="연도", values_to="의료비") %>%
group_by(연도) %>%
summarise(의료비평균 = mean(의료비, na.rm=T)) %>%
ungroup
ggplot(data = 해당년도보건의료비평균, aes(x = 연도, y = 의료비평균)) + geom_point()
2008년부터 2023년까지 경상소득평균이 꾸준히 증가하였으며 이에 따라 월평균 의료비평균 또한 증가하였다. 이는 경제가 성장하고 물가가 상승함에 따라 발생한 것으로 유추할 수 있다. 즉, 물가상승으로 인한 변화만 있을 뿐 최신 통계인 2023년의 조사를 통해 연구하는 것이 대부분의 시기 및 보편적인 상황에 적용될 수 있음을 보인다.
소득수준과 의료서비스 이용의 관계를 파악하기 위해 각 소득분위별 평균을 기준으로 그 분위 내에서 의료서비스의 이용이 어느 정도 분포되어있는지 파악하고자 상자그림을 이용했으며 경상소득분위별 주로 이용하는 의료기관의 형태를 비교하기 위해서는 각 분위 별로 차지하는 비율을 비교할 수 있는 막대 그래프를 이용했다.
# 경상상소득분위별 연간 외래진료이용 횟수
U_m <- ggplot(data = data_new3, aes( x = 경상소득분위, y = 의료기관이용)) + geom_boxplot()
U_m
# 경상소득분위별 연간 건강검진 횟수
U_c <- ggplot(data = data_new3, aes( x = 경상소득분위, y = 건강검진횟수)) + geom_boxplot()
U_c
# 경상소득분위별 월평균 보건의료비
U_p <- ggplot(data = data_new3, aes( x = 경상소득분위, y = 보건의료비)) + geom_boxplot()
U_p
# 경상상소득분위별 주로 이용하는 의료기관 형태 비교
경상소득분위_이용의료기관 <- data_new3 %>%
group_by(경상소득분위, 의료기관형태) %>%
summarise(n = n()) %>%
mutate(tot_group =sum(n)) %>%
mutate(pct = round(n/tot_group*100))
## `summarise()` has grouped output by '경상소득분위'. You can override using the
## `.groups` argument.
경상소득분위_이용의료기관 <- data_new3 %>%
count(경상소득분위, 의료기관형태) %>%
group_by(경상소득분위) %>%
mutate(pct = round(n/sum(n)*100))
I <- ggplot(data = 경상소득분위_이용의료기관, aes(x = 경상소득분위, y = pct, fill = 의료기관형태) ) +
geom_col() +
coord_flip()
I
상자그림을 이용하여 분석한 결과 특이점을 발견했다. 1분위가 4분위에 비해 외래진료이용 횟수가 더 많은 것으로 파악된 반면, 월평균 소비되는 보건의료비는 더 적다는 점이다. 이는 경상소득분위별 주로 이용하는 의료기관의 형태를 비교한 것을 통해 유추할 수 있는데, 1분위의 보건소 이용 비율이 4분위의 보건소 이용 비율보다 높다. 즉, 1분위에 해당하는 가구는 무료, 혹은 적은 비용으로 이용할 수 있는 보건소를 이용했기에 이러한 결과가 나온다고 유추할 수 있다. 또한 건강검진의 횟수의 분포 및 평균이 4분위에 가까울수록 높은 것을 보아 소득수준이 낮을수록 필수적인 의료서비스를 우선적으로 이용함을 알 수 있다.
# 경상상소득분위별 의료비 체감 부담정도 - 경상상소득분위별 경상소득 대비 의료비 비율
data_new3 <- data_new3 %>%
mutate(pct = (보건의료비*12/경상소득)*100)
mean_pct <- data_new3 %>%
filter(!is.na(pct)) %>%
group_by(경상소득분위) %>%
summarise(mean_pct = mean(pct))
ggplot(data = mean_pct, aes(x = 경상소득분위, y = mean_pct)) + geom_col()
앞선 그래프들을 통해 소득수준이 낮은 가구의 의료서비스이용의 절대적 횟수가 높으나 지출되는 월평균 의료비용의 절대적 금액은 적다는 것을 알아냈다. 그러나 절대적 월평균 의료비용의 금액이 적더라도 소득수준별 체감하는 비용은 다를 것이라는 생각이 들어 각 소득분위 별 경상소득에서 의료비가 차지하는 비율을 구하여 비교하였다. 이때 보건의료비는 월평균 금액이며, 경상소득은 연간 기준이므로 월평균 금액에 12를 곱하여 1년 보건의료비와 가깝게 하였다.
그 결과 1분위는 대체적으로 소득에 비해 의료비에 들어가는 금액이 많으며 4분위의 경우 그렇지 않다는 것을 알 수 있다. 앞서 건강검진 이용 횟수 비교를 통해 유추한 바에 의하면 1분위 가구들은 당장 필요한 의료서비스를 이용한다. 즉 위 결과는 아프더라도 돈이 없어 병원에 가지 못하고 견뎌야하는 사람들이 있을 수 있음을 의미한다. 이는 누구나 아플 때 의료서비스를 누릴 수 있도록 보완점을 마련해야함을 시사한다.
# 경상상소득분위 별 민간의료보험 가입 비율
경상소득분위_가입여부 <- data_new2 %>%
group_by(경상소득분위, 민간의료보험가입여부) %>%
summarise(n = n()) %>%
mutate(tot_group =sum(n)) %>%
mutate(pct = round(n/tot_group*100))
## `summarise()` has grouped output by '경상소득분위'. You can override using the
## `.groups` argument.
경상소득분위_가입여부 <- data_new2 %>%
count(경상소득분위, 민간의료보험가입여부) %>%
group_by(경상소득분위) %>%
mutate(pct = round(n/sum(n)*100))
A <- ggplot(data = 경상소득분위_가입여부, aes(x = 경상소득분위, y = pct, fill = 민간의료보험가입여부) ) +
geom_col() +
coord_flip()
A
위 결과를 토대로 경상소득수준이 또한 민간의료보험 가입여부에에 영향을 줄
것이라 예측을 하고 이를 확인하기 위해 각 분위별 민간의료보험 가입여부의
비율을 비교하는 막대그래프를 이용했다. 그 결과 소득이 높을 수록
민간의료보험에 가입이 되어있는 비율이 높으며 4분위와 1분위의 가입 비율의
차이는 큰 것을 알 수 있다.
# 민간의료보험 가입자, 비가입자의 보건의료비, 연간 의료기관이용 횟, 연간 건강검진횟수의 평균 비교하기
insurance <- data_new3 %>%
filter(!is.na(보건의료비)) %>%
group_by(경상소득분위, 민간의료보험가입여부) %>%
summarise(보건의료비_평균 = mean(보건의료비))
## `summarise()` has grouped output by '경상소득분위'. You can override using the
## `.groups` argument.
ggplot(data = insurance, aes(x = 민간의료보험가입여부, y = 보건의료비_평균)) + geom_col()
ggplot(data = insurance, aes( x = 경상소득분위, y = 보건의료비_평균, fill = 민간의료보험가입여부))+
geom_col(position = "dodge") +
scale_x_discrete(limits = c("1분위", "2분위", "3분위", "4분위"))
민간의료비보험 가입여부가 의료서비스이용에 어떤 영향을 주는지 파악하고자
막대그래프를 통해 비교하였다. 우선적으로 민간의료보험 가입자의 월평균
보건의료비 평균은 미가입자에 비해 낮은 것을 알 수 있다. 즉,
민간의료보험이 사후적 예방 효과가 있음을 보여준다. 이를 각 소득분위별
가입자, 미가입자에게 어떤 영향을 주는지 확인하고자 하였다. 그 결과
2~4분위는 민간의료보험에 가입할 수록 부담하게 되는 평균비용이 더
적었으나 1분위에 경우 그렇지 못하였다. 이는 즉 민간의료보험 가입 자체가
1분위 가구들에게 부담을 준다는 것을 알 수 있다. 국민건강보험이 잘
이뤄지고 있는 우리나라 현재에도 이러한 소득으로 인한 의료서비스 이용 및
민간의료보험 가입에 한계를 발견할 수 있는데, 만약약 의대생 오빠의 주장과
같은 일이 발생하여 국민건강보험의 지원은 적어지고 민간의료보험의 비용이
커지게 된다면 의료이용의 불평등화는 더 심화될 수 있다는 우려점이
생긴다.
우선적으로 주목해야 할 점은, 정기적인 소득인 경상소득에 따라 의료서비스 이용정도 및 질의 정도가 다르다는 것을 알 수 있다. 이와 더불어 그래프 비교를 통해해 경상소득이 적을 수록 의료서비스 이용 횟수 및 비용은 적은 반면 해당 가구의 소비에서 차지하는 의료비용의 비율은 높음을 알 수 있다. 즉, 최소한의 의료서비스 이용도 이들이 체감하는 부담정도는 소득이 높은 가구에 비해 크게 느껴진다는 것을 알 수 있다. 이는 비용을 지불할 돈이 없어 진료를 포기하는 의료빈곤층이 존재함을 유추할 수 있다.
소득수준은 의료서비스이용 외에도 민간의료보험가입에도 영향을 준다. 민간의료보험을 가입하게 되면 사후 병원에서의 서비스를 받았을 때 일정부분 지원을 받을 수 있지만 일정부분 정기적인 비용을 지불해야한다. 그렇기 때문에 소득수준이 낮을 수록 민간의료보험의 가입비율은 낮으며 이 민간의료보험 가입여부에 따라 의료서비스이용이 달라짐을 알 수 있다. 민간의료보험에 가입한 경우 각각의 소득분위에서 미가입가구와 비교했을 때 의료서비스를 더 누리고 있음을 알 수 있다.
이 연구를 통해 의료 이용의 불평등은 지속되고 있음을 알 수 있기에 사회구조적 취약성을 가진 집단의 필요에 의한 의료이용이 제한되지 않도록 추가적인 의료안전망 정책이 필요하다고 본다. 또한 이번 연구를 통해 소득수준에 따라 민간의료 보험의 가입 여부가 크며 이에 대한 가입여부에 따라 누리는 의료서비스의 양과 질이 다르다는 것을 알 수 있다. 정치적인 견해와는 별개로 의대생인 오빠가 우려하는 부분이 충분한 고려대상이 된다고 파악하였으며, 모든 국민이 최소한의 보장된 삶을 누리기 위해서는 이러한 의료불평등을 최소화할 수 있는 방안을 마련하는 것이 우선적이라고 본다.