【问题标题】:R Extract Log Likelihood from a plm objectR从plm对象中提取对数似然
【发布时间】:2021-01-19 00:15:18
【问题描述】:

我想从 plm 对象中提取对数似然度。

当使用来自lfe 包的felm 或来自fixest 包的feols 时,它可以很好地使用基础stats 包中的logLik 函数,但不能与任何plm 对象一起使用生成的错误消息是:

Error in UseMethod("logLik") : 
  no applicable method for 'logLik' applied to an object of class "c('plm', 'panelmodel')"

我检查了plm 不是在stats 包中定义的类(请参阅stats:::)。

我是否在概念上遗漏了某些东西(知道这是 ML 估计)?如,为什么 lfe 和 fixst 使它工作而 plm 没有?有解决办法吗?

谢谢!

library(plm)
library(lfe)
library(fixest)
data("Produc", package = "plm")

# lfe
xx <- felm(log(gsp) ~ log(pcap) + log(pc) + log(emp) + unemp| state + year|0|0,data = Produc)
summary(xx)
logLik(xx)

# fixest
yy <- feols(log(gsp) ~ log(pcap) + log(pc) + log(emp) + unemp| state + year,data = Produc)
summary(yy)
logLik(yy)

# PLM
zz <- plm(log(gsp) ~ log(pcap) + log(pc) + log(emp) + unemp,data = Produc, index = c("state","year"))
summary(zz)
logLik(zz)

【问题讨论】:

  • plm 包中根本没有定义方法“logLik.plm”。相当多的面板模型属于“plm”类,因此如果想要实现正确的版本,则需要小心(例如,如果 logLik 需要在不同的不同型号的方法)。

标签: r panel-data plm


【解决方案1】:

我想我明白了:

object 这里是一个 plm 对象,就像上面的zz

logLik.plm <- function(object){
  out <- -plm::nobs(object) * log(2 * var(object$residuals) * pi)/2 - deviance(object)/(2 * var(object$residuals))
  
  attr(out,"df") <- nobs(object) - object$df.residual
  attr(out,"nobs") <- plm::nobs(summary(object))
  return(out)
}

这应该也适用于AIC 命令。

我创建了一个公共 gist here

【讨论】:

  • nobsdeviance 应该直接在 plm 对象上工作。也许巧合的是,它也适用于关联的摘要对象,但这是效率较低的方法。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-02-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-07-04
  • 2020-09-10
相关资源
最近更新 更多