1

我正在使用 plm 包,我遇到了随机和模型内的问题,它们给出了“空模型”的错误。但是,模型不是空的。在 plm.fit 的源代码中,错误的来源是这样的(从我的头顶写...)

X <- model.matrix(formula,data, lhs=1,...)
if (ncol(X) == 0) stop("empty model")

但是,如果我尝试使用输入到原始函数中的命令来复制此行为,它会给出 ncol(X) is 17 或类似的值。

我的代码是(数据已删除...):

library(sampleSelection)
library(foreign)
library(censReg)
library(plm)
library(micEcon)
library(ggplot2)

data <- read.dta('kpfull1.dta')
summary(data)
attach(data)

data$profit_share <- p91/tnsvp
data$debt_assets <- d91/naba
data$naba3 <- naba^3
data$difprofit <- p91-p90
data$agri <- (mind==1)*1
data$hi <- (mind==2)*1
data$li <- (mind==3)*1
data$constr <- (mind==4)*1
data$trans <- (mind==5)*1
data$trade <- (mind==6)*1
data$rd <- (mind==7)*1
data$ser <- (mind==8)*1
data$fin <- (mind==9)*1
data$for1 <- data[,7]
detach(data)
data1 <- data
panel <- pdata.frame(data, c("num","rnd"))

testovaci <- plm(tb ~ profit_share  + debt_assets + naba + naba3 + for1 + dom + difprofit + agri + hi + li + constr + trans + trade + rd + ser + fin, data = panel, model = "within")
summary(testovaci)

model.matrix(tb ~ profit_share  + debt_assets + naba + naba3 + for1 + dom + difprofit + agri + hi + li + constr + trans + trade + rd + ser + fin, data)

model.matrix(tb ~ profit_share  + debt_assets + naba + naba3 + for1 + dom + difprofit + agri + hi + li + constr + trans + trade + rd + ser + fin, panel)

谢谢,Tomáš Křehlík。

4

1 回答 1

4

Giovanni Millo 在 R-help 中回答:

亲爱的托马斯,亲爱的名单,

跟进,同时我通过私人通信获得数据。正如我所怀疑的那样,问题隐藏在数据中缺乏时间可变性。事实上,OLS 工作正常:

%fm是公式,data是数据集,panel是数据集转换为pdata.frame

summary(lm(fm, data))

%(输出ok,省略)

就像 plm "pooling" 一样

summary(plm(fm, panel, model="pooling"))

单向(个体)效应池化模型

%(输出ok,省略)

但 FE 失败了:

summary(plm(fm, panel, model="within"))

Errore in plm.fit(formula, data, model, effect, random.method, inst.method) : empty model

和各种 RE 方法一样

summary(plm(fm, panel, model="random"))

Errore in plm.fit(formula, data, model = "within", effect = effect) : empty model

...如果您查看错误消息,很明显是内部/FE 部分有问题(RE 方法基于 FE 来估计错误分量)。实际上,尝试对任何右侧变量进行面板差分会导致全为零(NaN 用于方差份额,即 0/0),例如第一个:

summary(diff(panel$profit_share))

total sum of squares : 0 id time NaN NaN

但这对每个人来说都是一样的。因此,正如原始错误消息所说,(转换后的)模型实际上是空的。现在我没有时间深入研究数据,但 rhs 变量对我来说都是时间常数......

因此,名单上的小组成员得出的结论是:数据导致错误的主要原因是不良指数,其次是不良数据可变性;第一步诊断它是否正在运行lm(),然后plm(..., model="pooling")lm()失败=> 错误数据,错误公式;plm(..., "pooling")失败=>索引基本上有问题;其他面板方法失败=> 最有可能的数据可变性问题。

最好的,乔瓦尼

PS我试图通过对RE模型的ML估计来规避这个问题,但没办法,我得到了一个奇异的矩阵错误:所以数据真的是病态的

library(nlme) remod<-lme(tb ~ profit_share + debt_assets + naba + naba3 + for1 + dom + difprofit + agri + hi + li + constr + trans + trade + rd + ser + fin, random=~1|num, data=data) Errore in solve.default(estimates[dimE[1] - (p:1), dimE[2] - (p:1), drop = FALSE]) : il sistema è numericamente singolare: valore di condizione di reciprocità = 3.93401e-25

于 2012-07-10T15:02:19.987 回答