R Обобщенный метод оценки регрессии моментов с помощью инструментов - PullRequest
0 голосов
/ 03 декабря 2018

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

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

Для проведения обучения я настроил свои данные в data.matrix dat.Первый столбец - у, второй столбец - все 1 с, с третьего по восьмой столбцы - инструменты х1-х6.С 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

Ошибка указывает, что ранг х недостаточно велик, чтобы оценить коэффициенты по переменным, соответствующим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]

1 Ответ

0 голосов
/ 04 декабря 2018

После нескольких разных попыток, работало то, что х переменных отбрасывалось до тех пор, пока число х переменных не стало рангом матрицы, включая все из них в виде столбцов: кажется, gmm не нравится, когда any особенность в матрице экзогенных инструментов, используемых в моментных условиях.Явно, когда я изменил этот набор условий момента, сработал тот же самый вызов 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))
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...