Я пытаюсь обучить регрессионную модель, используя обобщенный метод моментов в 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]