2015-06-22 3 views
3

Я пытаюсь выполнить 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)) 

Я хотел бы сделать то же самое с логарифмически нормальным, что мой код:

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

Проблемы возникают из матрицы ковариаций эмпирического момента моментов, которые не обратимы. Это необходимо, если вы хотите вычислить оптимальную весовую матрицу (w). Вы можете попробовать:

gt <- g(c(0,0),x) 
solve(var(gt)) 

С 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 

Может быть, именно поэтому эта матрица не является обратимой. You can read a more detailed explanation on Cross Validated.

Смежные вопросы