1
ここでは一般的にプログラミングに興味がありました。 拡張カルマンフィルタをバックトラックするためのコードは、特定のパラメータのためのMSEを提供しています。問題は、コードを実行すると、最後に、マトリックスはすべての代わりに最後の値セットしか格納しないということです。 PC上でコードを実行する必要がある場合は、ファイル名を手元のデータセットに置き換えてください。それでも動作するはずです。ネストされたforループの行列に値を格納するR
start.time <- Sys.time()
library(invgamma)
w = read.csv("Reddy.csv")
q = ts(w[2])
num = length(q)
f = function(x){
f1 = sqrt(x)
return(f1)
}
h = function(x){
h1 = x**3
return(h1)
}
ae1 = seq(24,26)
ae2 = seq(24,26)
be1 = seq(1,3)
be2 = seq(1,3)
a = seq(1,3)
b = seq(1,3)
MSE = matrix(nrow = length(ae1)*length(ae2)*length(be1)*length(be2)*length(a)*length(b), ncol =7)
for (i in ae1){
for (j in ae2){
for (k in be1){
for (l in be2){
for (m in a){
for (n in b){
d = rep(0,num)
for(o in 2:num){
xt = rep(0,num)
yt = rep(0,num)
fx = rep(0,num)
hx = rep(0,num)
e = rinvgamma(num,i,k)
g = rinvgamma(num,j,l)
fx[o] = f(xt[o-1])
xt[o] = m*fx[o] + e[o-1]
hx[o] = h(xt[o])
yt[o]= n*hx[o] +g[o]
d[o] = (yt[o] - q[o])**2
}
MSE[,1] = mean(d)
MSE[,2] = i
MSE[,3] = j
MSE[,4] = k
MSE[,5] = l
MSE[,6] = m
MSE[,7] = n
t = rbind(mean(d),i,j,k,l,m,n)
print(t)
}
}
}
}
}
}
end.time <- Sys.time()
time.taken <- end.time - start.time
time.taken
m = which.min(MSE[1])
理想的には、私のマトリックスはMSEのように最初の行を有することになる、7列に2は、それぞれ、対応するI、J、K、L、M、Nの値を持つことになり、各反復は、にログインなるだろう新しい行エントリ。ここでは、毎回行列全体を書き換えるようです。