연평균성장률 계산

데이터 준비

연평균성장률(Compound Annual Growth Rate, CAGR)은 특정 기간 동안의 평균 성장률을 계산하여 데이터의 장기적인 변화를 평가하는 데 유용한 지표입니다. 이 글에서는 1995년부터 2023년까지의 주민등록인구 데이터를 활용하여 연평균성장률을 계산하는 과정을 단계별로 설명하겠습니다.

먼저, 데이터를 준비합니다. 이번 예제에서는 통계청의 시도별 주민등록인구 데이터를 활용하겠습니다. 이 데이터는 행정구역, 시점, 주민등록인구수로 구성되어 있습니다. read_xlsx 함수를 사용해 데이터를 가져온 후, head 함수로 데이터의 첫 몇 행을 미리 살펴봅니다.

# 패키지 로드
library(tidyverse)
library(readxl)

# 데이터 로드
data <- read_xlsx("데이터/주민등록인구_시도_1995-2023.xlsx")

# 데이터 확인
head(data)
## # A tibble: 6 × 3
##   행정구역별 시점  `계 (명)`  
##   <chr>      <chr> <chr>      
## 1 전국       1995  4.5858029E7
## 2 전국       1996  4.6266256E7
## 3 전국       1997  4.6684069E7
## 4 전국       1998  4.6991171E7
## 5 전국       1999  4.7335678E7
## 6 전국       2000  4.7732558E7

다음으로, 데이터를 분석하기 쉽게 칼럼명을 정리하고 숫자형 데이터로 변환합니다. rename 함수를 이용해 칼럼명을 보다 직관적으로 변경하고, mutate를 통해 데이터를 숫자형으로 변환했습니다.

data <- data %>% 
  rename(주민등록인구수 = `계 (명)`) %>% 
  mutate(시점 = as.numeric(시점),
         주민등록인구수 = as.numeric(주민등록인구수))

head(data)
## # A tibble: 6 × 3
##   행정구역별  시점 주민등록인구수
##   <chr>      <dbl>          <dbl>
## 1 전국        1995       45858029
## 2 전국        1996       46266256
## 3 전국        1997       46684069
## 4 전국        1998       46991171
## 5 전국        1999       47335678
## 6 전국        2000       47732558

1년 성장률 계산

연평균성장률(CAGR)은 특정 기간 동안의 평균 성장률을 계산하는 지표로, 매년 일정한 비율로 성장했다고 가정하여 계산됩니다. 연평균성장률의 계산 공식은 다음과 같습니다. CAGR을 백분율(%)로 표현하려면 계산된 값에 100을 곱하면 됩니다.

CAGR = (Vf/Vi)1/n − 1

  • Vf: 최종 값
  • Vi: 초기 값
  • n: 기간

먼저, CAGR 함수를 정의해 줍니다. 이 함수는 초기 값, 최종 값, 초기 연도, 최종 연도를 입력받아 특정 기간 동안의 연평균성장률을 계산합니다.

cagr <- function(initial_value, final_value, inital_year, final_year){
  years <- final_year - inital_year
  cagr <- ((final_value/initial_value)^(1/years)) - 1
  return (cagr)
}

행정구역, 시점, 주민등록인구수로 구성된 데이터 테이블에 1년 성장률이라는 새 칼럼을 추가하여 연도별 성장률을 계산합니다. 아래 그림과 같이, 1995~1996년 인구 성장률은 1996년 행에 계산합니다.

1년 성장률 표

group_by(행정구역별)을 이용해 행정구역별로 성장률이 계산될 수 있도록 합니다. cagr 함수를 사용해 1년 성장률을 계산합니다. 이때, lag 함수로 이전 연도의 데이터를 참조합니다. percent 함수로 계산된 성장률을 백분율로 변환합니다.

library(scales)

data %>% 
  group_by(행정구역별) %>% 
  mutate(`1년 성장률`=cagr(lag(주민등록인구수), 주민등록인구수, lag(시점), 시점)) %>% 
  mutate(`1년 성장률`=percent(`1년 성장률`, accuracy=.01))
## # A tibble: 507 × 4
## # Groups:   행정구역별 [18]
##    행정구역별  시점 주민등록인구수 `1년 성장률`
##    <chr>      <dbl>          <dbl> <chr>       
##  1 전국        1995       45858029 <NA>        
##  2 전국        1996       46266256 0.89%       
##  3 전국        1997       46684069 0.90%       
##  4 전국        1998       46991171 0.66%       
##  5 전국        1999       47335678 0.73%       
##  6 전국        2000       47732558 0.84%       
##  7 전국        2001       48021543 0.61%       
##  8 전국        2002       48229948 0.43%       
##  9 전국        2003       48386823 0.33%       
## 10 전국        2004       48583805 0.41%       
## # ℹ 497 more rows

5년 연평균성장률 계산

5년 단위로 성장률을 계산하고자 할 경우, lag 함수의 n 매개변수를 이용해 5년 전 데이터를 참조합니다. 아래 그림과 같이, 1995~2000년 연평균성장률을 2000년 행에 계산합니다.

5년 연평균성장률 표

data %>% 
  group_by(행정구역별) %>% 
  mutate(`5년 성장률`=cagr(lag(주민등록인구수, n=5), 주민등록인구수, lag(시점, n=5), 시점)) %>% 
  mutate(`5년 성장률`=percent(`5년 성장률`, accuracy=.01))
## # A tibble: 507 × 4
## # Groups:   행정구역별 [18]
##    행정구역별  시점 주민등록인구수 `5년 성장률`
##    <chr>      <dbl>          <dbl> <chr>       
##  1 전국        1995       45858029 <NA>        
##  2 전국        1996       46266256 <NA>        
##  3 전국        1997       46684069 <NA>        
##  4 전국        1998       46991171 <NA>        
##  5 전국        1999       47335678 <NA>        
##  6 전국        2000       47732558 0.80%       
##  7 전국        2001       48021543 0.75%       
##  8 전국        2002       48229948 0.65%       
##  9 전국        2003       48386823 0.59%       
## 10 전국        2004       48583805 0.52%       
## # ℹ 497 more rows