경기도 생활체육시설 운영비 표준모델 시각화 초안


문제의 제기

경기도에는 100개에 가까운 공공체육시설이 있습니다.

또한 앞으로도 다수의 공공체육시설 건설이 계획되고 있습니다.

이렇게 건립된 공공체육시설은 최소 30년 이상 운영됩니다.

시민들의 건강과 삶의 질을 향상시키기 위한 공공성이 우선될 것입니다.

그래서 시민들에게 과도한 금전적 부담을 지울 수는 없습니다.

이는 운영비의 상당 부분을 지방정부의 재원으로 충당해야 함을 의미합니다.

그렇다면 계획단계에서부터, 이정도 규모의 시설이라면 어느 정도의 운영비가 들어갈 것인지, 사전적으로 분석이 이루어져야 할 것입니다.

그렇지만 안타깝게도, 현재 경기도 공공체육시설이 준공 후 어느 정도의 운영비가 소모될 것인지에 대한 체계적인 정보가 존재하지 않습니다.

그렇기 때문에 현재 공공체육시설 계획단계에서 운영비 추정은, 주먹구구식으로 이루어지는게 보통입니다.


연구문제

그래서 본 연구는, 계획단계에서 참조할 수 있는 경기도 공공체육시설의 표준 운영비를 제시하고자 합니다.

계획 단계에서 사전적으로, 준공 후 어느 정도의 재정지원이 필요할 것인지 파악할 수 있는 체계적인 자료를 도출하는 것이 목표입니다.

어떠한 과정을 거쳐 경기도 공공체육시설의 운영비 표준모형을 도출하였는지, 시각화 기법을 적극적으로 사용하여 논지를 전개해나가고자 합니다.


분석에 사용될 패키지/라이브러리를 로드합니다.

library(readxl)
library(dplyr)
## 
## Attaching package: '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(reshape2)
library(car)
## Warning: package 'car' was built under R version 4.0.4
## Loading required package: carData
## 
## Attaching package: 'car'
## The following object is masked from 'package:dplyr':
## 
##     recode

<기초작업>

경기도 공공체육관 데이터를 불러옵니다.

ath0 <- read_xlsx("E:\\_work_category\\공투 연구\\2020\\체육시설\\R\\ath0_final.xlsx", sheet = "total1")

<기초작업>

기술통계분석을 위한 약간의 기초작업을 수행합니다. 연면적 및 총 운영비를 로그변환하고, 수영장 유무와 규모변수를 만듭니다.

ath0$ln_area <- log10(ath0$area)
ath0$ln_total_cost <- log10(ath0$total_cost)
ath0$pool_yn_l <- ifelse(ath0$pool_yn == 1, "1_수영장 있음", "2_수영장 없음")
ath0$pool_yn_l2 <- ifelse(ath0$pool_yn == 0 & ath0$area_type == "대형", "3_수영장 없는\n     대형시설", ath0$pool_yn_l)

[그림_01] 분석대상 경기도 생활체육관의 규모: 연면적 기준

  • 연면적의 경우 2,000m^2 미만의 소규모 시설이 다수를 차지하고 있음
  • 시설 간 연면적 규모 격차가 상당함
# 경기도 체육시설의 연면적 분포. 역시 천차만별
ggplot(ath0, aes(x = area)) + geom_histogram(bins = 10, fill = "grey60", color = "black") +
  theme(axis.text.x = element_text(size = rel(1.5)), axis.text.y = element_text(size = rel(1.5)), 
        axis.title.x = element_text(size = rel(1.5)), axis.title.y = element_text(size = rel(1.5))) +
  labs(x = expression(연면적(m^2)), y = "빈도(개소)", size = 5) +
  scale_x_continuous(breaks = c(0, 5000, 10000, 15000), 
                     labels = c("0", "5,000", "10,000", "15,000"))


[그림_02] 분석대상 경기도 생활체육관의 규모: 인력 기준

  • 인력의 경우 20명 미만의 소규모 시설이 다수를 차지하고 있음
  • 시설 간 인력 규모 격차가 상당함
ggplot(ath0, aes(x = hr_total)) + geom_histogram(bins = 10, fill = "grey60", color = "black") +
  theme(axis.text.x = element_text(size = rel(1.2)), axis.text.y = element_text(size = rel(1.2)), 
        axis.title.x = element_text(size = rel(1.5)), axis.title.y = element_text(size = rel(1.5))) +
  labs(x = "총 인력(명)", y = "빈도(개소)", size = 5)


[그림_03] 분석대상 경기도 생활체육관의 총 운영비

  • 총 운영비 10억 미만의 시설이 약 40여개로 나타남
  • 일부 50억 이상의 운영비가 지출되는 대규모 시설도 존재
ggplot(ath0, aes(x = total_cost/1000)) + geom_histogram(bins = 10, fill = "grey60", color = "black") +
  theme(axis.text.x = element_text(size = rel(1.5)), axis.text.y = element_text(size = rel(1.5)), 
        axis.title.x = element_text(size = rel(1.5)), axis.title.y = element_text(size = rel(1.5))) +
  labs(x = "총 운영비(백만원)", y = "빈도(개소)", size = 5) +
  scale_x_continuous(breaks = c(0, 2000, 4000, 6000), 
                     labels = c("0", "2,000", "4,000", "6,000"))


[그림_04] 연면적과 총 운영비의 산점도

  • 산점도 좌측 하단에 관측치가 집중됨
  • 이는 비교적 작은 연면적에 10억 미만의 총 운영비로 운영되는 소규모 시설의 빈도가 높음을 의미함
ggplot(ath0, aes(x = area, y = total_cost/1000)) + geom_point(size = 3, alpha = .5) +
  theme(axis.text.x = element_text(size = rel(1.2)), axis.text.y = element_text(size = rel(1.2)), 
        axis.title.x = element_text(size = rel(1.5)), axis.title.y = element_text(size = rel(1.5))) +
  labs(x = expression(연면적(m^2)), y = "총 운영비(백만원)", size = 5) +
  scale_x_continuous(limits = c(0, 16000),
                     breaks = c(0, 5000, 10000, 15000), 
                     labels = c("0", "5,000", "10,000", "15,000")) +
  scale_y_continuous(limits = c(0, 7500),
                     breaks = c(0, 2000, 4000, 6000), 
                     labels = c("0", "2,000", "4,000", "6,000"))


시사점

  • 가급적 규모와 기능이 유사한 생활체육관을 유형으로 묶어서 분석할 필요가 있음

<기초작업: 회귀분석과 3종제곱합(Type Ⅲ sum of squre)- 1>

  • 총사업비에 영향을 주는 요인을 알아보기 위해 회귀분석을 수행함
  • 모형은 다음과 같음

총 운영비(로그) = β_0 + β_1×연면적(로그) + β_2×강사 수 β_3×관리직 수 + β_4×수영장 유무 + ε

  • R^2값은 0.79로 도출되며, 수영장 유무, 연면적 변수가 유의수준 1%에서 유의미한 변수로 나타남
model1 <- lm(data = ath0, ln_total_cost ~ ln_area + hr_teacher + hr_mag + pool_yn)
summary(model1)
## 
## Call:
## lm(formula = ln_total_cost ~ ln_area + hr_teacher + hr_mag + 
##     pool_yn, data = ath0)
## 
## Residuals:
##     Min      1Q  Median      3Q     Max 
## -0.7199 -0.2209 -0.0066  0.2709  0.5669 
## 
## Coefficients:
##             Estimate Std. Error t value Pr(>|t|)    
## (Intercept) 3.832710   0.321849  11.908  < 2e-16 ***
## ln_area     0.445470   0.103382   4.309 5.67e-05 ***
## hr_teacher  0.002964   0.002453   1.208    0.231    
## hr_mag      0.009794   0.003834   2.555    0.013 *  
## pool_yn     0.637695   0.114607   5.564 5.35e-07 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 0.2994 on 65 degrees of freedom
## Multiple R-squared:  0.7929, Adjusted R-squared:  0.7801 
## F-statistic:  62.2 on 4 and 65 DF,  p-value: < 2.2e-16

<기초작업: 회귀분석과 3종제곱합(Type Ⅲ sum of squre)- 2>

  • 모형의 독립변수간 종속변수에 미치는 상대적 영향력의 크기를 알아보기 위해 3종제곱합을 분석함
t3 <- Anova(model1)
t3
## Anova Table (Type II tests)
## 
## Response: ln_total_cost
##            Sum Sq Df F value    Pr(>F)    
## ln_area    1.6642  1 18.5671 5.671e-05 ***
## hr_teacher 0.1308  1  1.4597   0.23136    
## hr_mag     0.5849  1  6.5259   0.01298 *  
## pool_yn    2.7750  1 30.9604 5.351e-07 ***
## Residuals  5.8261 65                      
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
ssr3 <- t3$`Sum Sq`[1:4]
name <- c("연면적", "강사 수", "관리인력 수", "수영장 유무")

std_cluster <- data.frame(name, ssr3)

std_cluster$label <- round(std_cluster$ssr, 2)

std_cluster
##          name      ssr3 label
## 1      연면적 1.6642014  1.66
## 2     강사 수 0.1308336  0.13
## 3 관리인력 수 0.5849320  0.58
## 4 수영장 유무 2.7750415  2.78

[그림_05] 3종제곱합 기준으로 본 총 운영비의 상대적 영향요인

  • 3종제곱합 기준으로, 모형이 설명하는 종속변수의 변동에 가장 큰 영향을 미치는 변수는 수영장 유무임
  • 수영장이 존재할 경우 그렇지 않은 시설에 비해 수도비, 급탕비, 10인 이상의 수영강사 고용이 추가로 필요하기 때문에 이는 합리적 구분으로 판단됨
  • 그 다음으로, 연면적 규모가 다른 변수에 큰 영향을 미치는 것으로 나타남
  • 연면적 규모가 유지관리비 등에 상당한 영향을 미치기 때문에 이 변수를 고려할 필요도 있음
  • 따라서 유형구분시 이 두 가지 변수를 우선적으로 고려하고자 함.
ggplot(std_cluster, aes(x = name, y = ssr3)) + geom_bar(stat = "identity", fill = "grey60", color = "black") + 
  geom_text(aes(label = label), size = 10, vjust = -.5, color ="grey30") +
  theme(axis.text.x = element_text(size = rel(2)), axis.text.y = element_text(size = rel(2)), 
        axis.title.x = element_text(size = rel(1.5)), axis.title.y = element_text(size = rel(1.5))) +
  labs(x = "변수명", y = "3종제곱합(Type Ⅲ sum of square)") +
  ylim(0, 3.3)


<기초작업>

l1 <- expression(log(10^1))
l2 <- expression(log(10^2))
l3 <- expression(log(10^3))
l4 <- expression(log(10^4))
l5 <- expression(log(10^5))
l6 <- expression(log(10^6))
l7 <- expression(log(10^7))

[그림_06] 유형구분을 위한 산점도

  • 시각화를 통한 합리적 유형구분을 위해 연면적, 총 운영비 기준으로 산점도 제시
  • 대체로 연면적 증가에 따라 총 운영비가 증가하는 추세임
ggplot(ath0, aes(x = ln_area, y = ln_total_cost)) + geom_point(size = 5, alpha = .5) +
  theme(axis.text.x = element_text(size = rel(1.2)), axis.text.y = element_text(size = rel(1.2)), 
        axis.title.x = element_text(size = rel(1.5)), axis.title.y = element_text(size = rel(1.5))) +
  labs(x = expression(연면적(m^2, 로그변환)), y = "총 운영비(천원, 로그변환)") +
  scale_x_continuous(limits = c(2, 4.5), breaks = c(2, 3, 4), labels = c(l2, l3, l4)) +
  scale_y_continuous(limits = c(4, 7.5), breaks = c(4, 5, 6, 7), labels = c(l4, l5, l6, l7))


[그림_07] 수영장 유무에 따른 산점도 구분

  • 수영장이 있는 시설과 그렇지 않은 시설을 구분하여 산점도에 제시
  • 비교적 명확하게, 수영장이 있는 시설이 없는 시설보다 높은 총 운영비가 소요되는 것으로 구분됨
  • 그렇다면 연면적은 어느 경계를 기준으로 대/소를 구분해야 하는가?
ath0$수영장_유무 <- ath0$pool_yn_l

ggplot(ath0, aes(x = ln_area, y = ln_total_cost, shape = 수영장_유무, color = 수영장_유무)) + geom_point(size = 5, alpha = .5) +
  theme(axis.text.x = element_text(size = rel(1.2)), axis.text.y = element_text(size = rel(1.2)), 
        axis.title.x = element_text(size = rel(1.5)), axis.title.y = element_text(size = rel(1.5))) +
  labs(x = expression(연면적(m^2, 로그변환)), y = "총 운영비(천원, 로그변환)") +
  scale_x_continuous(limits = c(2, 4.5), breaks = c(2, 3, 4), labels = c(l2, l3, l4)) +
  scale_y_continuous(limits = c(4, 7.5), breaks = c(4, 5, 6, 7), labels = c(l4, l5, l6, l7)) +
  scale_color_manual(values = c("grey10", "grey50")) +
  theme(legend.title = element_text(size = 15))


<기초작업: 연면적 기준으로 각 관측치의 오차제곱을 최소로 만드는 값을 찾는다>

area_div <- subset(ath0, select = c("area"))

sse <- c()

for(i in 2000:4000)
{
  area_div$x <- i
  area_div$se <- (area_div$area - area_div$x)^2
  sse <- rbind(sse, sum(area_div$se))
}

sse_plot <- data.frame(2000:4000, sse)

names(sse_plot) <- c("area", "sse")

min(sse_plot$sse)
## [1] 807109817
which(sse_plot$sse == min(sse_plot$sse))
## [1] 1239
sse_plot[1239,]
##      area       sse
## 1239 3238 807109817

[그림_08] 연면적 분할 기준점에 따른 관측치 오차제곱의 합

  • 연면적 대/소의 구분 기준점(X축)에 따라, 관측치 오차제곱의 합이 어떻게 변동하는지를 나타냄
ggplot(sse_plot, aes(x = area, y = sse/1000000)) + geom_line(size = 1, color = "grey50")  +
  scale_x_continuous(breaks = c(2000, 2500, 3000, 3500, 4000), 
                     labels = c("2,000", "2,500", "3,000", "3,500", "4,000")) +
  theme(axis.text.x = element_text(size = rel(1.2)), axis.text.y = element_text(size = rel(1.2)), 
        axis.title.x = element_text(size = rel(1.5)), axis.title.y = element_text(size = rel(1.5))) +
  labs(x = expression(연면적_구분기준(m^2)), y = "관측치의 오차제곱합(백만)")


[그림_09] 연면적 분할 기준점에 따른 관측치 오차제곱의 합 최소값

  • 3,238m^2를 기준으로 연면적 기준 소형/대형 구분시 관측치 오차제곱의 합이 최소가 됨을 알 수 있음
ggplot(sse_plot, aes(x = area, y = sse/1000000)) + geom_line(size = 1, color = "grey50") + 
  geom_vline(xintercept = 3238, linetype = 3, size = 1, color = "grey50") +
  scale_x_continuous(breaks = c(2000, 2500, 3000, 3238, 3500, 4000), 
                     labels = c("2,000", "2,500", "3,000", "3,238", "3,500", "4,000")) +
  theme(axis.text.x = element_text(size = rel(1.2), color = c("black", "black", "black", "grey50", "black", "black")), 
        axis.text.y = element_text(size = rel(1.5)), 
        axis.title.x = element_text(size = rel(1.5)), axis.title.y = element_text(size = rel(1.5))) +
  labs(x = expression(연면적_구분기준(m^2)), y = "관측치의 오차제곱합(백만)") 
## Warning: Vectorized input to `element_text()` is not officially supported.
## Results may be unexpected or may change in future versions of ggplot2.


[그림_10] 연면적 3,238m^2을 기준으로 소형/대형 구분한 산점도

  • 앞서 관측치 오차제곱합의 최소 기준으로 소형/대형을 구분하여 산점도에 나타냄
  • 해당 기준에 따라 비교적 잘 분리가 되는 것으로 보임(총 운영비의 군집)
ggplot(ath0, aes(x = ln_area, y = ln_total_cost, shape = 수영장_유무, color = 수영장_유무)) + geom_point(size = 5, alpha = .5) +
  theme(axis.text.x = element_text(size = rel(1.2)), axis.text.y = element_text(size = rel(1.2)), 
        axis.title.x = element_text(size = rel(1.5)), axis.title.y = element_text(size = rel(1.5))) +
  labs(x = expression(연면적(m^2, 로그변환)), y = "총 운영비(천원, 로그변환)") +
  scale_x_continuous(limits = c(2, 4.5), breaks = c(2, 3, 4), labels = c(l2, l3, l4)) +
  scale_y_continuous(limits = c(4, 7.5), breaks = c(4, 5, 6, 7), labels = c(l4, l5, l6, l7)) +
  scale_color_manual(values = c("grey10", "grey50")) +
  theme(legend.title = element_text(size = 15)) +
  geom_vline(aes(xintercept = 3.510277), color = "grey50", linetype = 3) + 
  annotate("text", x = 3.25, y = 4.25, label = "연면적 3,238m^2", size = 5)


[그림_11] 선행연구에서 제시한 연면적 기준(3,760m^2)와의 비교

  • 그런데 문화체육관광부(2018)의 선행연구에서 전국단위 기초지자체 공공체육시설 표준모형에서 제시한 연면적 최댓값은 3,760m^2임
  • 일부 표본에 의한 조사인 본 연구와 큰 차이가 나지 않음
ggplot(ath0, aes(x = ln_area, y = ln_total_cost, shape = 수영장_유무, color = 수영장_유무)) + geom_point(size = 5, alpha = .8) +
  theme(axis.text.x = element_text(size = rel(1.2)), axis.text.y = element_text(size = rel(1.2)), 
        axis.title.x = element_text(size = rel(1.5)), axis.title.y = element_text(size = rel(1.5))) +
  labs(x = expression(연면적(m^2, 로그변환)), y = "총 운영비(천원, 로그변환)") +
  scale_x_continuous(limits = c(2, 4.5), breaks = c(2, 3, 4), labels = c(l2, l3, l4)) +
  scale_y_continuous(limits = c(4, 7.5), breaks = c(4, 5, 6, 7), labels = c(l4, l5, l6, l7)) +
  scale_color_manual(values = c("grey10", "grey50")) +
  theme(legend.title = element_text(size = 15)) +
  geom_vline(aes(xintercept = 3.510277), color = "grey50", linetype = 3) + 
  annotate("text", x = 3.15, y = 4.1, label = "연면적 3,238m^2\n기준선", size = 4, color = "grey50") +
  geom_vline(aes(xintercept = 3.575188), color = "grey30", linetype = 2) + 
  annotate("text", x = 3.95, y = 4.1, label = "연면적 3,760m^2\n기준선", size = 4, color = "grey30")


[그림_12] 선행연구의 기준에 따라 대/소 유형 구분

  • 따라서 선행연구에서 제시한 연면적 기준 3,760m^2으로 대/소 유형 구분을 적용함
ggplot(ath0, aes(x = ln_area, y = ln_total_cost, shape = 수영장_유무, color = 수영장_유무)) + geom_point(size = 5, alpha = .8) +
  theme(axis.text.x = element_text(size = rel(1.2)), axis.text.y = element_text(size = rel(1.2)), 
        axis.title.x = element_text(size = rel(1.5)), axis.title.y = element_text(size = rel(1.5))) +
  labs(x = expression(연면적(m^2, 로그변환)), y = "총 운영비(천원, 로그변환)") +
  scale_x_continuous(limits = c(2, 4.5), breaks = c(2, 3, 4), labels = c(l2, l3, l4)) +
  scale_y_continuous(limits = c(4, 7.5), breaks = c(4, 5, 6, 7), labels = c(l4, l5, l6, l7)) +
  scale_color_manual(values = c("grey10", "grey50")) +
  theme(legend.title = element_text(size = 15)) +
  geom_vline(aes(xintercept = 3.575188), color = "grey30", linetype = 2) + 
  annotate("text", x = 3.95, y = 4.1, label = "연면적 3,760m^2\n기준선", size = 4, color = "grey30")


<기초작업: 유형구분별 빈도>

  • 이와 같이 두 가지 기준(수영장 유무, 연면적 대/소)으로 조사된 70개소를 분류함
  • 다음 빈도표와 같이 수영장 없는 유형은 소형 35개소, 대형 4개소로 나타남
  • 수영장 있는 유형은 소형 17개소, 대형 14개소로 나타남
type0 <- c(1, 2, 3, 4)
t0l <-c("1_수영장 없음(소형)", "2_수영장 없음(대형)", "3_수영장 있음(소형)", "4_수영장 있음(대형)")

tl <- data.frame(type0, t0l)
ath00 <- merge(ath0, tl, by = "type0")
ath00$유형구분 <- ath00$t0l

table(ath00$유형구분)
## 
## 1_수영장 없음(소형) 2_수영장 없음(대형) 3_수영장 있음(소형) 4_수영장 있음(대형) 
##                  35                   4                  17                  14

[그림_13] 유형구분 후의 산점도

  • 유형구분 결과를 산점도로 제시함
  • 소형 유형은 수영장 유무에 따라 총 운영비가 확연히 구분됨
  • 수영장 없는 대형의 경우 비교적 명확하게 분류된다 보기 어려움
ggplot(ath00, aes(x = ln_area, y = ln_total_cost, shape = 유형구분, color = 유형구분)) + geom_point(size = 5, alpha = .8) +
    theme(axis.text.x = element_text(size = rel(1.2)), axis.text.y = element_text(size = rel(1.2)), 
        axis.title.x = element_text(size = rel(1.5)), axis.title.y = element_text(size = rel(1.5))) +
  labs(x = expression(연면적(m^2, 로그변환)), y = "총 운영비(천원, 로그변환)") +
  scale_x_continuous(limits = c(2, 4.5), breaks = c(2, 3, 4), labels = c(l2, l3, l4)) +
  scale_y_continuous(limits = c(4, 7.5), breaks = c(4, 5, 6, 7), labels = c(l4, l5, l6, l7)) +
  scale_color_manual(values = c("grey10", "grey25", "grey40", "grey55")) +
  theme(legend.title = element_text(size = 15)) +
  geom_vline(aes(xintercept = 3.575188), color = "grey50", linetype = 2) + 
  annotate("text", x = 3.95, y = 4.15, label = "연면적 3,760m^2\n기준선", size = 4, color = "grey50") +
  scale_shape_manual(values = c(16, 17, 15, 18)) 


<기초작업: 관리직의 유형구분별 기술통계 및 시각화 예비작업>

mag <- ath00 %>%
  group_by(유형구분) %>%
  summarize(p000 = min(hr_mag, na.rm = TRUE),
            p010 = quantile(hr_mag, prob = .1, na.rm = TRUE)[[1]],
            p025 = quantile(hr_mag, na.rm = TRUE)[[2]],
            p050 = median(hr_mag, na.rm = TRUE),
            p075 = quantile(hr_mag, na.rm = TRUE)[[4]],
            p090 = quantile(hr_mag, prob = .9, na.rm = TRUE)[[1]],
            p100 = max(hr_mag, na.rm = TRUE))

mag_t <- melt(mag, id.var = "유형구분")

mag_t$x <- as.numeric(substr(mag_t$variable, 2, 4))

[그림_14] 관리인력의 분위별 규모

  • 관리인력의 분위(X축)별 규모를 Y축에 나타내었음
  • 유형별 상위 25%이상의 시설에서 관리인력이 급격히 증가하는 추세를 보임
ggplot(mag_t, aes(x = x, y = value, shape = 유형구분, linetype = 유형구분, color = 유형구분)) + 
  geom_point(size = 3) + geom_line(size = 1) +
  theme(legend.title = element_text(size = 15)) +
  theme(axis.text.x = element_text(size = rel(1.2)), axis.text.y = element_text(size = rel(1.2)), 
        axis.title.x = element_text(size = rel(1.5)), axis.title.y = element_text(size = rel(1.5))) +
  labs(x = "백분위수(%)", y = "관리인력규모(명)") +
  scale_x_continuous(breaks = c(0, 10, 25, 50, 75, 90, 100)) +
  scale_color_manual(values = c("grey10", "grey25", "grey40", "grey55")) +
  scale_shape_manual(values = c(16, 17, 15, 18)) 


<기초작업: 강사의 유형구분별 기술통계 및 시각화 예비작업>

teacher <- ath00 %>%
  group_by(유형구분) %>%
  summarize(p000 = min(hr_teacher, na.rm = TRUE),
            p010 = quantile(hr_teacher, prob = .1, na.rm = TRUE)[[1]],
            p025 = quantile(hr_teacher, na.rm = TRUE)[[2]],
            p050 = median(hr_teacher, na.rm = TRUE),
            p075 = quantile(hr_teacher, na.rm = TRUE)[[4]],
            p090 = quantile(hr_teacher, prob = .9, na.rm = TRUE)[[1]],
            p100 = max(hr_teacher, na.rm = TRUE))

teacher_t <- melt(teacher, id.var = "유형구분")

teacher_t$x <- as.numeric(substr(teacher_t$variable, 2, 4))

[그림_15] 강사인력의 분위별 규모

  • 강사인력의 분위(X축)별 규모를 Y축에 나타내었음
  • 관리인력에 비해 전체 분위에서 완만히 증가하는 편임
  • 다만 수영장 있는 소형 유형의 경우, 중위수 및 상위 25% 분위수가 0 으로 나타남
  • 이는 해당 유형의 75%가 강사 고용 없이 운영됨을 시사함
ggplot(teacher_t, aes(x = x, y = value, shape = 유형구분, linetype = 유형구분, color = 유형구분)) + 
  geom_point(size = 3) + geom_line(size = 1) +
  theme(legend.title = element_text(size = 15)) +
  theme(axis.text.x = element_text(size = rel(1.2)), axis.text.y = element_text(size = rel(1.2)), 
        axis.title.x = element_text(size = rel(1.5)), axis.title.y = element_text(size = rel(1.5))) +
  labs(x = "백분위수(%)", y = "강사인력규모(명)") +
  scale_x_continuous(breaks = c(0, 10, 25, 50, 75, 90, 100)) +
  scale_color_manual(values = c("grey10", "grey25", "grey40", "grey55")) +
  scale_shape_manual(values = c(16, 17, 15, 18))


<기초작업: 수영장 없는 소형 유형 뜯어보기>

ath1 <- subset(ath00, type0 == 1)
ath1$lec <- ath1$강사유무
ath1$강사유무 <- ifelse(ath1$lec == 0, "없음", "있음")

[그림_16] 강사 고용 유무에 따른 산점도(수영장 없는 소형 유형)>

  • 수영장 없는 소형 유형(35개)에서 연면적과 총 운영비의 산점도를 강사 고용 유무로 구분하여 제시
  • 연면적이 비교적 작고 강사를 고용하지 않아 총 운영비가 적게 소모되는 유형의 시설이 다수 존재함
  • 따라서 수영장 없는 소형 유형은 보다 세분화하여 구분 필요
  • 수영장 없는 소형 유형(35개소) = 강사 고용 없이 운영되는 시설(26개소) + 강사를 고용하여 운영되는 시설(9개소)
ggplot(ath1, aes(x = area, y = total_cost/1000, shape = 강사유무, color = 강사유무)) + 
  geom_point(size = 5, alpha = .5) +
  scale_color_manual(values = c("grey50", "grey10")) +
  theme(legend.title = element_text(size = 15)) +
  theme(axis.text.x = element_text(size = rel(1.2)), axis.text.y = element_text(size = rel(1.2)), 
        axis.title.x = element_text(size = rel(1.5)), axis.title.y = element_text(size = rel(1.5))) +
  labs(x = expression(연면적(m^2)), y = "총 운영비(백만원)") +
  scale_x_continuous(breaks = c(0, 1000, 2000, 3000),
                     labels = c("0", "1,000", "2,000", "3,000")) 


<기초작업>

table(ath0$type_r)
## 
##   1   2   3 3.5   4 
##  26   9  17   4  14
## 수영장 없는 대형?

ath2 <- subset(ath0, type0 == 2)

ath2$label <- c("배드민턴장, 탁구장", 
                "주경기장, 보조경기장, 테니스장",
                "골프장, 테니스장, 볼링장",
                "볼링장, 배드민턴장,탁구장")

[그림_17] 수영장 없는 대형 유형의 고찰

  • 앞서 언급하였듯, 비교적 빈도가 낮고(4개소) 편차가 크게 나타나는 수영장 없는 대형 시설을 추가적으로 분석함
  • 연면적의 편차가 다른 유형에 비해 큼
  • 골프장, 볼링장 등 운영빈도가 높지 않은 특수 시설을 지니고 있다는 점에서 다른 유형과 구분됨
  • 이러한 큰 편차와 특이시설의 존재로 인해 향후 이러한 유형의 체육시설이 계획될 가능성은 낮음
  • 이에 해당 유형을 분석대상에서 제외함
ggplot(ath2, aes(x = area, y = total_cost/1000)) + geom_point(size = 3) +
  geom_text(aes(label = label), hjust = -.05, vjust = 0, color = "grey40", size = 5) +
  theme(axis.text.x = element_text(size = rel(1.2)), axis.text.y = element_text(size = rel(1.2)), 
        axis.title.x = element_text(size = rel(1.5)), axis.title.y = element_text(size = rel(1.5))) +
  labs(x = expression(연면적(m^2)), y = "총 운영비(백만원)") +
  ylim(0, 2500) + 
  scale_x_continuous(limits = c(5000, 16000),
                     breaks = c(5000, 7500, 10000, 12500, 15000),
                     labels = c("5,000", "7,500", "10,000", "12,500", "15,000")) 


<기초작업: 최종 유형 분류(66개소)>

type_r <- 1:4
최종분류 <- c("1_자율이용시설", "2_수영장 없음(소형)", "3_수영장 있음(소형)", "4_수영장 있음(대형)")

rl <- data.frame(type_r, 최종분류)

ath3 <- merge(ath00, rl, by = "type_r")

table(ath3$type_r)
## 
##  1  2  3  4 
## 26  9 17 14

[그림_18] 분석대상 최종 유형 분류

  • 최종 유형 구분은 다음과 같음
  • 자율이용시설(수영장 없음, 연면적 3,760m^2 이하, 강사고용 없음 / 26개소)
  • 수영장 없는 소형 시설(연면적 3,760m^2 이하, 강사고용 있음 / 9개소)
  • 수영장 있는 소형 시설(연면적 3,760m^2 이하, 강사고용 있음 / 17개소)
  • 수영장 있는 대형 시설(연면적 3,760m^2 이상, 강사고용 있음 / 14개소)
ggplot(ath3, aes(x = ln_area, y = ln_total_cost, shape = 최종분류, color = 최종분류)) + geom_point(size = 5, alpha = .8) +
  theme(axis.text.x = element_text(size = rel(1.2)), axis.text.y = element_text(size = rel(1.2)), 
        axis.title.x = element_text(size = rel(1.5)), axis.title.y = element_text(size = rel(1.5))) +
  labs(x = expression(연면적(m^2, 로그변환)), y = "총 운영비(천원, 로그변환)") +
  scale_x_continuous(limits = c(2, 4.5), breaks = c(2, 3, 4), labels = c(l2, l3, l4)) +
  scale_y_continuous(limits = c(4, 7.5), breaks = c(4, 5, 6, 7), labels = c(l4, l5, l6, l7)) +
  scale_color_manual(values = c("grey10", "grey25", "grey40", "grey55")) +
  theme(legend.title = element_text(size = 15)) +
  geom_vline(aes(xintercept = 3.575188), color = "grey50", linetype = 2) + 
  annotate("text", x = 3.95, y = 4.15, label = "연면적 3,760m^2\n기준선", size = 4, color = "grey50") +
  scale_shape_manual(values = c(16, 17, 15, 18)) 


<기초작업: 인력의 기술통계>

hr <- ath3 %>%
  group_by(type_r) %>%
  summarize(teacher = mean(hr_teacher),
            mag = mean(hr_mag))

hr_t <- melt(hr, id.vars = "type_r")

hr_t$label = round(hr_t$value, 1)

[그림_19] 유형별 평균 인력 운용

  • 자율이용시설은 앞서 분류기준과 같이 강사 고용 없이 소규모의 관리인력으로 운영됨
  • 수영장 없는 소형의 경우, 평균적으로 강사 9.2명, 관리인력 5.2명으로 운영됨
  • 가장 큰 유형인 수영장 있는 대형의 경우, 평균적으로 37명의 강사와 21명의 관리인력으로 운영됨
  • 주목할 점은 수영장 있는 경우, 없는 경우에 비해 강사 및 관리직 수가 큰 폭으로 증가함
ggplot(hr_t, aes(x = type_r, y = value, fill = variable)) + geom_bar(position = "dodge", stat = "identity", color = "black") +
  geom_text(aes(label = label), position = position_dodge(.9), size = 5, vjust = -.5) +
  ylim(0, 40) +
  scale_fill_manual(values = c("grey70", "grey50"), labels = c("강사", "관리직")) +
  labs(x = "체육시설 유형", y = "인력규모(명)", fill = "인력분류") +
  scale_x_continuous(breaks = c(1, 2, 3, 4), 
                     labels = c("자율이용시설", "수영장없음(소형)", "수영장있음(소형)", "수영장있음(대형)")) +
  theme(axis.text.x = element_text(size = rel(1.35)), axis.text.y = element_text(size = rel(1.35)), 
        axis.title.x = element_text(size = rel(1.5)), axis.title.y = element_text(size = rel(1.5)),
        legend.title = element_text(size = 15)) 


<기초작업: 강사 인력 세분류 기술통계>

hr1 <- ath3 %>%
  group_by(type_r) %>%
  summarize(hr_gx = mean(hr_gx),
            hr_pool = mean(hr_pool),
            hr_etc = mean(hr_etc))

hr1_t <- melt(hr1, id.vars = "type_r")

hr1_t$label <- round(hr1_t$value, 1)

[그림_20] 유형별 강사 인력의 유형별 평균 고용

  • 비슷한 규모인 수영장 없는 소형과 수영장 있는 소형을 비교해 볼 때, 헬스강사 수는 평균 1.8명으로 동일하지만 수영강사를 평균 17.1명이나 고용하고 있음을 알 수 있음
  • 해당 비교시, 수영장 있는 소형이 필라테스 등 기타 유형의 강사도 13.6명으로 고용규모가 비교적 큼
ggplot(hr1_t, aes(x = type_r, y = value, fill = variable)) + geom_bar(position = "dodge", stat = "identity", color = "black") +
  geom_text(aes(label = label), position = position_dodge(.9), size = 5, vjust = -.5) +
  ylim(0, 22) +
  scale_fill_manual(values = c("grey80", "grey60", "grey40"), labels = c("헬스강사", "수영강사", "기타강사")) +
  labs(x = "체육시설 유형", y = "인력규모(명)", fill = "강사유형") +
  scale_x_continuous(breaks = c(1, 2, 3, 4), 
                     labels = c("자율이용시설", "수영장없음(소형)", "수영장있음(소형)", "수영장있음(대형)")) +
  theme(axis.text.x = element_text(size = rel(1.35)), axis.text.y = element_text(size = rel(1.35)), 
        axis.title.x = element_text(size = rel(1.5)), axis.title.y = element_text(size = rel(1.5)),
        legend.title = element_text(size = 15)) 


<기초작업: 관리 인력 세분류 기술통계>

hr2 <- ath3 %>%
  group_by(type_r) %>%
  summarise(hr_admin = mean(hr_admin),
            hr_facmag = mean(hr_facmag))

hr2_t <- melt(hr2, id.vars = "type_r")

hr2_t$label <- round(hr2_t$value, 1)

[그림_21] 유형별 관리 인력의 유형별 평균 고용

  • 가장 작은 자율이용시설의 경우 평균적으로 사무행정인력 1.3명, 시설유지인력 1.1명을 운용
  • 가장 큰 유형인 수영장있는 대형의 경우, 사무행정 인력 4.8명, 시설유지인력 16.2명을 고용
ggplot(hr2_t, aes(x = type_r, y = value, fill = variable)) + geom_bar(position = "dodge", stat = "identity", color = "black") +
  geom_text(aes(label = label), position = position_dodge(.9), size = 5, vjust = -.5) +
  ylim(0, 20) +
  scale_fill_manual(values = c("grey70", "grey50"), labels = c("사무행정", "시설유지")) +
  labs(x = "체육시설 유형", y = "인력규모(명)", fill = "관리인력유형") +
  scale_x_continuous(breaks = c(1, 2, 3, 4), 
                     labels = c("자율이용시설", "수영장없음(소형)", "수영장있음(소형)", "수영장있음(대형)")) +
  theme(axis.text.x = element_text(size = rel(1.35)), axis.text.y = element_text(size = rel(1.35)), 
        axis.title.x = element_text(size = rel(1.5)), axis.title.y = element_text(size = rel(1.5)),
        legend.title = element_text(size = 15)) 


<기초작업: 인력운용비>

hr_cost0 <- ath3 %>%
  group_by(type_r) %>%
  summarize(l_cost1 = mean(cost_lab),
            l_cost2 = mean(lab_cost))

hr_cost0_t <- melt(hr_cost0, id.vars = "type_r")

hr_cost0_t$label <- round(hr_cost0_t$value/1000, 0)

[그림_22] 유형별 인력운용비

  • 인력운용비는 주로 정규직의 임금으로 구성되는 인건비와 계약직의 임금 및 제 수당 항목인 인건비성 경비로 구분됨
  • 가장 큰 규모인 수영장있는 대형의 경우 평균적으로 인건비 9.6억원, 인건비성 경비 7억원을 지출하고 있음
ggplot(hr_cost0_t, aes(x = type_r, y = value/1000, fill = variable)) + 
  geom_bar(position = "dodge", stat = "identity", color = "black") +
  geom_text(aes(label = label), position = position_dodge(.9), size = 5, vjust = -.5) +
  ylim(0, 1100) +
  scale_fill_manual(values = c("grey70", "grey50"), labels = c("인건비", "인건비성경비")) +
  labs(x = "체육시설 유형", y = "인력규모(명)", fill = "인력운용비") +
  scale_x_continuous(breaks = c(1, 2, 3, 4), 
                     labels = c("자율이용시설", "수영장없음(소형)", "수영장있음(소형)", "수영장있음(대형)")) +
  theme(axis.text.x = element_text(size = rel(1.35)), axis.text.y = element_text(size = rel(1.35)), 
        axis.title.x = element_text(size = rel(1.5)), axis.title.y = element_text(size = rel(1.5)),
        legend.title = element_text(size = 15)) 


<기초작업: 인력운용비 원단위>

hr_cost <- ath3 %>%
  group_by(type_r) %>%
  summarize(n = mean(hr_total),
            l_cost1 = mean(cost_lab),
            l_cost2 = mean(lab_cost))

hr_cost$n2 <- round(hr_cost$n, 1)

hr_cost$l_cost_total <- with(hr_cost, l_cost1 + l_cost2)

hr_cost$avr <- with(hr_cost, l_cost_total / n2)
hr_cost$label <- round(hr_cost$avr, 0)
hr_cost$label2 <- c("38,072", "17,543", "26,500", "28,563")

[그림_23] 유형별 1인당 인력운용비(원단위 기준)

  • 자율이용시설이 평균 1인당 38백만원으로 가장 높게 나타남
  • 수영장 있는 소형과 대형은 2천만원대 후반으로, 비슷하게 나타남
  • 자율이용시설의 경우 보통 총원 2~4명의 소규모로 운영되는데, 이 때 시설의 기관장을 맡는 정규직 공무원/지방공기업 1인의 인건비가 다른 유형에 비해 과대반영되기 때문임
  • 수영장 없는 소형의 경우, 시간제/비정규직 고용이 빈번하여 1인당 인건비가 다른 유형에 비해 낮게 나타남
ggplot(hr_cost, aes(x = type_r, y = avr)) + geom_bar(stat = "identity", fill = "grey60", color = "black") +
  geom_text(aes(label = label2), size = 5, vjust = -.5) +
  labs(x = "체육시설 유형", y = "인력운용비(천원)") +
  scale_x_continuous(breaks = c(1, 2, 3, 4), 
                     labels = c("자율이용시설", "수영장없음(소형)", "수영장있음(소형)", "수영장있음(대형)")) +
  scale_y_continuous(limits = c(0, 41000),
                     breaks = c(10000, 20000, 30000, 40000), 
                     labels = c("10,000", "20,000", "30,000", "40,000")) +
  theme(axis.text.x = element_text(size = rel(1.35)), axis.text.y = element_text(size = rel(1.35)), 
        axis.title.x = element_text(size = rel(1.5)), axis.title.y = element_text(size = rel(1.5)))


<기초작업: 운영유지관리비>

mag <- ath3 %>%
  group_by(type_r) %>%
  summarize(gen_cost = mean(gen_cost),
            main_cost = mean(main_cost))

mag_t <- melt(mag, id.vars = "type_r")

mag_t$label <- round(mag_t$value/1000, 0)

[그림_24] 유형별 운영유지관리비

  • 유형별 평균 일반운영비와 유지관리비를 나타내었음
  • 사업수행과 제세공과금, 제 경비를 포함하는 일반운영비가 시설유지관리를 위한 유지관리비보다 높은 수준으로 나타남
ggplot(mag_t, aes(x = type_r, y = value/1000, fill = variable)) + 
  geom_bar(position = "dodge", stat = "identity", color = "black") +
  geom_text(aes(label = label), position = position_dodge(.9), size = 5, vjust = -.5) +
  ylim(0, 1100) +
  scale_fill_manual(values = c("grey70", "grey50"), labels = c("일반운영비", "유지관리비")) +
  labs(x = "체육시설 유형", y = "금액(백만원)", fill = "운영유지관리비") +
  scale_x_continuous(breaks = c(1, 2, 3, 4), 
                     labels = c("자율이용시설", "수영장없음(소형)", "수영장있음(소형)", "수영장있음(대형)")) +
  theme(axis.text.x = element_text(size = rel(1.35)), axis.text.y = element_text(size = rel(1.35)), 
        axis.title.x = element_text(size = rel(1.5)), axis.title.y = element_text(size = rel(1.5)),
        legend.title = element_text(size = 15)) 


<기초작업: 운영유지관리비의 원 단위 산출>

mag2 <- ath3 %>%
  group_by(type_r) %>%
  summarize(area = sum(area),
            gen_cost = sum(gen_cost),
            main_cost = sum(main_cost))

mag2$gen_per <- with(mag2, gen_cost / area)
mag2$main_per <- with(mag2, main_cost / area)

mag2_1 <- subset(mag2, select = c("type_r", "gen_per", "main_per"))

mag2_1$pool <- ifelse(mag2_1$type_r <= 2, 0, 1)

mag2_1_t <- melt(mag2_1, id.vars = c("type_r", "pool"))

mag2_1_t$label <- round(mag2_1_t$value, 0)

mag2_1_t$type_p <- ifelse(mag2_1_t$type_r == 1 | mag2_1_t$type_r == 3, 1, 2)

[그림_25] 단위면적(m^2) 기준의 운영유지관리비

  • 유형별 단위면적(m^2) 기준으로 운영유지관리비를 나타내었음
  • 주목할 점은 수영장 있는 유형의 경우, 소형 규모보다 대형 규모가 단위면적당 비용이 확연히 낮게 나타남
  • 연면적 증가에 따른 단위면적당 비용이 감소하는 규모의 경제 효과가 확연히 나타남
ggplot(mag2_1_t, aes(x = type_r, y = value, fill = variable)) + 
  geom_bar(position = "dodge", stat = "identity", color = "black") +
  geom_text(aes(label = label), position = position_dodge(.9), size = 5, vjust = -.5) +
  ylim(0, 250) +
  scale_fill_manual(values = c("grey70", "grey50"), labels = c("일반운영비", "유지관리비")) +
  labs(x = "체육시설 유형", y = "금액(백만원)", fill = "단위면적당 비용") +
  scale_x_continuous(breaks = c(1, 2, 3, 4), 
                     labels = c("자율이용시설", "수영장없음(소형)", "수영장있음(소형)", "수영장있음(대형)")) +
  theme(axis.text.x = element_text(size = rel(1.35)), axis.text.y = element_text(size = rel(1.35)), 
        axis.title.x = element_text(size = rel(1.5)), axis.title.y = element_text(size = rel(1.5)),
        legend.title = element_text(size = 15))


<기초작업: 운영비 표준모형>

std_hr <- ath3 %>%
  group_by(type_r) %>%
  summarize(hr_gx = mean(hr_gx),
            hr_pool = mean(hr_pool),
            hr_etc = mean(hr_etc),
            hr_admin = mean(hr_admin),
            hr_facmag = mean(hr_facmag))

std_hr1 <- ceiling(std_hr)

std_hr1$total <- with(std_hr1, hr_gx + hr_pool + hr_etc + hr_admin + hr_facmag)

std_model <- subset(std_hr1, select = c("type_r", "total"))

std_model$area <- c(1000, 2000, 2000, 7500)

##인력운영비
std_model$l_cost <- hr_cost$avr
std_model$l_cost_total <- with(std_model, total * l_cost)

##운영관리비
std_model$gen_per <- round(mag2$gen_per, 1)
std_model$main_per <- round(mag2$main_per, 1)

std_model$gen_cost <- with(std_model, area * gen_per)
std_model$main_cost <- with(std_model, area * main_per)

std_model$op_main_total <- with(std_model, gen_cost + main_cost)

std_model$total_cost <- with(std_model, op_main_total + l_cost_total)

std_model_t <- melt(std_model, id.vars = "type_r", measure.vars = c("l_cost_total", "op_main_total"))

std_model_t$label <- round(std_model_t$value/1000, 0)
std_model_t$label2 <- c("152", "281", "1,299", "1,742", "61", "189", "640", "1,298")

[그림_26] 운영비 표준모형

  • 각 유형별 연면적은 평균값에 기반하여 구성함
  • 인력 규모는 유형별 세분류를 올림하여 제시함
  • 가장 소규모인 자율이용시설은 4명의 인력이 고용되어 인력운용비 1.5억원과 운영유지관리비 0.6억원, 총 2.1억원을 소요됨
  • 가장 큰 규모인 수영장 있는 대형의 경우 61명의 인력이 고용되어 인력운용비 17억원과 운영유지관리비 13억원으로 연간 총 운영비가 30억원 소요되는 것으로 나타남
ggplot(std_model_t, aes(x = type_r, y = value/1000, fill = variable)) + 
  geom_bar(position = "dodge", stat = "identity", color = "black") +
  geom_text(aes(label = label2), position = position_dodge(.9), size = 5, vjust = -.5) +
  ylim(0, 2000) + 
  scale_fill_manual(values = c("grey70", "grey50"), labels = c("인력운용비", "운영유지관리비")) +
  labs(x = "체육시설 유형", y = "금액(백만원)", fill = "비용 분류") +
  scale_x_continuous(breaks = c(1, 2, 3, 4), 
                     labels = c("자율이용시설", "수영장없음(소형)", "수영장있음(소형)", "수영장있음(대형)")) +
  theme(axis.text.x = element_text(size = rel(1.35)), axis.text.y = element_text(size = rel(1.35)), 
        axis.title.x = element_text(size = rel(1.5)), axis.title.y = element_text(size = rel(1.5)),
        legend.title = element_text(size = 15))


<기초작업: 운영비 표준모형 세부사항>

## 모형별 뜯어보기

std_model$hr_gx <- std_hr1$hr_gx
std_model$hr_pool <- std_hr1$hr_pool
std_model$hr_etc <- std_hr1$hr_etc
std_model$hr_admin <- std_hr1$hr_admin
std_model$hr_facmag <- std_hr1$hr_facmag

std_model$hr_teacher <- with(std_model, hr_gx + hr_pool + hr_etc)
std_model$hr_mag <- with(std_model, hr_admin + hr_facmag)

std_model_final <- subset(std_model, select = c("type_r", "area", "hr_teacher", "hr_mag", "total", 
                                                "l_cost_total", "op_main_total", "total_cost"))
std_model_final
## # A tibble: 4 x 8
##   type_r  area hr_teacher hr_mag total l_cost_total op_main_total total_cost
##    <dbl> <dbl>      <dbl>  <dbl> <dbl>        <dbl>         <dbl>      <dbl>
## 1      1  1000          0      4     4      152288.         60600    212888.
## 2      2  2000         10      6    16      280684.        189200    469884.
## 3      3  2000         34     15    49     1298511.        639800   1938311.
## 4      4  7500         39     22    61     1742345.       1298250   3040595.

<기초작업: 운영유지관리비와 규모의 경제>

ath3$op_per <- ath3$op_cost / ath3$area
ath3$ln_op_per <- log10(ath3$op_per)

model0 <- lm(ln_op_per ~ ln_area + factor(type_r) + ln_area * factor(type_r), data = ath3)

summary(model0)
## 
## Call:
## lm(formula = ln_op_per ~ ln_area + factor(type_r) + ln_area * 
##     factor(type_r), data = ath3)
## 
## Residuals:
##      Min       1Q   Median       3Q      Max 
## -1.37723 -0.12476 -0.01119  0.12582  0.92519 
## 
## Coefficients:
##                         Estimate Std. Error t value Pr(>|t|)    
## (Intercept)               3.9583     0.6667   5.938 1.73e-07 ***
## ln_area                  -0.7577     0.2230  -3.398  0.00123 ** 
## factor(type_r)2          -0.3199     2.0406  -0.157  0.87597    
## factor(type_r)3           0.1119     1.6713   0.067  0.94687    
## factor(type_r)4           3.8650     1.9796   1.952  0.05573 .  
## ln_area:factor(type_r)2   0.2105     0.6392   0.329  0.74308    
## ln_area:factor(type_r)3   0.2774     0.5166   0.537  0.59337    
## ln_area:factor(type_r)4  -0.7238     0.5332  -1.358  0.17987    
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 0.3367 on 58 degrees of freedom
## Multiple R-squared:  0.5861, Adjusted R-squared:  0.5362 
## F-statistic: 11.74 on 7 and 58 DF,  p-value: 3.404e-09

[그림_27] 운영유지관리비와 규모의 경제

  • 추가적으로 유형별 운영유지관리비 규모의 경제 효과가 나타나는지 여부를 산점도를 통해 분석함
  • 유형별 산점도에서 제시되는 바와 같이, 규모가 증가함에 따라 단위면적당 운영비가 감소하는 규모의 경제 효과가 명확히 존재함을 알 수 있음
  • 특히 수영장 있는 대형 유형에서 이러한 규모의 경제 효과가 가장 크게 나타나는 것으로 분석됨
ggplot(ath3, aes(x = ln_area, y = ln_op_per, shape = 최종분류, color = 최종분류)) + geom_point(size = 3, alpha = .8) +
  theme(axis.text.x = element_text(size = rel(1.1)), axis.text.y = element_text(size = rel(1.1)), 
        axis.title.x = element_text(size = rel(1.5)), axis.title.y = element_text(size = rel(1.5))) +
  labs(x = expression(연면적(m^2, 로그변환)), y = expression(단위면적당_운영비(천원, 로그변환))) +
  scale_color_manual(values = c("grey10", "grey25", "grey40", "grey55")) +
  theme(legend.title = element_text(size = 15)) +
  scale_shape_manual(values = c(16, 17, 15, 18)) +
  geom_smooth(method = lm, se = FALSE) +
  scale_x_continuous(limits = c(2, 4.2), breaks = c(2, 3, 4), labels = c(l2, l3, l4)) +
  scale_y_continuous(breaks = c(1, 2, 3), labels = c(l1, l2, l3)) +
  facet_wrap(~최종분류)
## `geom_smooth()` using formula 'y ~ x'