【问题标题】:R Generalized Method Of Moments Regression Estimation With InstrumentsR广义矩回归估计方法与仪器
【发布时间】:2019-05-05 03:03:53
【问题描述】:

我正在尝试使用 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]中是连续的

【问题讨论】:

    标签: r matrix regression singular generalized-method-of-moments


    【解决方案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))
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-03-13
      • 1970-01-01
      • 1970-01-01
      • 2020-06-20
      • 1970-01-01
      • 2020-09-20
      • 2019-08-10
      • 1970-01-01
      相关资源
      最近更新 更多