我想動態參數化狀態空間模型的數組,取決於我選擇的狀態數。使用循環創建動態數組結構,然後將其轉換爲靜態數組
我有一個循環這樣做 -
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/
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看起來是這樣的 - 請注意,這些只是AR bitrary數
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)
又把這些狀態是任意的。
該函數將被調用多次說,1500 *的優化拍攝次數。這是每次調用重新分配矩陣結構的主要瓶頸。所以我想這個運行一次,然後只更新參數值,這將導致預定義的矩陣結構中有一組新值...' – RonRich
讓函數抓取數據('statespace')不是個好主意,來自全球的環境。你應該把它作爲一個參數來傳遞。 –