R Time Series Analysis 時系列解析(1) (filterによる移動平均法)
##inputデータは経済産業省より取得
data <- read.csv("http://www.meti.go.jp/statistics/tyo/iip/result/h2afdldj/csv/ha2nsgo3j.csv",header=TRUE)
#データの整形
delete <- c(1,3)
data <- data[-delete,]
colnames(data) <- data[1,]
new_name <- NULL
for (i in 1:ncol(data)) {
new_name <- c(new_name,as.character(data[1,i]))
}
names(data) <- new_name
data <- data[-1,]
names(data)[1] <- "年月"
head(data)
#時系列データに変換
data <- data[1:359,]
IIP <- ts(data, start=c(1978,1),frequency=12)
ts.plot(IIP[,2],col=c(1:3))
#filter関数により移動平均を計算
w3 <- rep(1,3)/3; w7 <- rep(1,7)/7; w13 <- rep(1,13)/13
w25 <- rep(1,25)/25; w49 <- rep(1,49)/49
w98 <- rep(1,98)/98
IIP3 <- filter(IIP,filter=w3,method="convolution",sides=2)
IIP7 <- filter(IIP,filter=w7,method="convolution",sides=2)
IIP13 <- filter(IIP,filter=w13,method="convolution",sides=2)
IIP25 <- filter(IIP,filter=w25,method="convolution",sides=2)
IIP49 <- filter(IIP,filter=w49,method="convolution",sides=2)
IIP98 <- filter(IIP,filter=w98,method="convolution",sides=2)
#filterは移動平均の各項の重みを与える引数
#methodは"convolution"とすれば移動平均、"recursive"とすれば指数平滑化
#filter=w3の場合、side=2だと(yt-1+yt+y+1)/3、side=1だと(yt+yt-1+yt-2)/3となる
par(mfrow=c(3,2))
ts.plot(IIP[,5],type="l",main="原系列")
ts.plot(IIP3[,5],type="l",main="3期移動平均")
ts.plot(IIP13[,5],type="l",main="13期移動平均")
ts.plot(IIP25[,5],type="l",main="25期移動平均")
ts.plot(IIP49[,5],type="l",main="49期移動平均")
ts.plot(IIP98[,5],type="l",main="98期移動平均")
par(mfrow=c(1,1))