【问题标题】:Problems with within and random models in plm packageplm 包中的内部模型和随机模型的问题
【发布时间】:2012-07-09 22:30:41
【问题描述】:

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

【问题讨论】:

  • 你能提供一个最小的例子吗 - 一个包含数据集并且在开始时不加载所有这些无关包的例子?
  • 否,因为错误可能与包屏蔽函数名称等有关。您可以轻松地评论除外来和 plm 之外的所有内容。我添加了数据。

标签: r regression plm


【解决方案1】:

Giovanni Millo 在 R-help 中回答:

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

跟进,同时我通过私人获取数据 沟通。正如我所怀疑的那样,这个问题隐藏在一些缺乏 数据的时间变异性。事实上,OLS 运行良好:

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

summary(lm(fm, data))

%(输出正常,省略)

plm“池化”也是如此

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

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

%(输出正常,省略)

但是 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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-07-29
    • 2018-08-08
    • 2013-12-06
    • 2020-09-24
    • 2017-04-29
    • 1970-01-01
    相关资源
    最近更新 更多