我正在使用plm包,我在随机和模型中遇到问题,这些错误表示“空模型”。但是,该模型不是空的。在plm.fit的源代码中,出现错误的地方就是这样(从我的头顶写作......)
X <- model.matrix(formula,data, lhs=1,...)
if (ncol(X) == 0) stop("empty model")
但是,如果我尝试使用我输入到原始函数的命令复制此行为,则它会使ncol(X)为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。
答案 0 :(得分:3)
Giovanni Millo在R-help中回答:
亲爱的托马斯,亲爱的名单,
跟进,与此同时我通过私人获取数据 通讯。我怀疑这个问题隐藏在一些缺乏的问题中 数据的时间可变性。事实上,OLS工作正常:
%
fm
是公式,data
是数据集,panel
是转换为pdata.frame
的数据集
summary(lm(fm, data))
%(输出ok,省略)
和pm“汇集”一样
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 for 估计误差分量)。事实上,试图面板差异 任何右侧变量都会产生全零(NaN用于 方差共享,例如0/0),例如第一个:
summary(diff(panel$profit_share))
total sum of squares : 0 id time
NaN NaN
但每个人都是一样的。所以(转化后的)模型 实际上是空的,正如原始错误消息所示。现在我没有 有时间深入研究数据,但rhs变量都看起来 时间常数给我......
因此,名单上的小组成员的主要内容是:主要原因 数据引起的错误是不好的指标,第二个是糟糕的数据变异性; 诊断它的第一步是lm()
,然后是plm(..., model="pooling")
。lm()
失败=&gt;数据不好,公式不好;plm(..., "pooling")
失败=&gt;指数基本上是错误的;其他小组 方法失败=&gt;最有可能是数据可变性问题。Best,Giovanni
PS我试图通过ML估计RE模型来解决这个问题但是 没办法,我得到一个奇异的矩阵错误:所以数据真的是 病态
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