R &引用;系统在计算上是奇异的;使用“gmm”(gmm估计)时出错

R &引用;系统在计算上是奇异的;使用“gmm”(gmm估计)时出错,r,R,尝试使用R中的GMM包来估计线性模型的参数(a-f): LEV1 = a*Macro + b*Firm + c*Sector + d*qtr + e*fqtr + f*tax 宏、公司和部门是n行数的矩阵。qtr、fqtr和tax是具有n个成员的向量 我有一个名为unsectrd的大型数据帧,它包含所有数据。首先,我将数据分解为单独的矩阵: v_LEV1 <- as.matrix(unconstrd$LEV1) Macro <- as.matrix(cbind(unconstrd$

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

LEV1 = a*Macro + b*Firm + c*Sector + d*qtr + e*fqtr + f*tax
宏、公司和部门是n行数的矩阵。qtr、fqtr和tax是具有n个成员的向量

我有一个名为unsectrd的大型数据帧,它包含所有数据。首先,我将数据分解为单独的矩阵:

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:

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

我提前道歉,并承认我是R的新手,以前从未使用过GMM。GMM函数非常通用,我已经查看了web上可用的示例,但似乎没有任何特定的内容可以帮助我解决这个问题。

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


这与其说是StackOverflow的编程问题,不如说是一个建模问题。

我非常确定变量之间没有线性依赖关系,但我通过一次添加一个变量的练习来了解是什么导致了错误。最后,我请一位同事在SAS上运行GMM,它运行得很好,没有错误消息。我不确定R版本的问题是什么,但在这一点上,我有一个解决方案,并给出了关于R上GMM的u


感谢所有试图帮助的人。

该公司是一个108951x6矩阵,有6个不同的财务比率。宏观是108951x3矩阵,包含3个不同的宏观经济变量;部门是108951x11矩阵,包含11个不同的部门模型;v_qtr和v_fqtr是108951x1矩阵,其中1-4个整数表示季度。v_tax是一个108951x1矩阵,它是1还是0取决于数据是1986年税号变更之前还是之后。v_LEV1是一个108951x1矩阵,具有稳固的杠杆作用。似乎有足够的数据。我能够使用lm多元线性回归函数得到一个解决方案。我不知道交叉验证是什么。让我说清楚:在所有的回归中,一个或多个是其他列的线性组合,这意味着低于满秩。这正是错误消息告诉你的。也许这是因为GMM中的力矩条件。同样,没有您的数据,我们无法判断。但是错误告诉你你不能适应你想要适应的。换一种方式来说@DirkEddelbuettel的观点:当你通过
lm()
来估计这一点时,是否有变量从回归中被删除?如果是这样,那么这些变量就是模型中其他变量的线性组合
lm()
对此类变量没有问题,因为它包含自动检测此类情况的代码。但是,一旦你手动完成所有这些,你也必须自己完成。想想看,季度和财政季度变量可能是彼此的线性组合。
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