Используйте формулу ("string") с felm () из пакета lfe, одновременно используя фиксированные эффекты - PullRequest
1 голос
/ 08 апреля 2020

Я пытаюсь запустить большую формулу регрессии, которая создается где-то еще в виде длинной строки. Я также хочу использовать «фиксированные эффекты» (отдельные значения c перехватов).

Без фиксированных эффектов это работает как в lm(), так и в felm() функциях:

library("lfe")
MyData <- data.frame(country = c("US","US","DE","DE"),
             y = rnorm(4),
             x = rnorm(4))

testformula <- "y ~ x"

lm(formula(testformula),
   data = MyData)

felm(formula(testformula),
     data = MyData)

Также нет проблем с этим типом регрессии в felm(), если я использую фиксированные эффекты страны:

felm(y ~ x | country,
     data = MyData)

Однако, когда я пытаюсь объединить как функцию formula(), так и аргумент с фиксированными эффектами, Я получаю сообщение об ошибке:

felm(formula(testformula) | country ,
     data = MyData)

"Error in terms(formula(as.Formula(formula), rhs = 1), specials = "G") : 
Object 'country' not found"

Я нахожу это странным, отдельно оба эти аргумента работают. Как я могу использовать функцию formula() в felm() и по-прежнему работать с удобным синтаксисом фиксированных эффектов этой функции? Я не хочу записывать фиксированные эффекты в формулу, потому что я хочу полагаться на внутренние преобразования пакета lfe.

ps: Кстати, это работает в plm(), поэтому я предполагаю, что что-то странное в функции felm(), или я плохо ее ввел.

library("plm")

plm(formula(testformula),
    data =  MyData,
    index = c("country"),
    model = "within",
    effect = "individual")

1 Ответ

1 голос
/ 08 апреля 2020

Поскольку фиксированные эффекты являются частью формулы *, мы можем включить их в строку формулы.

fit1 <- felm(y ~ x | country, data=MyData)

testformula <- "y ~ x | country"
fit2 <- felm(formula(testformula), data=MyData)
fit2
#      x 
# 0.3382 

all.equal(fit1$coefficients, fit2$coefficients)
# [1] TRUE

* вы можете увидеть это по тому факту, что параметры функции в R обычно через запятую

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...