//このページが表示される方は、URLから「action=SOURCE&」を削除してみてください [[状態空間モデリング - 記事一覧]] !!!「co2」データを使った状態空間表現の例 - 季節成分を抽出する *投稿者: みゅ *カテゴリ: なし *優先度: 普通 *状態: 完了 *日時: 2008年06月12日 16時59分04秒 !!内容 「co2」データを使用し、季節成分を抽出する !概要 *季節成分は12ヶ月で1周期になっている.季節成分をStとすると St+1 + St + St-1 + St-2 + St-2 + ... + St-10 = ε3 *である(つまり12ヶ月の合計が平均0).なので 観測方程式 : yt+1 = at+1 + St+1 + ε1 状態方程式 : at+1 = at + ε2 St+1 = -(St + St-1 + St-2 + ... + St-10) + ε3 St = St St-1 = St-1 ... !コード(フィルタリングまで) library(sspir) Fmat <- matrix(c(1.0, 1.0, rep(0, 10))) Vmat <- matrix(0.0, 1, 1) v <- c(1.00) diag(Vmat) <- v Gmat <- matrix(0.0, 12, 12) Gmat[1,1] <- 1.0 Gmat[2,2:12] <- -1.0 Gmat[3:12,2:11] <- diag(1,10) w <- c(u=0.5^2, s=1.0^2) Wmat <- diag(0,12) diag(Wmat)[1] <- w[1] diag(Wmat)[2] <- w[2] m0 <- matrix(double(1), 1, 12) m0[1,1] <- as.numeric(co2)[1] ssm_co2 <- SS(y=matrix(as.numeric(co2)), Fmat=function(tt,x,phi) return(Fmat), Vmat= function(tt,x,phi) { Vmat0 <- Vmat diag(Vmat0) <- phi$v return(Vmat0) }, Gmat= function(tt,x,phi){ Gmat0 <- Gmat Gmat0 }, Wmat= function(tt,x,phi){ Wmat0 <- Wmat diag(Wmat0)[1] <- phi$w[1] diag(Wmat0)[2] <- phi$w[2] Wmat0 }, phi=list(v=v, w=w), m0=m0, C0=diag(1,12) ) ssm_co2_f <- kfilter(ssm_co2) par(mfrow=c(2,1)) plot(ssm_co2_f$y, ty="l") lines(ssm_co2_f$m[,1], ty="l", col="red") plot(ssm_co2_f$m[,2], ty="l") par(mfrow=c(1,1)) *トレンド成分 {{ref_image co2_3_1.png}} *季節成分 {{ref_image co2_3_2.png}} *系列の最初のほうで、季節成分がうまく分離されていない.これは状態変数の時点0での期待値【m0】と分散【c0】が適切に設定されていないため.これらを適切に設定する方法、あるいはフィルタリングを開始することをフィルタリングの初期化という. *初期化についてはまたの機会に・・・ !平滑化 *状態方程式の分散行列の下の10行が0になっているが、このままでは平滑化でエラーが出る. *小さな正の数を与えることで、平滑化ができるようになる !!コメント //{{comment}}