본 보고서는 한국복지패널조사 19차 데이터를 기반으로 연령, 성별, 연령대에 따른 건강 만족도 차이를 분석하는 데 목적이 있습니다. 현대 사회에서 건강은 단순한 신체적 상태를 넘어 주관적 인식과 깊은 관련이 있습니다. 따라서 건강 만족도의 사회적 차이를 파악함으로써 정책적 대응과 사회복지 방향에 기여할 수 있습니다.
본 분석에 사용된 데이터는 한국보건사회연구원에서 매년 수집·공개하는
전국 대표 복지 조사인 한국복지패널조사 19차(KOWEPS 2024)의
koweps_h19_2024_beta1.sav 파일이다. 조사 대상은 전국 가구
및 가구원으로, 주요 변수로는 성별, 연령, 연령대, 그리고 주관적 건강
만족도가 포함되어 있습니다. 주요 변수 설명: gender: 성별 (남성, 여성)
age: 실제 나이 (연속형 변수) ageg: 연령대 (청년층, 중년층, 노년층)
health_sat: 건강 만족도 점수 (1~5점 척도
연구 목적에 맞게 다음과 같은 방식으로 데이터를 정제하고 가공하였습니다. 건강 만족도 평균 계산: 성별, 연령, 연령대별로 평균 건강 만족도를 계산 연령별 추세 시각화: LOESS 방법을 사용하여 연령 증가에 따른 건강 만족도 변화 추세 시각화 범주형 변수 처리: 성별 및 연령대 변수를 factor 처리하고 시각화를 위한 정렬 작업 수행 시각화 작업: ggplot2 패키지를 활용하여 막대그래프 및 추세선을 제작하고, 제목, 색상, 글꼴 등을 통일하여 가독성 확보
raw_data <- read_sav("/Users/wangxiaofan/Desktop/koweps_hpc19_2024_beta1.sav")# 원본 데이터
selected_data <- raw_data[, c("h19_g3", "h19_g4", "p1903_5")]# 대상 열 선택
cleaned_data <- selected_data[complete.cases(selected_data),]# NA 항목의 행 제거
colnames(cleaned_data) <- c("gender", "birth", "heal_sat")# 열 이름 변경
summary(cleaned_data$heal_sat)# 건강 만족도 개요
## Min. 1st Qu. Median Mean 3rd Qu. Max.
## 1.000 3.000 3.000 3.241 4.000 5.000
cleaned_data$gender <- ifelse(cleaned_data$gender == 1, "남성", "여성")# 성별 할당
table(cleaned_data$gender)# 성별 분포
##
## 남성 여성
## 5472 7243
summary(cleaned_data$birth)# 출생연도 개요
## Min. 1st Qu. Median Mean 3rd Qu. Max.
## 1922 1948 1961 1964 1979 2006
cleaned_data$age <- 2025 - cleaned_data$birth# 나이
cleaned_data <- cleaned_data %>%
mutate(ageg = ifelse(age < 30, "청년층",
ifelse(age <= 59, "중년층", "노년층")))# 연령 파생 변수
cleaned_data <- cleaned_data %>%
mutate(satg = ifelse(heal_sat == c("1", "2"), "청년층",
ifelse(heal_sat == "3", "중년층", "노년층")))# 건강 만족도 파생 변수
## Warning: There was 1 warning in `mutate()`.
## ℹ In argument: `satg = ifelse(...)`.
## Caused by warning in `heal_sat == c("1", "2")`:
## ! longer object length is not a multiple of shorter object length
gender_sat <- cleaned_data %>%
group_by(gender) %>%
summarise(mean_sat_gender = round(mean(heal_sat), 2)) %>%
arrange(desc(mean_sat_gender))
gender_sat
## # A tibble: 2 × 2
## gender mean_sat_gender
## <chr> <dbl>
## 1 남성 3.36
## 2 여성 3.15
age_sat <- cleaned_data %>%
group_by(age) %>%
summarise(mean_sat_age = mean(heal_sat))
age_sat
## # A tibble: 85 × 2
## age mean_sat_age
## <dbl> <dbl>
## 1 19 4.33
## 2 20 4
## 3 21 3.98
## 4 22 3.98
## 5 23 3.96
## 6 24 3.84
## 7 25 3.92
## 8 26 3.90
## 9 27 3.99
## 10 28 3.87
## # ℹ 75 more rows
ageg_sat <- cleaned_data %>%
group_by(ageg) %>%
summarise(mean_sat_ageg = round(mean(heal_sat), 2))
ageg_sat
## # A tibble: 3 × 2
## ageg mean_sat_ageg
## <chr> <dbl>
## 1 노년층 2.9
## 2 중년층 3.63
## 3 청년층 3.91
sat_pct <- cleaned_data %>%
group_by(satg) %>%
summarise(n = n()) %>%
mutate(total = sum(n)) %>%
mutate(pct_sat = round(n/total*100, 2))
sat_pct
## # A tibble: 3 × 4
## satg n total pct_sat
## <chr> <int> <int> <dbl>
## 1 노년층 7485 12715 58.9
## 2 중년층 3752 12715 29.5
## 3 청년층 1478 12715 11.6
ggplot(data = gender_sat, aes(x = reorder(gender, -mean_sat_gender), y = mean_sat_gender)) +
geom_col(stat = "identity", fill = c("#104680", "#6dadd1"), width = 0.4) +
geom_text(aes(label = mean_sat_gender), vjust = -1.5) +
scale_y_continuous(limits = c(0, 4)) +
ggtitle("성별별 건강 만족도") +
theme(plot.title = element_text(face = "bold", hjust = 0.5, size = 15, color = "darkblue")) +
labs(x = "성별", y = "건강 만족도")
## Warning in geom_col(stat = "identity", fill = c("#104680", "#6dadd1"), width =
## 0.4): Ignoring unknown parameters: `stat`
theme(text = element_text(family = "NanumGothic"))
## List of 1
## $ text:List of 11
## ..$ family : chr "NanumGothic"
## ..$ face : NULL
## ..$ colour : NULL
## ..$ size : NULL
## ..$ hjust : NULL
## ..$ vjust : NULL
## ..$ angle : NULL
## ..$ lineheight : NULL
## ..$ margin : NULL
## ..$ debug : NULL
## ..$ inherit.blank: logi FALSE
## ..- attr(*, "class")= chr [1:2] "element_text" "element"
## - attr(*, "class")= chr [1:2] "theme" "gg"
## - attr(*, "complete")= logi FALSE
## - attr(*, "validate")= logi TRUE
ggplot(data = age_sat, aes(x = age, y = mean_sat_age)) +
geom_line() +
stat_smooth(color = "#FC4E07", method = "auto") +
ggtitle("연령에 따른 건강 만족도") +
theme(plot.title = element_text(face = "bold", hjust = 0.5, size = 15, color = "darkblue")) +
labs(x = "연령", y = "건강 만족도")
## `geom_smooth()` using method = 'loess' and formula = 'y ~ x'
theme(text = element_text(family = "NanumGothic"))
## List of 1
## $ text:List of 11
## ..$ family : chr "NanumGothic"
## ..$ face : NULL
## ..$ colour : NULL
## ..$ size : NULL
## ..$ hjust : NULL
## ..$ vjust : NULL
## ..$ angle : NULL
## ..$ lineheight : NULL
## ..$ margin : NULL
## ..$ debug : NULL
## ..$ inherit.blank: logi FALSE
## ..- attr(*, "class")= chr [1:2] "element_text" "element"
## - attr(*, "class")= chr [1:2] "theme" "gg"
## - attr(*, "complete")= logi FALSE
## - attr(*, "validate")= logi TRUE
ggplot(data = ageg_sat, aes(x = reorder(ageg, -mean_sat_ageg), y = mean_sat_ageg)) +
geom_col(stat = "identity", fill = c("#6dadd1", "#f6b293", "#b72230"), width = 0.4) +
geom_text(aes(label = mean_sat_ageg), vjust = -1.5) +
scale_y_continuous(limits = c(0, 5)) +
ggtitle("연령대별 건강 만족도") +
theme(plot.title = element_text(face = "bold", hjust = 0.5, size = 15, color = "darkblue")) +
labs(x = "연령대", y = "건강 만족도")
## Warning in geom_col(stat = "identity", fill = c("#6dadd1", "#f6b293",
## "#b72230"), : Ignoring unknown parameters: `stat`
theme(text = element_text(family = "NanumGothic"))
## List of 1
## $ text:List of 11
## ..$ family : chr "NanumGothic"
## ..$ face : NULL
## ..$ colour : NULL
## ..$ size : NULL
## ..$ hjust : NULL
## ..$ vjust : NULL
## ..$ angle : NULL
## ..$ lineheight : NULL
## ..$ margin : NULL
## ..$ debug : NULL
## ..$ inherit.blank: logi FALSE
## ..- attr(*, "class")= chr [1:2] "element_text" "element"
## - attr(*, "class")= chr [1:2] "theme" "gg"
## - attr(*, "complete")= logi FALSE
## - attr(*, "validate")= logi TRUE
ggplot(data = sat_pct, aes(x = " ", y = pct_sat, fill = satg)) +
geom_bar(stat = "identity") +
theme_void() +
coord_polar("y", start = 0) +
geom_text(aes(label = paste0(round(pct_sat, 1), "%")), position = position_stack(vjust = 0.5), color = "black", size = 5) +
ggtitle("전체 건강 만족도") +
theme(plot.title = element_text(face = "bold", hjust = 0.5, size = 15, color = "darkblue"))
theme(text = element_text(family = "NanumGothic"))
## List of 1
## $ text:List of 11
## ..$ family : chr "NanumGothic"
## ..$ face : NULL
## ..$ colour : NULL
## ..$ size : NULL
## ..$ hjust : NULL
## ..$ vjust : NULL
## ..$ angle : NULL
## ..$ lineheight : NULL
## ..$ margin : NULL
## ..$ debug : NULL
## ..$ inherit.blank: logi FALSE
## ..- attr(*, "class")= chr [1:2] "element_text" "element"
## - attr(*, "class")= chr [1:2] "theme" "gg"
## - attr(*, "complete")= logi FALSE
## - attr(*, "validate")= logi TRUE
#결론
본 연구는 2024년 한국복지패널 데이터를 바탕으로 건강 만족도에 대한 성별, 연령, 연령대 차이를 분석하였습니다. 주요 결론은 다음과 같습니다. 1. 성별 차이: 남성의 건강 만족도(3.36)가 여성(3.15)보다 전반적으로 높게 나타났으며, 이는 남성이 자기 건강에 대해 더 긍정적으로 인식함을 시사합니다. 2. 연령별 추세: 연령이 증가할수록 건강 만족도는 전반적으로 감소하며, 특히 중장년층부터 큰 폭으로 하락하다가 80세 이후에는 다소 상승하는 경향이 나타났습니다. 3. 연령대별 비교: 청년층(3.91)의 건강 만족도가 가장 높고, 중년층(3.63), 노년층(2.90) 순으로 뚜렷한 차이를 보였습니다.
이와 같은 분석 결과는 성별과 연령(또는 연령대)이 건강 만족도에 영향을 미치는 중요한 요인임을 보여줍니다. 따라서 향후 건강 정책 및 사회적 지원 체계 수립 시, 노년층과 여성의 주관적 건강 인식을 고려하는 것이 전체 국민의 삶의 질 향상에 기여할 수 있습니다.