【问题标题】:"system is computationally singular" error when using `gmm` (GMM Estimation)使用“gmm”(GMM 估计)时出现“系统在计算上是奇异的”错误
【发布时间】:2013-01-04 20:32:43
【问题描述】:

尝试使用 R 中的 GMM 包来估计线性模型的参数 (a-f):

LEV1 = a*Macro + b*Firm + c*Sector + d*qtr + e*fqtr + f*tax

Macro、Firm 和 Sector 是具有 n 行的矩阵。 qtr、fqtr 和 tax 是具有 n 个成员的向量。

我有一个名为 unconstrd 的大型数据框,其中包含所有数据。首先,我将这些数据分解为单独的矩阵:

v_LEV1 <- as.matrix(unconstrd$LEV1)
Macro <- as.matrix(cbind(unconstrd$Agg_Corp_Prof,unconstrd$R1000_TR, unconstrd$CP_Spread))
Firm <- as.matrix(cbind(unconstrd$ppe_ratio, unconstrd$op_inc_ratio_avg, unconstrd$selling_exp_avg,
                  unconstrd$tax_avg, unconstrd$Mark_to_Bk, unconstrd$mc_ratio))
Sector <- as.matrix(cbind(unconstrd$Sect_Flag03,
                  unconstrd$Sect_Flag04, unconstrd$Sect_Flag05, unconstrd$Sect_Flag06,
                  unconstrd$Sect_Flag07, unconstrd$Sect_Flag08, unconstrd$Sect_Flag12,
                  unconstrd$Sect_Flag13, unconstrd$Sect_Flag14, unconstrd$Sect_Flag15,
                  unconstrd$Sect_Flag17))
v_qtr <- as.matrix(unconstrd$qtr)
v_fqtr <- as.matrix(unconstrd$fqtr)
v_tax <- as.matrix(unconstrd$tax_dummy)

然后,我将 gmm 调用的 x 变量的数据绑定在一起:

h=cbind(Macro,Firm,Sector,v_qtr, v_fqtr, v_tax)

然后,我调用 gmm:

gmm1 <- gmm(v_LEV1 ~ Macro + Firm + Sector + v_qtr + v_fqtr + v_tax, x=h)

我收到消息:

Error in solve.default(crossprod(hm, xm), crossprod(hm, ym)) : 
  system is computationally singular: reciprocal condition number = 1.10214e-18

我提前道歉并承认我是 R 的新手,我以前从未使用过 GMM。 GMM 函数非常通用,我查看了网络上可用的示例,但似乎没有什么具体足以帮助我的情况。

【问题讨论】:

    标签: r


    【解决方案1】:

    您正在尝试拟合没有满秩的矩阵——尝试排除一些变量和/或查找错误。如果没有您的数据,或者至少是样本,我们无法说更多。

    对于 Crossvalidated.com,这更像是一个建模问题,而不是 StackOverflow 的编程问题。

    【讨论】:

    • 公司是一个 108,951x6 矩阵,有 6 种不同的财务比率。 Macro 是 108,951x3 矩阵,具有 3 个不同的宏观经济变量,Sector 是 108,951x11 矩阵,具有 11 个不同的部门虚拟变量,v_qtr 和 v_fqtr 是 108,951x1 矩阵,其中 1-4 个整数表示季度。 v_tax 是一个 108,951x1 矩阵,它是 1 还是 0,具体取决于数据是在 1986 年税法更改之前还是之后。 v_LEV1 是一个 108,951x1 的矩阵,具有牢固的杠杆作用。似乎有足够的数据。我能够使用 lm 多元线性回归函数获得解决方案。我不知道 Crossvalidated 是什么..
    • 让我非常清楚:在所有回归变量中,一个或多个是其他列的线性组合,这意味着小于满秩。
    • 这正是错误消息告诉您的内容。也许这是因为 GMM 中的瞬间条件。同样,没有您的数据,我们无法判断。但是错误告诉你,你不能适应你想要适应的东西。
    • 用另一种方式表达@DirkEddelbuettel 的观点:当您通过lm() 进行估计时,是否存在从回归中删除的变量?如果是这样,那么这些变量正是模型中其他变量的线性组合。 lm() 对此类变量没有任何问题,因为它包含自动检测此类情况的代码。但是,一旦您手动完成所有这些操作,您也必须自己完成。
    • 想一想,季度变量和财政季度变量可以是彼此的线性组合。
    【解决方案2】:

    我很确定我的变量之间没有线性依赖关系,但我通过一次添加一个变量的练习来查看导致错误的原因。最后,我请一位同事在 SAS 上运行 GMM,它运行完美,没有错误消息。我不确定 R 版本的问题是什么,但此时我有一个解决方案,并在 R 上的 GMM 上给你。

    感谢所有尝试提供帮助的人。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-06-20
      • 2015-02-13
      • 1970-01-01
      • 2016-08-25
      • 2020-08-24
      • 1970-01-01
      相关资源
      最近更新 更多