R广义矩回归估计法与仪器
R Generalized Method Of Moments Regression Estimation With Instruments
我正在尝试使用 R 中的广义矩法训练回归模型。我有 3 个内生回归变量,它们与我知道的 6 个外生事物相关。
- 我的结果变量是 y
- 我有 3 个内生回归变量:z1、z2、z1*z2
- 我有 6 个外生工具:x1、x2、x3、x4、x5、x6
为了进行训练,我在 data.matrix dat
中设置了数据。第一列为y,第二列全为1,第三至第八列为仪器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 对我来说很好。 我做错了什么?
我也尝试使用 plm
中的 pgmm
,但我的数据实际上只是一个横截面(不是面板数据集),当我对每个人进行多次观察时,我遇到了错误尝试使用它。
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]
中连续
在尝试了很多不同的事情之后,有效的方法是删除 x 个变量,直到 x 个变量的数量是矩阵的等级,包括所有它们作为列:看起来 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))
}
我正在尝试使用 R 中的广义矩法训练回归模型。我有 3 个内生回归变量,它们与我知道的 6 个外生事物相关。
- 我的结果变量是 y
- 我有 3 个内生回归变量:z1、z2、z1*z2
- 我有 6 个外生工具:x1、x2、x3、x4、x5、x6
为了进行训练,我在 data.matrix dat
中设置了数据。第一列为y,第二列全为1,第三至第八列为仪器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 对我来说很好。 我做错了什么?
我也尝试使用 plm
中的 pgmm
,但我的数据实际上只是一个横截面(不是面板数据集),当我对每个人进行多次观察时,我遇到了错误尝试使用它。
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]
中连续在尝试了很多不同的事情之后,有效的方法是删除 x 个变量,直到 x 个变量的数量是矩阵的等级,包括所有它们作为列:看起来 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))
}