Пакет R/PLM: Как включить вложенный эффект для одних и тех же брендов в разных странах?

В настоящее время я анализирую набор панельных данных, который отслеживает бренды в разных странах с течением времени. В частности, меня интересует, как определенные переменные влияют на будущую долю рынка.

Используя функцию head(), мой набор данных выглядит следующим образом:

# A tibble: 20 x 10
   Country Brand Date      MS     uuu     vvv   www   xxx   yyy   zzz
   <chr>   <chr> <chr>  <dbl>   <dbl>   <dbl> <dbl> <dbl> <dbl> <dbl>
 1 BR      AAA   2015Q1 13.0  46.4    66.7     23.8     9  23.7  613.
 2 DE      AAA   2015Q1 16.1  56.5    35.6     36.5     8  23.7  461.
 3 ES      AAA   2015Q1 15.4  40.9    40.9     27.6     9  23.7  548.
 4 FR      AAA   2015Q1 14.4  48.4    25.1     30.1     8  23.7  414.
 5 IT      AAA   2015Q1 15.0  33.2    33.2     35.2     9  23.7  650.
 6 JP      AAA   2015Q1 14.8  19.6    -5.81    31.5     9  23.7  735.
 7 KO      AAA   2015Q1 14.3  45.7    26.1     42.4     9  23.7  410.
 8 UK      AAA   2015Q1 17.6  40.6    12.7     25.9     9  23.7  660.
 9 US      AAA   2015Q1  3.82 -0.651  -0.651   23.2    11  23.7  429.
10 BR      AAA   2015Q2 14.6  40.4    62.2     25.0     9  23.7  583.
11 DE      AAA   2015Q2 16.9  52.0    30.6     35.3     9  23.7  539.
12 ES      AAA   2015Q2 14.7  41.8    41.8     30.1     8  23.7  558.
13 FR      AAA   2015Q2 15.2  51.7    29.1     30.2     9  23.7  445.
14 IT      AAA   2015Q2 16.9  44.4    44.4     35.5     9  23.7  573.
15 JP      AAA   2015Q2 16.2  20.3    -8.73    29.4     9  23.7  664.
16 KO      AAA   2015Q2 16.0  49.1    31.6     40.2     9  23.7  408.
17 UK      AAA   2015Q2 18.8  34.4    10.2     27.5     9  23.7  788.
18 US      AAA   2015Q2  4.12  0.0770  0.0770  22.5    11  23.7  446.
19 BR      AAA   2015Q3 13.4  43.5    65.6     26.6     9  23.7  624.
20 CN      AAA   2015Q3 14.3  59.9    66.1     48.6     9  23.7  664.

Подобно некоторым примерам, которые я мог найти здесь или на других веб-сайтах, я попытался использовать пакет PLM в R для анализа данных с помощью регрессии вложенных случайных эффектов.

Я начал писать свой код следующим образом:

p_crosscountry2 <- pdata.frame(crosscountry2,index=c("Brand","Date","Country"))

что почти то же самое, что указано в этой угрозе: -using">оценить модель случайных эффектов повторных измерений с вложенной структурой, используя `plm()`

Однако есть одно принципиальное различие между примерами, которые я смог найти, и моим случаем:

Во всех примерах каждая единица самого низкого уровня связана только с одним более высоким уровнем (пример: каждый студент принадлежит только к одной школе), в то время как в моем случае единицы самого низкого уровня могут принадлежать нескольким более высоким уровням (несколько брендов представлены в нескольких странах). .

Когда я запускаю код dataframe, он показывает мне следующее сообщение об ошибке:

Warning message:
In pdata.frame(crosscountry2, index = c("Brand", "Date",  :
  duplicate couples (id-time) in resulting pdata.frame
 to find out which, use e.g. table(index(your_pdataframe), useNA = "ifany")

Глядя в таблицу (используя предложенную функцию), структура данных выглядит нормально:

, , Country = BR

     Date
Brand 2015Q1 2015Q2 2015Q3 2015Q4 2016Q1 2016Q2 2016Q3 2016Q4 2017Q1 2017Q2 2017Q3
  AAA      1      1      1      1      1      1      1      1      1      1      1
  BBB      0      0      0      0      0      0      0      0      0      0      0
  CCC      1      1      1      1      1      1      1      1      1      1      1
  DDD      0      0      0      0      0      0      0      0      0      0      0
  EEE      0      0      0      0      0      0      0      0      0      0      0
  FFF      0      0      0      0      0      0      0      0      0      0      0
  GGG      0      0      0      0      0      0      0      0      0      0      0
  HHH      1      1      1      1      1      1      1      1      1      1      1
  III      1      1      1      1      1      1      1      1      1      1      1
  JJJ      1      1      1      1      1      1      1      1      1      1      1
  KKK      1      1      1      1      1      1      1      1      1      1      1
  LLL      0      0      0      0      0      0      0      0      0      0      0
  MMM      0      0      0      0      0      0      0      0      0      0      0

, , Country = CN

     Date
Brand 2015Q1 2015Q2 2015Q3 2015Q4 2016Q1 2016Q2 2016Q3 2016Q4 2017Q1 2017Q2 2017Q3
  AAA      0      0      1      1      1      1      1      1      1      1      0
  BBB      0      0      1      1      1      1      1      1      1      1      0
  CCC      0      0      0      0      0      0      0      0      0      0      0
  DDD      0      0      0      0      0      0      0      0      0      0      0
  EEE      0      0      1      1      1      1      1      1      1      1      0
  FFF      0      0      0      0      0      0      0      0      0      0      0
  GGG      0      0      1      1      1      1      1      1      1      1      0
  HHH      0      0      1      1      1      1      1      1      1      1      0

С помощью функции head() таблица выглядит следующим образом:

             Country Brand   Date    MS       uuu       vvv      www xxx     yyy      zzz
BR-AAA-2015Q1      BR   AAA 2015Q1 12.97  46.43449  66.66667 23.79714   9 23.7342 613.1986
BR-AAA-2015Q2      BR   AAA 2015Q2 14.56  40.38156  62.16216 24.96264   9 23.7342 583.3325
BR-AAA-2015Q3      BR   AAA 2015Q3 13.38  43.53741  65.64626 26.59215   9 23.7342 623.8418
BR-AAA-2015Q4      BR   AAA 2015Q4 14.94  42.18077  67.14491 26.05669   9 23.7342 610.7607
BR-AAA-2016Q1      BR   AAA 2016Q1 15.10  46.62681  68.57387 26.93074   9 26.6329 650.2189
BR-AAA-2016Q2      BR   AAA 2016Q2 15.17  48.34142  71.68285 25.15683   9 26.6329 671.1437
BR-AAA-2016Q3      BR   AAA 2016Q3 13.90  49.98002  71.39433 26.26867   9 26.6329 645.4896
BR-AAA-2016Q4      BR   AAA 2016Q4 15.93  50.23791  71.45123 25.62308   9 26.6329 669.8751
BR-AAA-2017Q1      BR   AAA 2017Q1 14.51  50.65138  72.48567 25.49358   9 31.3494 768.1376
BR-AAA-2017Q2      BR   AAA 2017Q2 14.71  50.07792  73.29870 27.33325   9 31.3494 639.0572
BR-AAA-2017Q3      BR   AAA 2017Q3 14.02  50.25853  72.64736 25.06274   9 31.3494 666.7235
BR-CCC-2015Q1      BR   CCC 2015Q1  4.87 -47.35099 -24.83444 57.96842   7  4.7340 613.1986
BR-CCC-2015Q2      BR   CCC 2015Q2  4.91 -60.50955 -41.71975 50.41528   8  4.7340 583.3325
BR-CCC-2015Q3      BR   CCC 2015Q3  4.86 -56.59722 -39.58333 43.69692   6  4.7340 623.8418
BR-CCC-2015Q4      BR   CCC 2015Q4  4.40 -57.38636 -40.62500 45.89061   7  4.7340 610.7607
BR-CCC-2016Q1      BR   CCC 2016Q1  4.34 -46.82131 -27.83505 46.66406   6  4.8588 650.2189
BR-CCC-2016Q2      BR   CCC 2016Q2  4.63 -45.86039 -27.02922 52.84351   8  4.8588 671.1437
BR-CCC-2016Q3      BR   CCC 2016Q3  5.47 -52.37342 -32.27848 62.05175   6  4.8588 645.4896
BR-CCC-2016Q4      BR   CCC 2016Q4  4.82 -43.54067 -24.40191 58.59462   7  4.8588 669.8751
BR-CCC-2017Q1      BR   CCC 2017Q1  5.10 -42.12185 -22.26891 46.53642   8  4.9031 768.1376

У меня было бы два вопроса по этому поводу:

1) Есть ли другой способ правильно определить фрейм данных? Я также пробовал разные порядки одних и тех же столбцов, но всегда получал одно и то же сообщение об ошибке.

2) В качестве обходного пути я создал комбинированную переменную страны и бренда (например, AAA_BR, AAA_CN, CCC_BR и т. д.) и использовал ее вместо переменной бренда. Эта версия фактически позволила мне выполнить регрессию вложенных случайных эффектов. Считаете ли вы, что это осуществимый вариант, или у меня возникают проблемы, поскольку я не учитываю тот факт, что одни и те же бренды больше представлены в разных странах?

Спасибо за поддержку!

Свен


person Sven    schedule 31.05.2020    source источник
comment
Ваши данные crosscountry2 кажутся несколько странными (если смотреть на вывод) — это должен быть плоский фрейм данных — не так ли?   -  person Helix123    schedule 01.06.2020
comment
Привет, Helix123, спасибо за ответ! Я думаю, что нужна именно эта вложенная структура данных. Это также явно указано в примере в документации PLM-пакета. См. нижнюю часть страницы 88 здесь: cran.r-project.org /web/packages/plm/plm.pdf   -  person Sven    schedule 02.06.2020
comment
Для pdata.frame вы указываете вложение с аргументом index, но он не может обрабатывать вложенные фреймы данных в качестве входных данных. Попробуйте сделать его невложенным фреймом данных, а затем запустите pdata.frame. В примере документации фрейм входных данных не является вложенным.   -  person Helix123    schedule 02.06.2020
comment
Привет, Helix123, я добавил в описание еще немного контекста своей структуры данных. Мой фактический набор данных не является вложенным, и он получает вложенную структуру только после использования команды pdata.frame. Спасибо еще раз!   -  person Sven    schedule 03.06.2020
comment
Я не думаю, что понятие вложенности, которое вы имеете в виду, такое же, как реализовано для модели вложенных случайных эффектов в plm (Baltagi/Song/Jung (2001)).   -  person Helix123    schedule 03.06.2020
comment
По сути, вы говорите, что, исходя из этого определения, вложенность означает, что каждая фирма может принадлежать только одной стране, верно? Есть ли функция, которая позволяет брендам быть частью разных стран, или мне следует использовать обходной путь, который я указал в вопросе 2?   -  person Sven    schedule 03.06.2020