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)) 

 

f:id:nakhirot:20130614143304p:plain