簡體   English   中英

如何使用 R 中的 KFAS 包進行動態因子分析

[英]How to conduct Dynamic Factor Analysis using KFAS package in R

我正在嘗試使用 R 中的 KFAS 包將此模型擬合到多變量時間序列數據中:

y_t = Zx_t + a + v_t, v_t ~ MVN(0,R)

x_t = x_(t-1) + w_t, w_t ~ MVN(0,Q)

這是一個動態因素模型。 我還需要估計一些參數,即因子載荷矩陣 Z 和觀測擾動的方差-協方差矩陣 R。我很清楚這種類型的模型可以使用 MARSS 包運行,但我仍然需要使用更靈活的包運行它,因為我稍后會修改狀態方程(包括季節性分解)。

這是我使用的代碼(使用模擬數據而不是我打算運行的實際數據):

library(KFAS)
library(mAr)

set.seed(100)

w=c(0.25,0.1)
C=rbind(c(1,0.5),c(0.5,1.5))
A=rbind(c(0.1,0,0,0),c(0.3,0,0,0))
data=as.matrix(mAr.sim(w,A,C,N=300))

N.ts = dim(data)[2]
N.ls = 1

#ASSUMING 1 FACTOR
Z.vals = matrix(NA,N.ts,N.ls)
Zt = matrix(Z.vals, nrow=N.ts, ncol=N.ls, byrow=TRUE) #MATRIX OF LOADINGS, N X P
Ht <- diag(NA,N.ts) #VAR-COV MATRIX OF OBS ERROR, N x N
Tt <- diag(N.ls) #SLOPE OF LATENT STATE AT T-1, P X P
Rt <- diag(N.ls) #SLOPE OF THE LATENT STATE DISTURBANCES, P X P
Qt <- diag(N.ls) #VAR-COV MATRIX OF THE LATENT STATE DISTURBANCES, P X P

ss_model <- SSModel(data ~ 
                  -1 + SSMcustom(Z = Zt, T = Tt, R = Rt, Q = Qt),
                  H=Ht
                  )

objf <- function(pars, model, estimate = TRUE) {
   model$Z[1] <- pars[1]
   model$H[1] <- pars[2]
  if (estimate) {
    -logLik(model)
  } else {
    model
  }
}

opt <- optim(par = rep(1,50), fn = objf, method = "L-BFGS-B", 
             model = ss_model)

ss_model_opt <- objf(opt$par, ss_model, estimate = FALSE)

updatefn <- function(pars, model) {
  model$Z[1] <- pars[1]
  model$H[1] <- pars[2]
  model
}

fit <- fitSSM(ss_model, rep(1,50), updatefn, method = "L-BFGS-B")

如果我查看模型規范,對我來說似乎是正確的:

Call:
SSModel(formula = data ~ -1 + SSMcustom(Z = Zt, T = Tt, R = Rt, 
    Q = Qt), H = Ht)

State space model object of class SSModel

Dimensions:
[1] Number of time points: 300
[1] Number of time series: 2
[1] Number of disturbances: 1
[1] Number of states: 1
Names of the states:
[1]  custom1
Distributions of the time series:
[1]  gaussian

Object is a valid object of class SSModel.

但是它返回此錯誤消息: is.SSModel(do.call(updatefn, args = c(list(inits, model), update_args)) 中的錯誤:系統矩陣(不包括 Z)包含 NA 或無限值,協方差矩陣包含大於 1e+07 的值

希望有人可以指導我這樣做。 非常感謝!

你可以在谷歌上查找方差協方差矩陣。 季節性成分; 在找到分數矩陣 a=A-11A(1/n) 的向量/偏差后應用 a'a。 1 表示 N 1 個的分數 p=1,n=行數; 2行數據給出方差。 紅色表示作為矩陣對角線的方差。 Na 是方差的值。 我們不知道矩陣中的缺失元素,所以我們假設 T-1=N p 個,其中 p=1,對於矩陣的向量分數,我們用 T-1=N*p 個填充潛在的,其中p=1。 輸入錯誤信息,ssmodel

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM