три измерения в PLM Packadge - PullRequest
0 голосов
/ 03 июня 2018

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

Так что я повторяю данные

============================================
 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)

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

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 packadge:

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 ??

1 Ответ

0 голосов
/ 05 июня 2018

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

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))
...