我想使用看似不相关的回归在横截面上重复估计单个方程,但总是收到错误“LU.dgC(a) 中的错误:cs_lu(A) 失败:接近奇异 A(或内存不足) ”。
原因是我的数据/设置,其中每个方程估计两个横截面之间的差异(参见下面的示例)。
一个可重复的例子来说明这一点:标准 SUR 工作 (1),然后我模拟我的设置,这归结为 diff-in-diff 方法 (2),估计方程单独工作 (3),但联合使用SUR (4) 给了我错误。
关于如何解决它的任何想法?或者通过其他易于实现的方法来同时估计这一点?
1. SUR - 标准设置 ==> 无错误
library ("systemfit")
library( "plm" )
library("broom")
library("data.table")
data( "GrunfeldGreene" )
GGPanel <- pdata.frame( GrunfeldGreene, c( "firm", "year" ) )
formulaGrunfeld <- invest ~ value + capital
greeneSur <- systemfit( formulaGrunfeld, "SUR",data = GGPanel,methodResidCov = "noDfCor" )
summary(greeneSur)
2. 数据集适应我的设置
data( "GrunfeldGreene" )
setDT(GrunfeldGreene)
GrunfeldGreene[, dummy_time := ifelse(year>1945, 1, 0),]
GrunfeldGreene[, dummy_group := ifelse(firm=="General Motors"|firm=="Chrysler", 1, 0),]
GrunfeldGreene <- subset(GrunfeldGreene, firm!="US Steel")
GrunfeldGreene[, id := ifelse(firm=="General Motors" | firm=="General Electric", 1, 0),]
GrunfeldGreene[, id := ifelse(firm=="Chrysler" | firm=="Westinghouse", 2, id),]
GGPanel <- pdata.frame( GrunfeldGreene, c( "id", "year" ) )
3. 在我的设置上分开方程 ==> 没有错误
GGPanel_id1 <- subset(GGPanel, id==1)
reg <- lm(invest ~ value + capital + dummy_time + dummy_group + dummy_time*dummy_group, data=GGPanel_id1)
summary(reg)
GGPanel_id2 <- subset(GGPanel, id==2)
reg <- lm(invest ~ value + capital + dummy_time + dummy_group + dummy_time*dummy_group, data=GGPanel_id2)
summary(reg)
4. 我的设置上的 SUR ==> 错误
GGPanel <- pdata.frame( GrunfeldGreene, c( "id", "year" ) )
formulaGrunfeld <- invest ~ value + capital + dummy_time + dummy_group + dummy_time*dummy_group
greeneSur2 <- systemfit( formulaGrunfeld, "SUR",data = GGPanel, methodResidCov = "noDfCor" )
summary( greeneSur2 )