plm包中的内部和随机模型的问题

时间:2012-07-09 22:30:42

标签: r regression plm

我正在使用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。

1 个答案:

答案 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