首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用循环生成动态数组结构,然后将其转换为静态数组。

使用循环生成动态数组结构,然后将其转换为静态数组。
EN

Stack Overflow用户
提问于 2013-01-24 09:22:58
回答 2查看 244关注 0票数 1

我想动态地参数化一个状态空间模型的数组,这取决于我选择了多少个状态。

我是用循环来做的-

代码语言:javascript
复制
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            

}

这个函数被多次调用,因为程序的重点是优化参数集。然而,这个函数设置大大地减缓了优化阶段,因为这个函数和其他一些函数不断地被调用,并且他们不断地重新定义数组。

如何定义一次所需的数组,动态,以及上述相关参数,然后能够使用一组新的参数调用矩阵函数以进行优化?

谢谢!

编辑-

statespace只是一个整数,它描述了在模型中使用的状态数,比如3/

代码语言:javascript
复制
statshockvar <- function(meanrev,longrun,sigma,sstate) {

longrun*sigma^2/(2*meanrev)*(1-exp(-longrun))^2+sigma^2/longrun*(exp(-longrun) - 
  exp(-2*longrun))*sstate

}

statshockvar -在这个特殊的例子中是术语结构的CIR模型的离散化方差。

编辑2-

params看起来是这样的--请注意,这些只是任意的数字。

代码语言:javascript
复制
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)

国家应该是这样的-

代码语言:javascript
复制
states = c(0.07,0.07,0.07)

同样,这些状态也是武断的。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-01-24 10:08:11

这里有一个解决方案:

代码语言:javascript
复制
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))
}

使用示例参数进行测试:

代码语言:javascript
复制
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
票数 0
EN

Stack Overflow用户

发布于 2013-01-24 14:04:31

看着for循环,

代码语言:javascript
复制
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])

如果statshockvar是矢量化的,您可以简单地编写

代码语言:javascript
复制
diag(qmat) <- statshockvar(params[((1:statespace)-1)*5+1], params[((1:statespace)-1)*5+2], params[((1:statespace)-1)*5+3], states[1:statespace])

如果不是,请参阅?Vectorize以使之成为

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14497791

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档