我尝试在对数正态样本上执行gmm。
这是一个正态分布的例子
n <- 1000
x <- rnorm(n, mean = 4, sd = 2)
g <- function(tet, x)
{
m1 <- (tet[1] - x)
m2 <- (tet[2]^2 - (x - tet[1])^2)
m3 <- x^3 - tet[1]*(tet[1]^2 + 3*tet[2]^2)
f <- cbind(m1, m2, m3)
return(f)
}
library(gmm)
gmm(g, x, c(0, 0))
我想用log-normal做同样的事情,这是我的代码:
x<-rlnorm(1000,3,5)
g <- function(tet, x)
{
m1 <- exp(tet[1]+1/2*(tet[2]^2)) -x
m2 <- exp(2*tet[1]+1/2*2^2*(tet[2]^2)) -x^2
# m2 <- (exp(tet[2]^2)-1)*(exp(tet[1]+1/2*(tet[2]^2)))^2 -x^2
m3 <- exp(3*tet[1]+1/2*3^2*(tet[2]^2)) -x^3
f <- cbind(m1, m2, m3)
return(f)
}
gmm(g, x, c(0, 0))
但错误信息是
Error in solve.default(w, gbar) :
system is computationally singular: reciprocal condition number = 1.968e-34
我使用这个公式:wikipedia link for log-normal moment
知道它为什么不起作用?
答案 0 :(得分:0)
问题来自于不可逆的矩的经验矩协方差矩阵。如果要计算最佳权重矩阵(w),则必须这样做。你可以尝试:
seed(123)
对于 m1 m2 m3
m1 1.236396e+13 8.183621e+20 6.004444e+28
m2 8.183621e+20 6.010799e+28 4.647952e+36
m3 6.004444e+28 4.647952e+36 3.702954e+44
,我在对数正态估计的矩的协方差矩阵中有很大的数字:
{{1}}
也许这就是为什么这个矩阵不可逆。You can read a more detailed explanation on Cross Validated。