Mac용 한글폰트 준비

library(showtext)
## Loading required package: sysfonts
## Loading required package: showtextdb
font_add(family = "apple", regular = "/System/Library/Fonts/AppleGothic.ttf")
showtext_auto()  # 모든 그래프에 적용

연구 목적 및 배경 설명

본 연구는 최근 한국 사회의 주거 불안정 문제가 가구의 정신건강(스트레스, 우울)과 삶의 만족도에 미치는 영향을 분석하는 것을 목표로 한다. 또한 소득, 고용 상태, 가구원 수 등 사회·경제적 조건이 이러한 관계를 어떻게 조절하는지 규명하고자 한다.

전세사기 이미지
전세사기 이미지

주거 안정성은 인간의 기본적 권리이며 행복한 삶의 필수 조건이다. 그러나 한국에서는 최근 몇 년 사이 전세사기 문제가 대규모로 발생하면서 수많은 세입자들이 평생 모은 돈을 잃거나 주거권을 상실하는 등 심각한 피해를 입었다.
특히 2023년과 2024년을 거치며 전국적으로 무자본 갭투자, 깡통전세, 허위 임대계약 등이 연이어 터지며 전세 제도의 구조적 한계가 드러났다.

한편, 새로운 정부 출범 이후 한국 부동산 시장에는 다양한 규제 완화와 주택 공급 확대 정책이 추진되고 있다. 정부는 대출 규제 완화, 재건축·재개발 활성화, 청년·신혼부부 대상 주택 공급 확대 등을 통해 시장 안정화를 도모하고 있으나, 단기적 효과에 대한 우려와 함께 서민·청년층의 주거 불안 해소에 대한 실효성 논란이 계속되고 있다.

이러한 복합적 상황 속에서 주거 만족도가 국민 개개인의 정신건강과 삶의 질에 어떤 영향을 주는지를 실증적으로 분석하는 것은 현재 한국 사회의 주거 복지 정책의 방향을 설정하는 데 중요한 기초자료가 될 것이다.

최종 그래픽은 주거 만족도 수준에 따라 우울감과 스트레스 정도가 어떻게 달라지고, 소득·고용·가구원 수와 같은 조건에 따라 그 차이가 얼마나 벌어지는지를 시각적으로 보여준다. 이를 통해 주거 불안이 곧 국민 정신건강 문제로 이어지고 있음을 강조하며, 안정적이고 실효성 있는 주거 정책의 필요성을 시사한다.


데이터에 대한 개괄적인 설명

본 연구에 사용된 데이터는 한국복지패널조사(KOWEPS)의 최신 가구원 데이터(2024년 베타1 버전)이다. 한국복지패널조사는 한국보건사회연구원과 서울대학교 사회복지연구소가 공동으로 매년 수행하는 전국 대표 복지·소득·고용·주거 관련 종단조사로, 정책 결정 및 학술 연구에 폭넓게 활용되고 있다.

이번 분석에서는 특히 아래와 같은 주요 변수들을 활용하였다:

변수명 설명
p1903_7 응답자가 자신의 현재 주거환경에 대해 느끼는 전반적인 만족도를 측정한 항목
p1905_2 최근 일정 기간 동안 느낀 우울감 정도
p1905_3 일상생활에서 경험하는 스트레스 수준
h19_inc1 월평균 가구 소득
p1902_1 응답자의 현재 경제활동 참여 여부
h19_pind 한 가구에 속한 전체 인원 수

데이터는 각 변수별 결측치를 제거한 뒤 분석에 적합한 형태로 재가공되었으며, 주거 만족도가 정신건강 및 삶의 질과 어떤 연관성을 갖는지를 다각도로 탐색할 수 있도록 구성되었다. 이를 통해 주거 불안 상황이 국민 개개인의 삶에 미치는 영향을 구체적 데이터로 입증하고자 한다.


데이터 정제 및 가공 과정

1. 라이브러리 불러오기

library(haven)
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.2.1
## ✔ 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(plotly)
## 
## Attaching package: 'plotly'
## 
## The following object is masked from 'package:ggplot2':
## 
##     last_plot
## 
## The following object is masked from 'package:stats':
## 
##     filter
## 
## The following object is masked from 'package:graphics':
## 
##     layout

2. 데이터 불러오기

  • read_sav( ) 함수를 사용해 한국복지패널조사 SPSS 파일을 불러온다.
  • data_raw 라는 이름으로 원본 데이터를 저장해두고, 이후 가공된 데이터와 구분하여 원본을 유지한다.
data_raw <- read_sav("koweps_p19_2024_beta1.sav")

3. 주요 변수 선택 & 변수명 재정의 & 결측 제거

  • select( ) : 분석에 필요한 변수만 선택하여 작업 효율을 높인다.
  • rename( ) : 변수명을 분석에 직관적으로 사용할 수 있도록 영어로 바꾼다.
  • drop_na( ) : 결측치가 있는 행을 제거하여 분석 신뢰도를 높인다.
data <- data_raw %>%
  select(
    p1903_7,     # 주거 만족도
    p1905_2,     # 우울
    p1905_3,     # 스트레스
    p19_ws_c,    # 근로소득
    p1902_1,     # 고용 상태
    h19_pind     # 가구원 수
  ) %>%
  rename(
    house_satisfaction = p1903_7,
    depression = p1905_2,
    stress = p1905_3,
    income = p19_ws_c,
    job_status = p1902_1,
    household_size = h19_pind
  ) %>%
  drop_na()

data
## # A tibble: 3,572 × 6
##    house_satisfaction depression stress income job_status household_size
##                 <dbl>      <dbl>  <dbl>  <dbl>      <dbl>          <dbl>
##  1                  4          3      1  0.265          4              1
##  2                  1          2      2  0.832          4              1
##  3                  3          1      1  0.761          1              1
##  4                  3          1      2  0.702          1              1
##  5                  4          2      2  0.643          4              1
##  6                  3          2      4  0.826          4              1
##  7                  4          1      2  1.75           2              1
##  8                  4          3      5  1.55           1              1
##  9                  3          1      2  0.681          1              1
## 10                  3          2      3  1.53           4              8
## # ℹ 3,562 more rows

4. 극단치 확인 & 제거

  • boxplot 함수를 이용해서 income 변수의 극단치를 확인한다.
  • 소득 데이터는 원래 분포가 비대칭이고 일부 고소득자가 극단값으로 존재하는 것이 자연스럽지만, 이 연구의 주요 초점은 한국 주거불안 현황에서 평균적인 가구의 심리·경제 특성을 보는 것이므로 분석 신뢰도를 높이기 위해 이를 제거한다.
  • 이외 데이터들은 범주형 변수에 속하므로 극단치 확인 및 제거를 하지 않는다.
  • household_size(가구원 수) 변수는 양의 정수형 연속형 변수이지만, 최댓값이 19로 이러한 특수한 대가구는 의미 있을 수 있기 때문에 극단치를 제거하지 않는다.
boxplot(data$income, main = "근로소득 Boxplot", horizontal = TRUE)

summary(data$household_size)
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
##   1.000   1.000   1.000   2.553   1.000  19.000
# IQR 및 상/하한 계산
Q1 <- quantile(data$income, 0.25)
Q3 <- quantile(data$income, 0.75)
IQR <- Q3 - Q1

lower_bound <- Q1 - 1.5 * IQR
upper_bound <- Q3 + 1.5 * IQR

# 극단치 제외한 데이터셋 만들기
data_clean <- data %>%
  filter(income >= lower_bound & income <= upper_bound)

# 결과 확인
summary(data_clean$income)
##     Min.  1st Qu.   Median     Mean  3rd Qu.     Max. 
## 0.009726 0.701360 1.130065 1.175963 1.529965 2.868106
boxplot(data_clean$income, main = "극단치 제거 후 근로소득 Boxplot", horizontal = TRUE)

5. 최종 데이터 확인

  • glimpse( )는 데이터의 전체 구조를 한눈에 빠르게 보여준다.
  • 행(Row) 수: 총 3,499명의 관측치가 있다.
  • 열(Column) 수: 총 6개의 변수로 구성된다.
glimpse(data_clean)
## Rows: 3,499
## Columns: 6
## $ house_satisfaction <dbl> 4, 1, 3, 3, 4, 3, 4, 4, 3, 3, 4, 4, 3, 4, 4, 4, 3, …
## $ depression         <dbl> 3, 2, 1, 1, 2, 2, 1, 3, 1, 2, 4, 1, 4, 2, 2, 4, 3, …
## $ stress             <dbl> 1, 2, 1, 2, 2, 4, 2, 5, 2, 3, 1, 1, 2, 1, 5, 3, 4, …
## $ income             <dbl> 0.2654434, 0.8315130, 0.7613555, 0.7016779, 0.64303…
## $ job_status         <dbl> 4, 4, 1, 1, 4, 4, 2, 1, 1, 4, 2, 2, 4, 1, 4, 1, 1, …
## $ household_size     <dbl> 1, 1, 1, 1, 1, 1, 1, 1, 1, 8, 1, 11, 1, 1, 1, 1, 7,…

데이터 분석

1. 평균 주거 만족도

  • mean( ) 함수로 주거 만족도의 전체 평균값을 계산했다.
  • round( )로 소수점 둘째 자리까지 깔끔하게 표시했다.
  • 결과적으로 평균 주거 만족도는 약 3.76점으로, 대체로 만족 수준에 해당한다.
  • 이는 연구 데이터에서 다수 응답자가 3~4점 구간에 응답했음을 보여준다.
mean_satisfaction <- mean(data_clean$house_satisfaction)
print(paste("평균 주거 만족도:", round(mean_satisfaction, 2)))
## [1] "평균 주거 만족도: 3.76"

2. 우울-스트레스 상관관계

  • cor() 함수를 사용해 우울(depression)스트레스(stress) 변수 간의 상관계수를 계산했다.
  • 계산된 상관계수는 0.34로, 양의 상관관계가 있음을 나타낸다.
  • 이는 스트레스가 높을수록 우울 수준도 다소 높아지는 경향이 있다는 것을 뜻한다.
  • 다만 상관계수 값이 0.34로 중간 정도의 약한 상관성으로 해석되며, 완전한 인과관계는 아님에 유의해야 한다.
correlation <- cor(data_clean$depression, data_clean$stress)
print(paste("우울-스트레스 상관계수:", round(correlation, 2)))
## [1] "우울-스트레스 상관계수: 0.34"

3. 고용상태별 소득 평균

  • group_by(job_status)와 summarise(mean_income = mean(income))를 이용해 고용 상태별 평균 소득을 계산했다.
  • 고용상태 1번 그룹이 평균 소득이 1.26으로 가장 높다.
  • 고용상태 2, 3, 4, 5번 그룹은 각각 평균 소득이 약 0.92 ~ 1.14 수준으로 상대적으로 낮다.
  • 이는 고용 상태에 따라 소득 수준에 차이가 있음을 보여주며, 특히 정규직(혹은 안정적인 고용 상태) 그룹이 비정규직 혹은 실업 상태보다 평균 소득이 높은 경향이 있음을 시사한다.
income_by_job <- data_clean %>%
  group_by(job_status) %>%
  summarise(mean_income = mean(income))
print(income_by_job)
## # A tibble: 5 × 2
##   job_status mean_income
##        <dbl>       <dbl>
## 1          1       1.26 
## 2          2       0.949
## 3          3       0.922
## 4          4       1.14 
## 5          5       0.982

4. 주거불안층 파생 변수

  • 전체 데이터를 기준으로 주거 만족도가 하위 15%에 해당하는 사람들을 ‘주거불안층’으로 분류하였다.

  • quantile( ) 함수를 사용하여 주거 만족도의 15% 분위수(q15)를 계산하고, house_satisfaction이 이 분위수 이하이면 “Yes” (주거불안층), 초과이면 “No” (주거불안층 아님)으로 새 변수 unsecure를 생성하였다.

  • 주거 만족도가 낮은 사람들을 특정 기준으로 구분해, 이들이 어떤 특징을 가지는지, 소득, 고용 상태, 가구 규모 등과 어떤 관계가 있는지 불안층과 그렇지 않은 층 간의 차이를 심층적으로 비교하기 위해 생성한 변수이다.

  • 주거불안층(Yes): 933명

  • 주거불안층 아님(No): 2,566명

## 주거 만족도 하위 30% → 주거불안층
q15 <- quantile(data_clean$house_satisfaction, 0.15)
data_clean <- data_clean %>%
  mutate(unsecure = ifelse(house_satisfaction <= q15, "Yes", "No"))

table(data_clean$unsecure)
## 
##   No  Yes 
## 2566  933

5. 회귀분석

5-1. 모델 1: 주거 만족도

목적

  • 모델 1은 소득, 가구원 수, 고용상태가 주거 만족도에 어떤 영향을 미치는지 분석하기 위해 설계되었다.

결과 해석

  • (Intercept): 절편은 3.75로, 모든 변수값이 0일 때 주거 만족도의 예상값.

  • income: 소득이 1 단위 증가할 때 주거 만족도는 0.0165만큼 증가 (p=0.40 → 통계적으로 유의하지 않음)

  • household_size: 가구원 수가 1명 늘어나면 주거 만족도는 0.0042 증가 (p=0.19 → 유의하지 않음)

  • job_status: 고용상태가 한 단계 올라갈 때 주거 만족도는 0.010 감소 (p=0.31 → 유의하지 않음)

  • R² = 0.001, p-value = 0.2996 → 모델이 주거 만족도를 설명하는 설명력이 극히 낮음.

시사점

  • 소득, 가구원 수, 고용상태는 현재 데이터에서는 주거 만족도와 유의미한 관계가 없음으로 나타났다.
  • 추가적인 변수나 맥락 고려가 필요하다.
model1 <- lm(data_clean$house_satisfaction ~ data_clean$income + data_clean$household_size + data_clean$job_status, data_clean = data_clean)
## Warning: In lm.fit(x, y, offset = offset, singular.ok = singular.ok, ...) :
##  extra argument 'data_clean' will be disregarded
summary(model1)
## 
## Call:
## lm(formula = data_clean$house_satisfaction ~ data_clean$income + 
##     data_clean$household_size + data_clean$job_status, data_clean = data_clean)
## 
## Residuals:
##     Min      1Q  Median      3Q     Max 
## -2.8178 -0.7244  0.2347  0.2559  1.2863 
## 
## Coefficients:
##                            Estimate Std. Error t value Pr(>|t|)    
## (Intercept)                3.749922   0.035416 105.882   <2e-16 ***
## data_clean$income          0.016473   0.019662   0.838    0.402    
## data_clean$household_size  0.004162   0.003173   1.312    0.190    
## data_clean$job_status     -0.010399   0.010195  -1.020    0.308    
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 0.75 on 3495 degrees of freedom
## Multiple R-squared:  0.001049,   Adjusted R-squared:  0.0001913 
## F-statistic: 1.223 on 3 and 3495 DF,  p-value: 0.2996

5-2. 모델 2: 우울 점수

목적

  • 모델2는 주거 만족도, 소득, 고용상태가 우울 점수에 미치는 영향을 분석하였다.

결과 해석

  • (Intercept): 절편은 2.40으로, 모든 변수값이 0일 때 예상되는 우울 점수.
  • house_satisfaction: 주거 만족도는 우울 점수에 거의 영향 없음 (계수 0.0028, p=0.89 → 유의하지 않음)
  • income: 소득이 높을수록 우울 점수는 감소하는 경향 (계수 -0.0807, p=0.0011 → 유의미)
  • job_status: 고용상태가 높을수록 우울 점수는 감소하는 경향 (계수 -0.0362, p=0.0048 → 유의미)
  • R² = 0.0049 → 설명력은 낮으나, 일부 변수는 유의미한 관계가 있음.

시사점

  • 주거 만족도는 우울 점수와 유의미한 관계가 없었지만, 소득과 고용 안정성은 우울 점수를 낮추는 데 일정한 기여를 하였다.
  • 경제적 안정성이 정신건강과 어느 정도 연결되어 있음을 시사한다.
model2 <- lm(data_clean$depression ~ data_clean$house_satisfaction + data_clean$income + data_clean$job_status, data_clean = data_clean)
## Warning: In lm.fit(x, y, offset = offset, singular.ok = singular.ok, ...) :
##  extra argument 'data_clean' will be disregarded
summary(model2)
## 
## Call:
## lm(formula = data_clean$depression ~ data_clean$house_satisfaction + 
##     data_clean$income + data_clean$job_status, data_clean = data_clean)
## 
## Residuals:
##     Min      1Q  Median      3Q     Max 
## -1.3725 -0.3496 -0.2202  0.7325  1.9608 
## 
## Coefficients:
##                                Estimate Std. Error t value Pr(>|t|)    
## (Intercept)                    2.399943   0.090970  26.382  < 2e-16 ***
## data_clean$house_satisfaction  0.002849   0.021342   0.133  0.89381    
## data_clean$income             -0.080695   0.024785  -3.256  0.00114 ** 
## data_clean$job_status         -0.036232   0.012849  -2.820  0.00483 ** 
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 0.9465 on 3495 degrees of freedom
## Multiple R-squared:  0.004891,   Adjusted R-squared:  0.004037 
## F-statistic: 5.726 on 3 and 3495 DF,  p-value: 0.0006619

5-3. 모델 3: 주거불안층

목적

  • 모델3은 어떤 요인이 주거 불안층에 영향을 주는지 분석하였다.

결과 해석

  • 스트레스만 유의수준 5% 이하로 통계적으로 유의하여 스트레스가 높으면 주거불안층일 확률이 높아짐을 알 수 있다.
  • job_status, household_size는 약 10% 유의수준에서 의미가 있을 가능성이 있지만 해석에 주의가 필요하다.
  • 소득(income)과 우울(depression)은 이 모델에서 주거불안층과의 직접적 연관성이 통계적으로 뚜렷하지 않다.

시사점

  • 이번 분석에서는 스트레스 수준이 주거불안층 여부와 가장 뚜렷한 관련성을 보였다.
  • 소득은 예상과 달리 직접적 영향은 적고, 고용상태나 가구원 수는 경향성이 있으나 확정적이진 않다.
# 주거불안층을 0/1로 바꾸기
data_clean <- data_clean %>%
  mutate(unsecure_bin = ifelse(unsecure == "Yes", 1, 0))

# 로지스틱 회귀 모델
model_logit <- glm(unsecure_bin ~ income + job_status + depression + stress + household_size, data = data_clean, family = binomial)

# 결과 확인
summary(model_logit)
## 
## Call:
## glm(formula = unsecure_bin ~ income + job_status + depression + 
##     stress + household_size, family = binomial, data = data_clean)
## 
## Coefficients:
##                Estimate Std. Error z value Pr(>|z|)    
## (Intercept)    -1.04905    0.15147  -6.926 4.34e-12 ***
## income         -0.05890    0.05985  -0.984   0.3251    
## job_status      0.05313    0.03054   1.740   0.0819 .  
## depression     -0.05673    0.04338  -1.308   0.1909    
## stress          0.06253    0.02901   2.155   0.0311 *  
## household_size -0.01776    0.01004  -1.768   0.0770 .  
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## (Dispersion parameter for binomial family taken to be 1)
## 
##     Null deviance: 4058.1  on 3498  degrees of freedom
## Residual deviance: 4046.7  on 3493  degrees of freedom
## AIC: 4058.7
## 
## Number of Fisher Scoring iterations: 4

그래프 만들기

1. 소득과 주거 만족도

fit <- lm(house_satisfaction ~ income, data = data_clean)
trend_df <- data.frame(
  income = seq(
    min(data_clean$income),
    max(data_clean$income),
    length.out = 100
  )
)
trend_df$fit <- predict(fit, newdata = trend_df)

p <- plot_ly() %>%
  # 산점도 trace
  add_trace(
    data = data_clean,
    x = ~income,
    y = ~house_satisfaction,
    type = 'scatter',
    mode = 'markers',
    marker = list(opacity = 0.3),
    name = "관측값"
  ) %>%
  # 추세선 trace
  add_trace(
    data = trend_df,
    x = ~income,
    y = ~fit,
    type = 'scatter',
    mode = 'lines',
    line = list(color = 'blue'),
    name = "추세선"
  ) %>%
  # Layout
  layout(
    title = "소득과 주거 만족도의 관계 (Plotly Native)",
    xaxis = list(title = "소득"),
    yaxis = list(title = "주거 만족도")
  )

p

해당 산점도는 개별 응답자의 근로 소득 수준과 주거 만족도 간의 관계를 시각적으로 보여준다. 그래프에서 볼 수 있듯이, 소득이 높아질수록 주거 만족도가 다소 증가하는 경향이 있으나 그 상관성은 매우 약한 수준임을 알 수 있다. 이는 점들이 넓게 산포되어 있어 소득이라는 단일 변수만으로 주거 만족도를 완전히 설명하기 어렵다는 점을 의미한다. 특히 이번에는 정적 이미지 대신 인터랙티브 그래프로 구현하여 데이터 점에 마우스를 올려 개별 값과 특성을 직접 확인할 수 있도록 함으로써, 기존 산점도의 점 겹침 문제를 개선하고 세밀한 패턴 탐색이 가능하도록 하였다.

그래프는 두 연속형 변수 간의 관계를 직관적으로 보여주기에 산점도가 가장 적합하며, 선형 추세선을 추가하여 데이터가 전반적으로 어떤 방향성을 갖는지 쉽게 파악할 수 있도록 구성했다. 점들은 geom_point()에 투명도(alpha = 0.3)를 적용하여 밀집 구간에서도 분포를 명확히 구분할 수 있도록 했으며, geom_smooth(method = “lm”)를 통해 산점도만으로는 알아보기 어려운 전체적인 선형 경향을 파란색 추세선으로 강조하였다. 기본 색상을 사용하여 시각적 복잡성을 최소화하고 핵심 메시지인 소득과 만족도의 관계에 집중할 수 있도록 디자인했다.

2. 주거 만족도와 우울

ggplot(data_clean, aes(x = house_satisfaction, y = depression)) +
  geom_point(alpha = 0.3) +
  geom_smooth(method = "lm") +
  labs(title = "주거 만족도와 우울의 관계", x = "주거 만족도", y = "우울 점수")
## `geom_smooth()` using formula = 'y ~ x'

이 산점도는 각 개인의 주거 만족도 점수와 우울 점수 간의 관계를 시각적으로 표현한 것이다. 그래프에 나타난 파란 선은 데이터를 기반으로 계산된 선형 회귀선을 의미하며, 전체적으로 기울기가 거의 없는 평평한 형태로 나타나 두 변수 간의 직접적인 관계가 매우 약함을 보여준다. 즉, 주거 만족도가 높다고 해서 우울 점수가 일관되게 낮아지거나 높아지는 뚜렷한 경향은 관찰되지 않는다. 이를 통해 우울 점수를 설명할 때는 주거 만족도 외에도 스트레스 수준, 사회적 지지 같은 다른 심리·사회적 요인들이 함께 고려되어야 함을 시사한다.

그래프는 두 연속형 변수의 상관 관계를 시각적으로 즉시 파악할 수 있도록 산점도를 활용했으며, 데이터의 흐름을 한눈에 파악할 수 있도록 선형 추세선을 함께 추가하였다. 산점도에는 geom_point()에 투명도(alpha = 0.3)를 적용하여 데이터 점이 밀집된 구간에서도 전체 분포가 잘 보이도록 했고, geom_smooth(method = “lm”)을 사용해 복잡한 데이터 패턴을 선형으로 간략히 요약하여 추세의 방향성을 직관적으로 전달하도록 설계하였다. 기본 ggplot2 테마와 색상을 그대로 활용해 불필요한 시각적 장식을 줄이고, 핵심 메시지에 집중할 수 있도록 시각적 단순성을 유지했다.

3. 주거 만족도 분포

ggplot(data_clean, aes(x = house_satisfaction)) +
  geom_histogram(fill = "steelblue", bins = 20, color = "white") +
  labs(title = "주거 만족도 분포", x = "주거 만족도", y = "빈도")

이 히스토그램은 전체 가구원의 주거 만족도 점수(1점부터 5점까지)가 데이터에서 어떻게 분포하는지를 시각적으로 보여준다. 그래프를 보면 주거 만족도가 4점인 구간에 응답이 가장 많이 몰려 있으며, 낮은 점수대(1~2점)에는 상대적으로 응답자가 적게 분포해 있다. 이는 대다수의 사람들이 자신의 현재 주거 상태를 비교적 만족스럽다고 평가하고 있음을 시사하며, 전반적인 한국 가구의 주거 안정성이 일정 수준 이상 유지되고 있음을 엿볼 수 있다. 다만 일부 응답자가 낮은 점수를 선택한 것을 통해, 여전히 소수의 주거불안층이나 취약계층이 존재함을 간접적으로 확인할 수 있어 이들에 대한 심층적인 추가 분석이 필요할 수 있다.

히스토그램은 단일 변수의 전체적인 분포 형태를 직관적으로 확인하는 데 가장 적합한 그래프로, 데이터의 편향성, 중앙값, 분산 정도 등을 한눈에 파악할 수 있다는 장점이 있다. 이번 그래프에서는 이산형 점수(1~5)임에도 연속형 히스토그램으로 표현하여 응답 점수별 몰림 정도를 더 세밀하게 살펴볼 수 있도록 했다. 막대 색상을 steelblue로 지정해 신뢰와 안정감을 강조했고, 주거와 같은 안정적 생활 요소를 시각적으로 잘 표현할 수 있도록 했다. 또한 막대 경계선을 흰색으로 설정해 막대 간 구분을 선명하게 하고, bins = 20으로 세분화하여 응답 점수대별 세부 분포를 더욱 뚜렷하게 나타내도록 설계하였다.

4. 고용 상태별 소득 박스플롯

ggplot(data_clean, aes(x = as.factor(job_status), y = income)) +
  geom_boxplot(fill = "orange") +
  labs(title = "고용 상태별 소득", x = "고용 상태", y = "소득")

이 박스플롯은 고용 상태에 따라 가구의 소득 분포가 어떻게 달라지는지를 한눈에 비교할 수 있도록 시각화한 것이다. 그래프를 살펴보면, 1번 그룹(정규직 혹은 주요 직업군)의 소득 중앙값이 다른 그룹보다 확연히 높게 나타나며, 상대적으로 안정적인 소득 구조를 보인다. 반면 2번과 3번 그룹(비정규직 또는 임시직)은 소득의 중앙값이 더 낮고, 상자와 수염이 넓게 퍼져 있어 소득 분포의 변동 폭이 큰 특징을 보여준다. 이러한 결과는 고용 안정성이 소득 수준에 긍정적인 영향을 미친다는 점을 데이터로 뒷받침해주며, 소득 격차가 고용 형태에 따라 구조적으로 발생할 수 있음을 시사한다.

박스플롯은 여러 범주형 그룹 간 연속형 변수의 분포를 비교하기에 가장 직관적인 그래프로, 중앙값, 사분위 범위, 이상치 등을 시각적으로 빠르게 파악할 수 있다. 이번 그래프에서는 상자의 채색을 주황색(orange)으로 지정해 시각적 주목성을 높였으며, 색 대비와 간결한 축 라벨을 통해 가독성을 높였다. 불필요한 배경 요소나 장식을 배제해 핵심 메시지인 고용 상태별 소득 분포 비교에 사용자의 시선을 집중시킬 수 있도록 설계하였다.

5. 가구원 수별 주거 만족도 평균

data_clean %>%
  group_by(household_size) %>%
  summarise(mean_satisfaction = mean(house_satisfaction)) %>%
  ggplot(aes(x = as.factor(household_size), y = mean_satisfaction)) +
  geom_col(fill = "forestgreen") +
  labs(title = "가구원 수별 평균 주거 만족도", x = "가구원 수", y = "평균 주거 만족도")

이 그래프는 가구원 수에 따라 평균 주거 만족도가 어떻게 달라지는지를 보여준다. 각 막대는 특정 가구 규모에 속한 응답자들의 주거 만족도를 평균하여 나타낸 값으로, 가구 규모별 만족도 수준을 비교할 수 있도록 구성되었다. 전체적으로 대부분의 가구원 수 구간에서 주거 만족도는 3.7에서 4.0 정도로 비교적 높은 수준을 유지하고 있으며, 일부 가구원 수 구간에서 약간의 차이는 나타나지만 큰 편차는 발견되지 않는다. 이는 가구 규모가 커지거나 작아진다고 해서 주거 만족도에 극적인 변화가 발생하지는 않는다는 점을 시사한다.

막대그래프는 범주형 변수(가구원 수)와 연속형 변수(평균 주거 만족도)를 함께 비교할 때 가장 직관적인 시각화 방법으로 적합하다. 이번 그래프에서는 막대를 녹색(forestgreen)으로 지정하여 시각적으로 안정감을 주고, 가족이나 가구를 상징하는 따뜻한 느낌을 표현하도록 했다. 복잡한 장식을 배제하고 깔끔한 디자인을 적용함으로써 가구원 수별 만족도 차이를 쉽게 파악할 수 있도록 시각적 가독성을 높였다.

6. 주거불안층 비율 시각화

data_clean %>%
  count(unsecure) %>%
  ggplot(aes(x = unsecure, y = n, fill = unsecure)) +
  geom_col() +
  labs(title = "주거불안층 분포 (하위 15%)", x = "주거불안 여부", y = "빈도") +
  theme_minimal()

이 그래프는 전체 데이터에서 주거 만족도가 하위 15%에 해당하는 사람들을 ’주거불안층(Yes)’으로 정의하고, 이들의 비율을 시각적으로 나타낸 것이다. 그래프를 통해 전체 인구 중에서 주거불안층이 차지하는 크기와 비율을 한눈에 직관적으로 확인할 수 있으며, 이를 통해 전체 데이터에서 낮은 주거 만족도를 가진 취약 계층의 상대적 규모를 쉽게 파악할 수 있다.

막대그래프는 두 그룹을 색상으로 구분하여 가독성을 높였다. 빨간색은 주거 만족도가 비교적 높은 그룹(No)을 의미하고, 청록색은 하위 15%에 해당하는 주거불안층(Yes)을 나타낸다. 두 색상 간의 대비를 통해 불필요한 격자나 장식 없이도 비율 차이를 강조하도록 디자인되었으며, 시각적 요소를 최소화하여 핵심 메시지인 주거불안층의 존재와 규모를 보다 선명하게 전달할 수 있도록 구성하였다.

7. 주거불안층 예측확률 곡선

# 예측용 데이터 만들기: stress를 1~5로 변화시키고 나머지 변수는 평균으로 고정
new_data <- data.frame(
  stress = seq(min(data_clean$stress), max(data_clean$stress), length.out = 100),
  income = mean(data_clean$income, na.rm = TRUE),
  job_status = mean(data_clean$job_status, na.rm = TRUE),
  depression = mean(data_clean$depression, na.rm = TRUE),
  household_size = mean(data_clean$household_size, na.rm = TRUE)
)

# fitted probability + 신뢰구간
predicted <- predict(model_logit, newdata = new_data, type = "link", se.fit = TRUE)
new_data$prob <- plogis(predicted$fit)
new_data$lower <- plogis(predicted$fit - 1.96 * predicted$se.fit)
new_data$upper <- plogis(predicted$fit + 1.96 * predicted$se.fit)

# ggplot으로 시각화
ggplot(new_data, aes(x = stress, y = prob)) +
  geom_line(color = "darkred", linewidth = 1.2) +
  geom_ribbon(aes(ymin = lower, ymax = upper), fill = "pink", alpha = 0.3) +
  labs(
    title = "Stress 점수에 따른 주거불안층 예측 확률",
    x = "Stress 점수",
    y = "주거불안층 예측 확률"
  ) +
  theme_minimal()

이 그래프는 로지스틱 회귀분석 결과를 바탕으로, 스트레스 점수가 높아질 때 개인이 주거불안층(unsecure_bin)에 속할 확률이 어떻게 변하는지를 시각적으로 보여준다. predict( ) 함수를 활용하여 스트레스 점수를 1부터 5까지의 범위로 변화시키며 예상 확률과 그 신뢰구간을 계산하고, 이를 선형 곡선과 함께 시각화하였다. 그래프의 곡선은 스트레스 점수가 높을수록 주거불안층에 속할 확률이 점차 증가하는 추세를 직관적으로 나타내며, 다른 변수들은 평균값으로 고정한 상태에서 스트레스 변수 하나만의 영향을 강조해 해석이 명확하도록 설계되었다. 이러한 시각적 구성은 스트레스 관리가 주거 안정성과 밀접하게 연결되어 있음을 독자가 직관적으로 이해할 수 있도록 돕는 데 목적이 있다.

선형 추정 곡선은 강렬한 붉은 계열(Dark Red) 색상을 사용하여 스트레스라는 경고 신호의 의미를 시각적으로 부각시켰고, 곡선을 둘러싼 신뢰구간은 같은 계열의 연한 핑크색으로 표현해 곡선을 방해하지 않으면서도 예측 불확실성을 명확히 전달하도록 하였다.


결론

본 연구는 한국복지패널조사를 활용하여 한국인의 주거불안이 정신건강과 삶의 만족도에 미치는 영향을 실증적으로 분석하고, 이를 시각적으로 제시하였다. 분석과 그래프를 종합한 결과는 다음과 같다.

첫째, 평균 주거 만족도는 약 3.76점으로 대체로 만족 수준에 속하나, 전체 응답자 중 하위 15%에 해당하는 ’주거불안층’이 존재함을 확인하였다. 히스토그램을 통해 주거 만족도가 4점에 가장 집중되어 있고, 낮은 점수 응답은 소수이지만 존재하여 취약계층의 주거 불안 실태를 드러냈다.

둘째, 소득과 주거 만족도의 관계를 산점도와 선형 추세선으로 시각화한 결과, 소득이 높아질수록 주거 만족도는 다소 증가하는 경향을 보였으나, 관계성은 약했다. 회귀분석에서도 소득과 주거 만족도 간의 유의미한 직접 영향은 발견되지 않았다. 이는 단일 경제 변수로는 주거 만족도를 충분히 설명하기 어렵다는 점을 시사한다.

셋째, 우울감과 스트레스는 0.34의 양의 상관관계를 보여, 스트레스가 높을수록 우울감이 증가하는 경향이 있었다. 특히 주거 만족도와 우울감의 산점도를 보면, 추세선의 기울기가 거의 없는 형태로 나타나 두 변수 간 직접적인 관계는 약하다는 것을 확인하였다. 대신 소득과 고용 상태는 우울 점수를 낮추는 데 유의미한 변수로 나타나 경제적 안정성이 정신건강에 영향을 미침을 뒷받침한다.

넷째, 로지스틱 회귀분석과 주거불안층 예측 확률 그래프를 통해, 스트레스가 높아질수록 주거불안층에 속할 확률이 통계적으로 유의미하게 증가함을 확인하였다. 소득과 우울 점수는 주거불안층 여부를 직접적으로 설명하지 못했으나, 스트레스만은 강력한 예측 변수로 작용하였다. 이는 단순히 소득을 올리거나 고용을 안정시킨다고 해서 주거불안을 완전히 해소할 수 없으며, 정신적 안정 지원이 반드시 병행되어야 함을 시사한다.

다섯째, 고용 상태별 소득 박스플롯과 가구원 수별 주거 만족도 막대그래프를 통해, 고용 안정성이 높을수록 소득이 높고, 가구원 수는 주거 만족도에 큰 영향을 미치지 않는다는 점을 시각적으로 확인하였다.

종합하면, 본 연구는 전세사기와 같은 주거불안 문제가 단순한 경제 문제를 넘어 정신건강 문제로 연결되며, 특히 스트레스 수준과 주거불안은 밀접한 관련이 있음을 실증 데이터로 제시하였다. 이는 한국의 주거 복지 정책이 단기적인 대출 규제 완화나 공급 확대만으로는 충분하지 않으며, 심리·사회적 안정망과 정신건강 관리 정책을 포함한 다층적 대책이 필요함을 강조한다.

따라서 정부와 정책 입안자들은 주거불안층의 실질적 해소와 함께, 정신건강 지원, 스트레스 관리 프로그램, 피해자 상담 서비스 등을 포괄하는 종합적 주거 복지 모델을 설계해야 할 것이다. 이는 국민 삶의 질 향상과 사회적 비용 감소로 이어질 수 있을 것이다.