본 연구의 목적은 한국복지패널데이터를 활용하여 소득과 가족관계 간의 관계를 분석하는 것이다. 구체적으로 가처분소득을 기반으로 한 가구의 경제적 상태가 가족관계 만족도에 어떠한 영향을 미치는지를 탐색한다. 현대 사회에서과소득 수준은 개인의 삶의 질뿐 아니라 가족 간 관계에도 큰 영향을 끼친다. 이에 소득 수준과 가족 관계 만족도의 상관관계를 살펴봄으로써 복지정책 수립 및 사회적 안정성 향상에 중요한 시사점을 제공할 수 있다.
install.packages("haven") # .sav 파일 불러오기
## Installing package into '/cloud/lib/x86_64-pc-linux-gnu-library/4.4'
## (as 'lib' is unspecified)
install.packages("tidyverse") # 데이터 조작 및 시각화
## Installing package into '/cloud/lib/x86_64-pc-linux-gnu-library/4.4'
## (as 'lib' is unspecified)
install.packages("ggplot2") # 기술통계
## Installing package into '/cloud/lib/x86_64-pc-linux-gnu-library/4.4'
## (as 'lib' is unspecified)
install.packages("psych")
## Installing package into '/cloud/lib/x86_64-pc-linux-gnu-library/4.4'
## (as 'lib' is unspecified)
library(haven) # .sav 파일 불러오기
library(tidyverse) # 데이터 조작 및 시각화
## ── Attaching core tidyverse packages ──────────────────────── tidyverse 2.0.0 ──
## ✔ dplyr 1.1.4 ✔ readr 2.1.5
## ✔ forcats 1.0.0 ✔ stringr 1.5.1
## ✔ ggplot2 3.5.2 ✔ tibble 3.3.0
## ✔ lubridate 1.9.4 ✔ tidyr 1.3.1
## ✔ purrr 1.0.4
## ── Conflicts ────────────────────────────────────────── tidyverse_conflicts() ──
## ✖ dplyr::filter() masks stats::filter()
## ✖ dplyr::lag() masks stats::lag()
## ℹ Use the conflicted package (<http://conflicted.r-lib.org/>) to force all conflicts to become errors
library(ggplot2)
library(psych) # 기술통계
##
## Attaching package: 'psych'
##
## The following objects are masked from 'package:ggplot2':
##
## %+%, alpha
3-1. 파일 불러오기
데이터는 한국복지패널(KOWEPS)의 2024년도 최신 데이터를 활용하였다. 주요 파일은 다음과 같다:
• koweps_c19_2024_beta1.sav
• koweps_h19_2024_beta1.sav
• koweps_hpc19_2024_beta1.sav
• koweps_p19_2024_beta1.sav
# 가구코어파일
c_file <- read_sav("koweps_c19_2024_beta1.sav")
# 가구파일
h_file <- read_sav("koweps_h19_2024_beta1.sav")
# 가구통합파일
hpc_file <- read_sav("koweps_hpc19_2024_beta1.sav")
# 개인파일
p_file <- read_sav("koweps_p19_2024_beta1.sav")
3-2. 주요 변수 요약
이번 분석에서 사용할 주요 변수는 다음과 같다: • 소득 관련 변수: • h19_din: 가처분소득 • h19_cin: 경상소득
• 가족관계 만족도 변수:
• p1903_8: 가족관계 만족도
데이터의 전반적인 특성과 품질을 파악하기 위해 가구파일과 개인파일에서 분석에 필요한 변수들만 추출하여 데이터 크기를 줄이고, summary() 함수를 사용해 각 변수의 기본 통계량과 결측치를 하인하다.
# 가구파일에서 필요한 변수만 추출
h_data <- h_file %>%
select(h19_din, h19_cin)
# 개인파일에서 필요한 변수만 추출
p_data <- p_file %>%
select(p1903_8)
summary(h_data)
## h19_din h19_cin
## Min. :-24161 Min. :-22937
## 1st Qu.: 1688 1st Qu.: 1724
## Median : 3394 Median : 3604
## Mean : 4616 Mean : 5076
## 3rd Qu.: 6429 3rd Qu.: 7054
## Max. : 64322 Max. : 66314
summary(p_data)
## p1903_8
## Min. :1.000
## 1st Qu.:4.000
## Median :4.000
## Mean :3.911
## 3rd Qu.:4.000
## Max. :9.000
## NA's :842
가구파일(h_data)과 개인파일(p_data)에서 추출한 변수들의 이름을 분석하기 쉽도록 영어로 변경하는 작업을 수행하다. h_data에서는 가처분소득과 경상소득 변수명을 각각 disposable_income과 regular_income으로 바꾸고, p_data에서는 가족관계 만족도와 가족생활 만족도, 배우자 관계 만족도, 자녀 관계 만족도, 형제자매 관계 만족도 변수명을 각각 이해하기 쉬운 영어 이름으로 변경한 뒤, 변경된 데이터프레임을 출력한다.
h_data1 <- h_data %>%
rename(
disposable_income = h19_din,
regular_income = h19_cin)
p_data1 <- p_data %>%
rename(family_rel_satisfaction = p1903_8)
h_data1
## # A tibble: 7,499 × 2
## disposable_income regular_income
## <dbl> <dbl>
## 1 1354 1558
## 2 2874. 2947
## 3 2519 2531
## 4 6204 6468
## 5 934. 935
## 6 2729. 2737
## 7 2719 2731
## 8 941 941
## 9 8755 9295
## 10 3665 4037
## # ℹ 7,489 more rows
p_data1
## # A tibble: 13,557 × 1
## family_rel_satisfaction
## <dbl>
## 1 3
## 2 4
## 3 3
## 4 4
## 5 1
## 6 NA
## 7 NA
## 8 4
## 9 2
## 10 4
## # ℹ 13,547 more rows
데이터 결합
data <- bind_rows(h_data1, p_data1)
data
## # A tibble: 21,056 × 3
## disposable_income regular_income family_rel_satisfaction
## <dbl> <dbl> <dbl>
## 1 1354 1558 NA
## 2 2874. 2947 NA
## 3 2519 2531 NA
## 4 6204 6468 NA
## 5 934. 935 NA
## 6 2729. 2737 NA
## 7 2719 2731 NA
## 8 941 941 NA
## 9 8755 9295 NA
## 10 3665 4037 NA
## # ℹ 21,046 more rows
결측치가 있는 행 제거
data <- data %>% drop_na()
기술통계 확인
summary(data)
## disposable_income regular_income family_rel_satisfaction
## Min. : NA Min. : NA Min. : NA
## 1st Qu.: NA 1st Qu.: NA 1st Qu.: NA
## Median : NA Median : NA Median : NA
## Mean :NaN Mean :NaN Mean :NaN
## 3rd Qu.: NA 3rd Qu.: NA 3rd Qu.: NA
## Max. : NA Max. : NA Max. : NA
describe(data)
## Converted non-numeric matrix input to numeric. Are you sure you wanted to do this. Please check your data
## Warning in FUN(newX[, i], ...): no non-missing arguments to min; returning Inf
## Warning in FUN(newX[, i], ...): no non-missing arguments to min; returning Inf
## Warning in FUN(newX[, i], ...): no non-missing arguments to min; returning Inf
## Warning in FUN(newX[, i], ...): no non-missing arguments to max; returning -Inf
## Warning in FUN(newX[, i], ...): no non-missing arguments to max; returning -Inf
## Warning in FUN(newX[, i], ...): no non-missing arguments to max; returning -Inf
## vars n mean sd median trimmed mad min max range skew
## disposable_income* 1 0 NaN NA NA NaN NA Inf -Inf -Inf NA
## regular_income* 2 0 NaN NA NA NaN NA Inf -Inf -Inf NA
## family_rel_satisfaction* 3 0 NaN NA NA NaN NA Inf -Inf -Inf NA
## kurtosis se
## disposable_income* NA NA
## regular_income* NA NA
## family_rel_satisfaction* NA NA
4-1. 데이터 분석
가처분소득(disposable_income)을 기준으로 소득 수준을 분류하기 위해 작성되었다. 구체적으로, 가처분소득이펴평균인 4,616 이하인 경우 “low”, 그보다 높은 경우 “high”로 구분하여 disposable_income_sum이라는 새로운 범주형 변수를 생성하였다. 소득 수준에 따른 집단 간 차이를 비교·분석하기 위해 소득 집단을 이분화하는 것이다. 이후 table() 함수를 사용하여 각 소득 그룹의 관측치 개수를 확인하여 데이터 분포를 점검하였다.
h_data1<- h_data1 %>%
mutate(disposable_income_sum = ifelse(disposable_income <= 4616, "low","high"))
# 데이터 획인
table(h_data1$disposable_income_sum)
##
## high low
## 2846 4653
가족관계 만족도(family_rel_satisfaction) 변수를 이용하여 만족도를 두 그룹으로 분류하는 작업을 수행한다. 구체적으로, 가족관계 만족도 값이 1점 또는 2점인 경우 “low”로, 그 외의 경우 “high”로 분류하여 family_rel_satisfaction_sum이라는 새로운 범주형 변수를 생성하였다. 이 작업의 목적은 낮은 만족도와 높은 만족도로 그룹을 나누어, 이후 분석에서 만족도 수준에 따른 차이를 비교·분석할 수 있도록 데이터를 준비하는 것이다.
p_data1 <- p_data1 %>%
mutate(family_rel_satisfaction_sum = ifelse((family_rel_satisfaction == 1 | family_rel_satisfaction == 2), "low","high"))
# 데이터 획인
table(p_data1$family_rel_satisfaction_sum)
##
## high low
## 12284 431
p_data1
## # A tibble: 13,557 × 2
## family_rel_satisfaction family_rel_satisfaction_sum
## <dbl> <chr>
## 1 3 high
## 2 4 high
## 3 3 high
## 4 4 high
## 5 1 low
## 6 NA <NA>
## 7 NA <NA>
## 8 4 high
## 9 2 low
## 10 4 high
## # ℹ 13,547 more rows
전체 표본에서 소득 수준별 인구 분포를 파악하고, 이후 시각화 및 비교 분석을 위한 기초 통계 정보를 생성하는 것을 목적으로 가처분소득 수준(disposable_income_sum)에 따른 각 그룹의 빈도수와 비율을 산출하다.
# % 산출
h_data_pct <- h_data1 %>%
group_by(disposable_income_sum) %>%
summarise(n = n()) %>%
mutate(pct = round(n/7499*100, 1)) %>%
arrange(desc(pct))
h_data_pct
## # A tibble: 2 × 3
## disposable_income_sum n pct
## <chr> <int> <dbl>
## 1 low 4653 62
## 2 high 2846 38
4-2. 시각화
가처분소득 수준별 비율을 파이 차트로 시각화한다. 소득 수준(disposable_income_sum)을 기준으로 각 그룹의 비율(pct)을 표시하고, 색상과 레이블을 추가하여 소득 분포를 직관적으로 보여준다. 이를 통해 고소득과 저소득 집단의 비율 차이를 쉽게 파악할 수 있다.
ggplot(data = h_data_pct, aes(x = '', y = pct, fill = disposable_income_sum)) +
geom_bar(stat = 'identity', color = "white") +
geom_text(aes(label = paste0(round(pct, 1), "%")),
position = position_stack(vjust = 0.5),
size = 5) +
scale_fill_discrete(limits = c("high","low" )) +
scale_fill_manual(values = c("high" = "lightcyan2",
"low" = "skyblue")) +
theme_void() +
coord_polar('y', start = 0) +
labs(fill = "가처분소득",
title = "소득")
## Scale for fill is already present.
## Adding another scale for fill, which will replace the existing scale.
다음에 가족관계 만족도 수준별 응답자 수를 집계하고, 이를 막대그래프로 시각화한다. group_by()와 summarise()를 통해 만족도 수준별 응답자 수(family_rel_satisfaction_sum_n)를 계산하고, geom_col()을 사용해 막대그래프를 작성하였다. 그래프에는 막대 위에 응답자 수를 표시하여 보다 쉽게 비교할 수 있도록 하였다. 목적은 가족관계 만족도가 ’low’와 ’high’로 어떻게 분포되어 있는지를 시각적으로 확인하는 것이다.
p_data1
## # A tibble: 13,557 × 2
## family_rel_satisfaction family_rel_satisfaction_sum
## <dbl> <chr>
## 1 3 high
## 2 4 high
## 3 3 high
## 4 4 high
## 5 1 low
## 6 NA <NA>
## 7 NA <NA>
## 8 4 high
## 9 2 low
## 10 4 high
## # ℹ 13,547 more rows
p_data2 <- p_data1 %>%
group_by(family_rel_satisfaction_sum) %>%
summarise(family_rel_satisfaction_sum_n = n())
ggplot(data = p_data2, aes(x = family_rel_satisfaction_sum, y = family_rel_satisfaction_sum_n, fill = family_rel_satisfaction_sum)) +
geom_col() +
labs(x = "만족도",
y = "사람", fill = "만족도",
title = "가족관계 만족도") +
geom_text(aes(label = family_rel_satisfaction_sum_n), vjust = 0.1)
만족도 그룹별 분포를 파악하여 전체 중에서 각 만족도 수준의 비율을 확인하기 위해 p_data1 데이터에서 가족관계 만족도 그룹(family_rel_satisfaction_sum)별 인원 수와 비율을 계산하고 정리한다.
# % 산출
p_data_pct <- p_data1 %>%
group_by(family_rel_satisfaction_sum) %>%
summarise(n = n()) %>%
mutate(pct = round(n/13557*100, 1)) %>%
arrange(desc(pct))
p_data_pct
## # A tibble: 3 × 3
## family_rel_satisfaction_sum n pct
## <chr> <int> <dbl>
## 1 high 12284 90.6
## 2 <NA> 842 6.2
## 3 low 431 3.2
가처분소득 그룹과 가족관계 만족도 그룹 간의 관계를 분석하기 위해 두 데이터를 ID를 기준으로 병합한 후, 교차 빈도와 비율을 계산하여 히트맵으로 시각화한다. 이를 통해 소득 수준에 따른 가족관계 만족도의 분포를 한눈에 파악할 수 있다.
library(tidyverse)
h_data1$id <- 1:nrow(h_data1)
p_data1$id <- 1:nrow(p_data1)
merged_data <- inner_join(h_data1, p_data1, by = "id")
# 교차표 생성
heatmap_data <- merged_data %>%
group_by(disposable_income_sum, family_rel_satisfaction_sum) %>%
summarise(n = n()) %>%
mutate(pct = round(n / sum(n) * 100, 1))
## `summarise()` has grouped output by 'disposable_income_sum'. You can override
## using the `.groups` argument.
# 히트맵 그리기
ggplot(heatmap_data, aes(x = disposable_income_sum, y = family_rel_satisfaction_sum, fill = pct)) +
geom_tile(color = "white") +
geom_text(aes(label = paste0(pct, "%")), color = "black", size = 5) +
scale_fill_gradient(low = "skyblue", high = "lightcyan2") +
labs(title = "소득 그룹과 가족관계 만족도 히트맵",
x = "가처분소득 그룹",
y = "가족관계 만족도 그룹",
fill = "%") +
theme_minimal()
그위 그래프와 내용은 비슷한데 소득 그룹에 따른 가족관계 만족도의 분포
차이를 확인하기 위해 바이올린 플롯으로 시각화한다.
library(tidyverse)
# 먼저 h_data1 과 p_data1 을 병합해야 합니다 (id 붙이기)
h_data1$id <- 1:nrow(h_data1)
p_data1$id <- 1:nrow(p_data1)
merged_data <- inner_join(h_data1, p_data1, by = "id")
# 바이올린 플롯 그리기
ggplot(merged_data, aes(x = disposable_income_sum, y = family_rel_satisfaction, fill = disposable_income_sum)) +
geom_violin(trim = FALSE, color = "black") +
scale_fill_manual(values = c("high" = "lightcyan2", "low" = "skyblue")) +
labs(title = "소득 그룹별 가족관계 만족도 분포 (바이올린 플롯)",
x = "가처분소득 그룹",
y = "가족관계 만족도") +
theme_minimal()
## Warning: Removed 462 rows containing non-finite outside the scale range
## (`stat_ydensity()`).
본 연구에서는 가처분소득과 가족관계 만족도 간의 관계를 분석하였다. 분석 결과, 소득이 높은 그룹이 전반적으로 가족관계 만족도가 더 높은 경향을 보였으며, 소득 수준에 따라 가족관계 만족도의 분포와 차이가 분명히 나타났다. 이러한 결과는 경제적 여건이 가족관계의 질에 긍정적인 영향을 미칠 수 있음을 시사한다.
가족의 만족도 향상을 위해서는 단순히 소득 증대뿐만 아니라, 경제적 안정성을 높일 수 있는 복지 정책과 가족 지원 프로그램이 필요하다. 특히 저소득층 가구에 대한 맞춤형 지원을 강화하고, 가족관계 스트레스 완화를 위한 상담 및 교육 서비스를 확대하는 것이 중요하다. 이를 통해 경제적 불평등이 가족관계 만족도의 격차로 이어지는 문제를 완화하고, 사회 전반의 가족 행복도를 증진할 수 있을 것이다.