три измерения в пакете plm

Это дополнительный вопрос, связанный с это сообщение, которое, на мой взгляд, не решило проблему.

Итак, я повторяю данные

============================================
 year | comp | count |  value.x |  value.y
------+------+-------+----------+-----------
 2000 |   A  |  USA  |  1029.0  |  239481   
------+------+-------+----------+-----------
 2000 |   A  |  CAN  |  2341.4  |  129333   
------+------+-------+----------+-----------
 2000 |   B  |  USA  |  2847.7  |  187319   
------+------+-------+----------+-----------
 2000 |   B  |  CAN  |  4820.5  |  392039
------+------+-------+----------+-----------
 2001 |   A  |  USA  |  7289.9  |  429481
------+------+-------+----------+-----------
 2001 |   A  |  CAN  |  5067.3  |  589143
------+------+-------+----------+-----------
 2001 |   B  |  USA  |  7847.8  |  958234
------+------+-------+----------+-----------
 2001 |   B  |  CAN  |  9820.0  | 1029385
============================================

Хотя с точки зрения программирования некоторые ответы в этом посте делают свою работу, проблема далека от завершения.

Мой вопрос более конкретен.

Я хочу запустить фиксированный эффект и модель случайного эффекта на основе данных, показанных выше. Я должен изучить влияние value.x на value.y на comp и year, без учета (или с учетом count)

Предлагаемый ответ приведен в этом post для обработки дубликатов в идентификаторе выглядит следующим образом:

fakedata$id <- fakedata %>% group_indices(comp, count)

а затем запустить

plm(value.y ~ value.x, model = "within", data=fakedata, index=c(id,year))

хотя группировка comp и count, а затем запуск модели с фиксированными эффектами или случайными эффектами работает, эта стратегия предполагает, что каждый comp обрабатывается по-разному в каждом cou. Это не обязательно то, чего кто-то хочет от таких регрессий.

Как было сказано ранее, в моем случае я хочу знать влияние value.x на value.y на comp и year, без учета (или с учетом count)

Думаю, здесь подойдет модель следующего вида:

plm(value.y ~ value.x + factor(cou), model = "within", data=fakedata, index=c(as.numeric(comp),year))

Как было предложено в некоторых ответах. Однако у меня это не сработало, и появляется обычное сообщение об ошибке из пакета plm:

Error in pdim.default(index[[1]], index[[2]]) : 
  duplicate couples (id-time)
In addition: Warning messages:
1: In pdata.frame(data, index) :
  duplicate couples (id-time) in resulting pdata.frame
 to find out which, use e.g. table(index(your_pdataframe), useNA = "ifany")
2: In is.pbalanced.default(index[[1]], index[[2]]) :
  duplicate couples (id-time)

Итак, как я могу сделать модель с фиксированным эффектом, не взаимодействуя с comp и cou ??


person msh855    schedule 03.06.2018    source источник
comment
Для фиксированного эффекта вы можете запустить простую регрессию, рассматривающую год и комплекцию как фиктивные переменные. Случайные эффекты - это модель GLS (коэффициенты такие же, как у OLS, вам нужно настроить ковариационную матрицу), тогда возможно что-то, что вам нужно, однако в соответствии с предположениями модели эффектов RE характеристики отдельных стран не должны иметь значения, иначе ваша модель предвзят.   -  person Rodrigo Remedio    schedule 05.06.2018
comment
Спасибо, есть примеры с кодами? Как я могу ввести в модель FE фиктивные переменные, о которых вы сказали? Насколько отличается от того, что я написал в своем посте? plm(value.y ~ value.x + factor(cou), model = "within", data=fakedata, index=c(as.numeric(comp),year))   -  person msh855    schedule 05.06.2018


Ответы (1)


Для фиксированного эффекта вы можете запустить простую регрессию, рассматривающую год и комплекцию как фиктивные переменные. В этом случае вы получите фиксированные эффекты вне зависимости от страны.

lm(value.y ~ value.x + factor(year) + factor(comp)

Вы даже можете включить страну в качестве фактора. В этом случае вы получите тот же результат, что и при запуске plm с индексом id (чтобы получить точно такие же результаты, вам может потребоваться вручную выбрать манекены, чтобы они были одинаковыми в обеих регрессиях). Это модель LSDV (фиктивные переменные наименьших квадратов).

lm(value.y ~ value.x + factor(year) + factor(comp) + factor(count)
plm(value.y ~ value.x, model = "within", data=fakedata, index=c(id,year))

Если вы хотите выбрать, какой фактор является базовым, вы можете создать макеты вручную. Есть тысячи пакетов, которые могут это сделать. Два примера:

#with base R
dummies <- model.matrix(~cate, fakedata)

#or using the fastDummies package
dummies <- dummy_columns(fakedata$cate)

В вашем вопросе следующий код выдаст ошибку, потому что plm не может работать с повторяющимся идентификатором. Однако, предположим, что это возможно, тот факт, что вы используете count как фиктивный, даст вам тот же результат, создающий индекс, который взаимодействует с count и comp. По вашему вопросу, я думаю, это не то, что вы хотите.

plm(value.y ~ value.x + factor(cou), model = "within", data=fakedata, index=c(as.numeric(comp),year))
person Rodrigo Remedio    schedule 05.06.2018