Регрессия с фиксированными эффектами с PLM

Приведенный ниже код запускает регрессию временных рядов «exc ~ mkt_rf» с biglm, потому что функция lm не работает с моим реальным набором данных.

Теперь я хотел бы перейти с biglm на plm, чтобы учесть фиксированные эффекты. К сожалению, PLM не работает.

Кто-нибудь знает, что я могу изменить, что плм работает? Заранее спасибо!

library(biglm)
library(plm)
library(data.table)

union_with_factors = data.table(
  t = c(1,2,3,4,5,1,2,3,4,5,1,2,3,4,5),
  excessr  = c(10,23,13,53,43,76,34,12,45,13,42,31,4,53,64),
  FundId = c("x","x","x","x","x","y","y","y","y","y","z","z","z","z","z"),
  mkt_rf = c(1,1,2,1,3,1,1,2,1,3,1,1,2,1,3)
)

sp <- split(union_with_factors, union_with_factors$FundId)
beta <- sapply(sp, function(tmp){
  fit <- plm(excessr ~ mkt_rf, data = tmp)
  coef(fit)
})

person Rbeginner    schedule 19.03.2020    source источник
comment
Какой столбец должен содержать фиксированные эффекты? FundId?   -  person bretauv    schedule 19.03.2020
comment
Я не так глубоко разбираюсь в статистике, но мой набор данных несбалансирован, поэтому мне нужно применить PLM, чтобы избежать фиксированных эффектов фонда в регрессии   -  person Rbeginner    schedule 19.03.2020


Ответы (1)


Предположим, что ID людей задан как FundId, а временной ID задан как t, вот как вы можете применить регрессию с фиксированными эффектами:

library(biglm)
library(data.table)
library(plm)

union_with_factors = data.table(
  t = c(1,2,3,4,5,1,2,3,4,5,1,2,3,4,5),
  excessr  = c(10,23,13,53,43,76,34,12,45,13,42,31,4,53,64),
  FundId = c("x","x","x","x","x","y","y","y","y","y","z","z","z","z","z"),
  mkt_rf = c(1,1,2,1,3,1,1,2,1,3,1,1,2,1,3)
)
fit <- plm(excessr ~ mkt_rf, 
             data = union_with_factors, 
             index = c("FundId", "t"), 
             model = "within")
summary(fit)
fixef(fit)

Дополнительные сведения см. здесь и в plm документации (?plm в консоли).

Изменить: после этого сообщения и this article, it похоже, что вы можете выполнить регрессию Fama-MacBeth с pmg (также в пакете plm):

fama_macbeth <- pmg(excessr ~ mkt_rf, 
                   data = union_with_factors, 
                   index = c("FundId", "t"))
summary(fama_macbeth)
person bretauv    schedule 19.03.2020
comment
Спасибо, это работает. Мне просто интересно, потому что я должен использовать регрессию Fama McBeth, где я сначала регрессирую временные ряды (exc ~ mkt_rf) для каждого FundId. Затем на втором шаге регрессируйте коэффициенты, которые я вычислил перед поперечным сечением (превышение ~ Beta_mkt_rf) для каждого t. Можно ли с помощью этой процедуры использовать функцию plm? Мне кажется, что plm выполняет оба шага вместе .. - person Rbeginner; 19.03.2020
comment
Я никогда этого не делал, но похоже, что вы можете сделать это с pmg. См. Мое редактирование для подробностей - person bretauv; 19.03.2020
comment
Хотя plm довольно хорошо работает с моими данными, pmg выдает ошибку, в которой указано index = c (FundId,: Недостаточное количество периодов времени. Вы знаете, как это исправить. Большое спасибо за ваши усилия !! - person Rbeginner; 19.03.2020
comment
Я никогда не работал с этим типом регрессии, но сообщение об ошибке довольно явное, и я не могу помочь вам с вашими данными. Подходит ли мой ответ для вашего примера? - person bretauv; 19.03.2020