R 使用gmm软件包的矩阵乘法错误

R 使用gmm软件包的矩阵乘法错误,r,generalized-method-of-moments,R,Generalized Method Of Moments,我试图遵循的是关于使用gmmR软件包的第3.2节中给出的示例。所以我想估计一个稳定分布的参数。我正在使用以下代码 library(gmm) library(stabledist) library(StableEstim) g1 <- function(theta, x){ tau <- seq(1, 5, length.out = 10) pm <- 1 x <- matrix(c(x), ncol = 1) x_comp <- x%*%matri

我试图遵循的是关于使用
gmm
R
软件包的第3.2节中给出的示例。所以我想估计一个稳定分布的参数。我正在使用以下代码

library(gmm)
library(stabledist)
library(StableEstim)

g1 <- function(theta, x){
  tau <- seq(1, 5, length.out = 10)
  pm <- 1
  x <- matrix(c(x), ncol = 1)
  x_comp <- x%*%matrix(tau, nrow = 1)
  x_comp <- matrix(complex(imaginary = x_comp), ncol = length(tau))
  emp_car <- exp(x_comp)
  the_car <- charStable(theta, tau, pm)
  gt <- t(t(emp_car) - the_car)
  gt <- cbind(Im(gt), Re(gt))
  return(gt)
}

x1 <- returns$log.return[2:6966]
t0 <- McCullochParametersEstim(x1)
res1 <- gmm(g1, x1, t0, optfct = "nlminb", 
            lower = c(0, -1, 0, -Inf), 
            upper = c(2, 1, Inf, Inf))

summary(res1)

我的数据可以找到。在数据集中,我有价格、对数价格、对数回报和非对数回报。当我对
price
return
列中的数据运行代码时,例如
x1错误不是来自gmm()本身,而是来自ar.ols(),它用于在计算HAC协方差矩阵之前预白矩矩阵。如果我们将prewhite选项设置为0,错误就会消失(有关更多信息,请参阅三明治包中的vcovHAC)。例如,以下情况不会产生错误:

res1 <- gmm(g1, x1, t0, optfct = "nlminb",
            lower = c(0, -1, 0, -Inf),
            upper = c(2, 1, Inf, Inf), prewhite=0)

res1错误不是来自gmm()本身,而是来自ar.ols(),它用于在计算HAC协方差矩阵之前对矩矩阵进行预白处理。如果我们将prewhite选项设置为0,错误就会消失(有关更多信息,请参阅三明治包中的vcovHAC)。例如,以下情况不会产生错误:

res1 <- gmm(g1, x1, t0, optfct = "nlminb",
            lower = c(0, -1, 0, -Inf),
            upper = c(2, 1, Inf, Inf), prewhite=0)
res1
gt0 <- g1(t0, x1)
gt0 <- scale(gt0, scale=FALSE)
class(gt0) <- "gmmFct"
V0 <- vcovHAC(gt0, sandwich=FALSE)
W0 <- solve(V0)
res1 <- gmm(g1, x1, t0, vcov="TrueFixed", weightsMatrix=W0)
q <- qr(gt0/sqrt(nrow(gt0)))
W1 <- matrix(NA, ncol(gt0),ncol(gt0))
W1[q$pivot, q$pivot] <- chol2inv(q$qr)
res2 <- gmm(g1, x1, t0, vcov="TrueFixed", weightsMatrix=W1)