R 使用中的循环生成动态数组结构,然后将其转换为静态数组
我想根据我选择的状态数量动态参数化状态空间模型的数组 我用一个循环来做这个-R 使用中的循环生成动态数组结构,然后将其转换为静态数组,r,R,我想根据我选择的状态数量动态参数化状态空间模型的数组 我用一个循环来做这个- Q <- function(params,states) { qmat <- matrix(0,statespace,statespace) for (i in 1:statespace) qmat[i,i] <- statshockvar(params[(i-1)*5+1], params[(i-1)*5+2], params[(i-1)
Q <- function(params,states) {
qmat <- matrix(0,statespace,statespace)
for (i in 1:statespace)
qmat[i,i] <- statshockvar(params[(i-1)*5+1], params[(i-1)*5+2],
params[(i-1)*5+3],states[i])
qmat
}
statshockvar
-在这个特定示例中,是期限结构的CIR模型的离散化方差
编辑2-
参数看起来像这样-请注意,这些只是任意数
params = c(
0.3275,
0.07,
0.197,
0,
0.05,
0.01,
0.2,
0.3,
0,
0.05,
0.01,
0.1,
0.3,
0,
0.05)
州会是这样的-
states = c(0.07,0.07,0.07)
同样,这些国家是武断的 这里有一个解决方案:
Q <- function(params, states) {
diag(mapply(function(y, z) statshockvar(y[1], y[2], y[3], z),
lapply(seq(statespace), function(x) params[(x-1)*5 + 1:3]),
states))
}
看看for循环
for (i in 1:statespace)
qmat[i,i] <- statshockvar(params[(i-1)*5+1], params[(i-1)*5+2],
params[(i-1)*5+3],states[i])
如果不是,请参见?矢量化,使其成为Sven,如果状态由上面提到的statespace变量确定,这是否有效?也就是说,这决定了状态向量的长度…@user2006864变量
statespace
是解决方案的一部分:lapply(seq(statespace)…
。但是,我仍在想-如何阻止r在每次调用函数q时重新分配矩阵结构?@user2006864该函数旨在创建矩阵。您希望函数做什么?@user2006864我不知道您的优化过程。您原来的函数创建矩阵,但不更改val在现有矩阵中使用。如果要进一步改进算法,则应就此主题提出另一个问题。此函数将被多次调用,例如1500*优化次数。这是为每次调用不断重新分配矩阵结构的主要瓶颈。因此,我希望此函数运行一次,然后仅更新参数值,它将在预定义的矩阵结构中产生一组新的值…`让函数从全局环境中获取数据(statespace
)不是一个好主意。应该将其作为参数传递。
Q(params, states)
[,1] [,2] [,3]
[1,] 0.002465305 0.00000000 0.000000000
[2,] 0.000000000 0.03424762 0.000000000
[3,] 0.000000000 0.00000000 0.009499883
for (i in 1:statespace)
qmat[i,i] <- statshockvar(params[(i-1)*5+1], params[(i-1)*5+2],
params[(i-1)*5+3],states[i])
diag(qmat) <- statshockvar(params[((1:statespace)-1)*5+1], params[((1:statespace)-1)*5+2], params[((1:statespace)-1)*5+3], states[1:statespace])