R Извлечь логарифмическую вероятность из объекта plm

Я хотел бы извлечь вероятность журнала из объекта plm.

Он отлично работает при использовании функции logLik из базового пакета stats либо с felm из пакета lfe, либо с feols из пакета fixest, но не с любым объектом plm, где результирующее сообщение об ошибке:

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

Я проверил, и plm не является классом, определенным для пакета stats (см. stats:::).

Я что-то упустил концептуально (зная, что это оценка ML)? Например, почему lfe и fixest заставляют его работать, а 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)

person Moritz Schwarz    schedule 03.10.2020    source источник
comment
Метод «logLik.plm» просто не определен в пакете plm. Довольно много моделей панелей относятся к классу plm, поэтому, если кто-то хочет реализовать правильную версию, нужно быть осторожным (например, изящно ошибаться для неподходящих/еще не реализованных моделей, если logLik необходимо вычислять по-разному для разных моделей). разные модели).   -  person Helix123    schedule 08.10.2020


Ответы (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.

Я создал публичный список здесь.

person Moritz Schwarz    schedule 13.12.2020
comment
nobs и deviance должны работать непосредственно с объектом plm. Возможно, по стечению обстоятельств он также работает с ассоциированным сводным объектом, но это менее эффективный подход. - person Helix123; 14.12.2020