시계열 분석에서 이동평균(Moving Average)과 이동합계(Moving Sum)은 데이터의 변동성을 줄이거나 패턴을 더 잘 이해하기 위해 자주 사용되는 기법이다. R의 zoo 패키지의 rollapply() 함수는 이러한 계산을 쉽게 할 수 있게 도와준다. 이 글에서는 rollapply()를 활용해 이동평균과 이동합계를 계산하는 방법을 설명한다.
1. zoo 패키지 소개
zoo 패키지는 비정형 시계열 데이터를 다루는 데 유용한 기능을 제공한다. 특히, rollapply() 함수는 주어진 윈도우 크기(즉, 구간) 내에서 원하는 계산을 반복적으로 적용하는 함수로, 이동평균과 같은 계산에 매우 유용하다.
패키지 설치 및 불러오기
먼저, zoo 패키지를 설치하고 불러와야 한다.
# zoo 패키지 설치
install.packages("zoo")
# 패키지 로드
library(zoo)
2. rollapply() 함수 개요
rollapply() 함수는 주어진 데이터에 대해 윈도우 크기를 설정하고, 각 구간에 함수(예: 평균, 합계 등)를 적용한다. 기본 형식은 다음과 같다:
rollapply(data, width, FUN, by = 1, align = "center", fill = NA)
data: 분석할 데이터 (벡터나 시계열)width: 구간의 크기 (윈도우 크기)FUN: 적용할 함수 (예:mean,sum)by: 계산을 적용할 간격align: 계산 결과의 정렬 방식 ("left","right","center")fill: 결과를 채울 값 (계산할 수 없는 구간에NA또는 다른 값을 채울 수 있음)
3. 이동평균 계산하기
이동평균은 특정 구간의 데이터 평균을 구해 데이터의 변동성을 줄여주는 방법이다. 이를 통해 데이터의 전반적인 추세를 더 명확하게 파악할 수 있다.
예제 데이터 생성
# 예제 데이터 생성
set.seed(123)
data <- cumsum(rnorm(20)) # 랜덤하게 생성된 누적합 데이터
print(data)
이동평균 계산
윈도우 크기 3으로 이동평균을 계산하는 예시:
# 윈도우 크기 3으로 이동평균 계산
moving_avg <- rollapply(data, width = 3, FUN = mean, align = "center", fill = NA)
print(moving_avg)
위 코드에서는 구간 크기가 3인 이동평균을 계산한다. align = "center" 옵션을 통해 중앙에 값을 맞추었으며, 계산할 수 없는 첫 번째와 마지막 값을 NA로 채웠다.
결과 시각화
이동평균 결과를 원본 데이터와 함께 시각화하면 더 쉽게 이해할 수 있다.
# 이동평균 시각화
plot(data, type = "l", col = "blue", lty = 1, ylab = "Value", xlab = "Index", main = "Moving Average Example")
lines(moving_avg, col = "red", lty = 2)
legend("topright", legend = c("Original", "Moving Average"), col = c("blue", "red"), lty = 1:2)
4. 이동합계 계산하기
이동합계는 특정 구간의 데이터를 합산하는 방법이다. 구간 내의 값들이 어떻게 변화하는지를 더 잘 이해할 수 있도록 돕는다.
이동합계 계산
다음은 구간 크기 3으로 이동합계를 계산하는 예시다.
# 윈도우 크기 3으로 이동합계 계산
moving_sum <- rollapply(data, width = 3, FUN = sum, align = "right", fill = NA)
print(moving_sum)
이 코드에서는 FUN = sum을 사용해 구간 내의 합계를 계산한다. align = "right"로 설정해 각 결과를 구간의 마지막 값에 맞추었다.
이동합계 시각화
이동합계도 시각화하여 원본 데이터와 비교할 수 있다.
# 이동합계 시각화
plot(data, type = "l", col = "blue", lty = 1, ylab = "Value", xlab = "Index", main = "Moving Sum Example")
lines(moving_sum, col = "green", lty = 2)
legend("topright", legend = c("Original", "Moving Sum"), col = c("blue", "green"), lty = 1:2)
5. 다양한 함수 적용
rollapply()는 평균과 합계 외에도 사용자 정의 함수를 적용할 수 있어 다양한 분석에 활용될 수 있다. 예를 들어, 구간 내의 최대값 또는 최소값을 구할 수도 있다.
구간 내 최대값 계산
# 윈도우 크기 3으로 구간 내 최대값 계산
moving_max <- rollapply(data, width = 3, FUN = max, align = "center", fill = NA)
print(moving_max)
구간 내 최소값 계산
# 윈도우 크기 3으로 구간 내 최소값 계산
moving_min <- rollapply(data, width = 3, FUN = min, align = "center", fill = NA)
print(moving_min)
6. 결론
zoo::rollapply() 함수는 시계열 데이터 분석에서 이동평균, 이동합계와 같은 계산을 손쉽게 수행할 수 있는 강력한 도구다. 구간 크기와 정렬 옵션을 조정함으로써 다양한 방식으로 데이터를 분석할 수 있으며, 사용자 정의 함수를 적용해 복잡한 계산도 가능하다. 시계열 데이터의 변동성을 줄이거나 패턴을 찾는 데 유용하게 활용할 수 있다.
furosemide 20 mg tablet over the counter
furosemide 20 mg tablet over the counter
rifampin medication
rifampin medication
lasix diuretic medicine
lasix diuretic medicine
lasix medicine
lasix medicine
diflucan 150 mg tablet
diflucan 150 mg tablet
vibramycin for eye infection
vibramycin for eye infection
fluconazole tablet 200 mg
fluconazole tablet 200 mg
zenix
zenix
remeron generico
remeron generico
oral finasteride
oral finasteride
levitra
levitra
dapoxetine online pharmacy
dapoxetine online pharmacy