R Обобщенный метод оценки регрессии моментов с инструментами

Я пытаюсь обучить модель регрессии, используя обобщенный метод моментов в R. У меня есть 3 эндогенных регрессора, которые коррелируют с 6 вещами, которые, как я знаю, являются экзогенными.

  • Моя переменная результата y
  • У меня есть 3 эндогенных регрессора: z1, z2, z1*z2
  • У меня есть 6 экзогенных инструментов: x1, x2, x3, x4, x5, x6

Чтобы провести обучение, я установил свои данные в data.matrix dat. Первый столбец — y, второй столбец — все единицы, столбцы с третьего по восьмой — инструменты x1-x6. Столбцы с 9-го по 11-й — это регрессоры (z1, z2 и z1*z2).

Затем я устанавливаю свои условия момента следующим образом:

moments <- function(theta, data) {
    y <- as.numeric(data[, 1])
    x <- data.matrix(data[, c(2,3:8)])
    z <- data.matrix(data[, c(2,9,10,11)])
    m <- x * as.vector((y - z %*% theta))
    return(cbind(m))
}

а затем я пытаюсь обучить свою модель:

gmm_model <- gmm(
  g = moments,
  x = dat,
  t0 = (lm(y ~ z1 + z2 + z1:z2,
           data=dat))$coefficients
)

Когда я запускаю это, я получаю сообщение об ошибке: model order: 1 singularities in the computation of the projection matrix results are only valid up to model order 0Error in AA %*% t(X) : requires numeric/complex matrix/vector arguments

Ошибка указывает на то, что ранг x недостаточно велик для оценки коэффициентов переменных, соответствующих z.

Но когда я проверяю, Matrix::rankMatrix(dat[,3:8]) говорит мне, что мой x имеет ранг 5, а Matrix::rankMatrix(dat[2,9,10,11]) говорит мне, что мой z имеет ранг 4. Кроме того, rankMatrix(t(x) %*% z ) дает 4. Эти значения кажутся мне подходящими для GMM. Что я делаю неправильно?

Я также пытался использовать pgmm из plm, но мои данные на самом деле являются просто поперечным сечением (а не набором панельных данных), и я получал ошибки из-за наличия нескольких наблюдений на человека, когда пытался его использовать.

dat выглядит так:

     y i x1 x2  x3   x4     x5      x6 z1        z2 z1*z2
[1,] 0 1 31  0 123 0.12 123456 1234567  0 0.2954545     0
[2,] 0 1 44  0 123 0.12 123456 1234567  0 0.1555556     0
[3,] 0 1 31  0 123 0.12 123456 1234567  0 0.2325581     0
[4,] 0 1 47  0 123 0.12 123456 1234567  0 0.2537313     0
[5,] 0 1 33  0 123 0.12 123456 1234567  0 0.1500000     0
[6,] 0 1 49  0 123 0.12 123456 1234567  0 0.2553191     0

x1 — целое число в диапазоне [30-100] x2 — двоичное число 0,1 x3 принимает два значения x4 принимает два значения x5 принимает два значения x6 принимает два значения

z1 бинарный 0,1 z2 непрерывен в [0,1]


person DVL    schedule 03.12.2018    source источник


Ответы (1)


Попробовав несколько разных вещей, сработало отбрасывание x переменных до тех пор, пока число x переменных не стало рангом матрицы, включая все их в виде столбцов: похоже, что gmm не нравится наличие какой-либо сингулярности в матрица экзогенных инструментов, используемых в текущих условиях. В явном виде, когда я перешел к этому набору моментных условий, сработал тот же вызов gmm:

moments <- function(theta, data) {
    y <- as.numeric(data[, 1])
    x <- data.matrix(data[, c(2,3,4,5,6)]) # this is rank 5 still
    z <- data.matrix(data[, c(2,9,10,11)]) # rank 4
    m <- x * as.vector((y - z %*% theta))
    return(cbind(m))
}
person DVL    schedule 03.12.2018