Функция отставания из пакета plm возвращает NA вместо отстающих значений - PullRequest
0 голосов
/ 01 мая 2019

Я делаю проект, который включает модель с фиксированными эффектами и оценку GMM системы. Я хочу использовать пакет plm для этого. Однако при выполнении регрессии я получаю сообщение об ошибке:

"Ошибка в plm.fit (формула, данные, модель, эффект, random.method, random.models,: 0 (не NA) случаев "

Я проследил проблему до функции задержки, которая используется в пакете plm: когда я пытаюсь использовать ее в столбце в моем data.frame, он возвращает только значения NA для всех лагов, неравных 0 (т.е. текущее значение) ,

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

Следующий код показывает часть моих данных, которые я преобразовал в pdata.frame, а затем запустил модель с фиксированными эффектами. Это привело к сообщению об ошибке, указанному выше. Затем я проверил функцию задержки отдельно и обнаружил, что она не работает должным образом в моем наборе данных.

library(plm)

example <- structure(list(
  X = c(
    1L, 37L, 89L, 145L, 215L, 295L, 391L, 503L,
    504L, 616L, 617L
  ), countrycode = structure(c(
    2L, 2L, 2L, 2L,
    2L, 2L, 2L, 1L, 2L, 1L, 2L
  ), .Label = c("ALB", "ARG"), class = "factor"),
  year = c(
    1970L, 1975L, 1980L, 1985L, 1990L, 1995L, 2000L,
    2005L, 2005L, 2010L, 2010L
  ), rgdppc = c(
    3611.53200479887,
    3800.75962232602, 3978.31086065157, 4387.38321845057, 5553.84269266385,
    10810.9468450015, 12719.6544787325, 5920.55446541169, 12511.9821473033,
    9544.73991912729, 15841.658208159
  ), growth = c(
    0.134499926825177,
    0.0510688869844671, 0.0456563749718093, 0.0978756492215904,
    0.235757093672094, 0.666069152314748, 0.162589176374155,
    0.205953161751015, -0.0164616369654098, 0.477560104733307,
    0.235956308809754
  ), pop_growth = c(
    0.0726537583373137, 0.0837385279741412,
    0.0753099311604224, 0.0780944388423599, 0.0742106054169795,
    0.066915782210657, 0.0572695650290527, -0.0138011742778001,
    0.0548156893291569, -0.0460748632561909, 0.051732718162242
  ), Gini = c(
    0.468112837531106, 0.441088756489684, 0.417000047344437,
    0.392382688333824, 0.367346706677727, 0.34287710283137, 0.352476770021164,
    0.221846080582856, 0.333761509816487, 0.180112255727025,
    0.319847139735362
  ), bcGini = c(
    0.561735405037327, 0.529306507787621,
    0.500400056813324, 0.470859226000588, 0.440816048013272,
    0.411452523397644, 0.422972124025397, 0.266215296699427,
    0.400513811779785, 0.21613470687243, 0.383816567682435
  ),
  bcwGini = c(
    0.645650701245952, 0.60225255667686, 0.563484696480372,
    0.525119712533559, 0.487339228077908, 0.451398810473532,
    0.461104421570223, 0.322099208203327, 0.434846178826301,
    0.263971449718222, 0.414250358008174
  ), capgrowth = c(
    0.117957011507009,
    0.178649110088593, 0.173653210113507, 0.0785021513269335,
    -0.00224558647600759, 0.0267416371475058, 0.10224003699156,
    0.508306023156432, -0.000946393858047401, 0.42009422610586,
    0.155065623868424
  ), mschool = c(
    6.33, 6.69, 7.06, 7.46, 7.86,
    8.26, 8.66, 9.4, 9.06, 9.68, 9.43
  )
), row.names = c(NA, -11L), class = "data.frame")


pexample <- pdata.frame(example, index = c("countrycode", "year"))


mod1 <- plm(growth ~ plm::lag(log(rgdppc), 1) + pop_growth + capgrowth +
  plm::lag(log(mschool), 1), data = pexample, 
  effect = "twoways", model = "within", 
  index = c("countrycode", "year"), na.action = "na.omit")

plm::lag(pexample$growth, 0:2)

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

data("EmplUK", package = "plm")
E <- pdata.frame(EmplUK, index = c("firm", "year"))
head(plm::lag(E$emp, 0:2))

Это вывод из моего SessionInfo:

R version 3.6.0 (2019-04-26)
Platform: x86_64-w64-mingw32/x64 (64-bit)
Running under: Windows 10 x64 (build 17134)

Matrix products: default

locale:
[1] LC_COLLATE=German_Germany.1252  LC_CTYPE=German_Germany.1252   
[3] LC_MONETARY=German_Germany.1252 LC_NUMERIC=C                   
[5] LC_TIME=German_Germany.1252    

attached base packages:
[1] stats     graphics  grDevices utils     datasets  methods   base     

other attached packages:
[1] dplyr_0.8.0.1 readr_1.3.1   plm_1.7-0     Formula_1.2-3

loaded via a namespace (and not attached):
 [1] Rcpp_1.0.1       rstudioapi_0.10  magrittr_1.5     hms_0.4.2        MASS_7.3-51.4   
 [6] tidyselect_0.2.5 lattice_0.20-38  R6_2.4.0         rlang_0.3.4      styler_1.1.0    
[11] tools_3.6.0      grid_3.6.0       nlme_3.1-139     maxLik_1.3-4     miscTools_0.6-22
[16] lmtest_0.9-37    assertthat_0.2.1 tibble_2.1.1     crayon_1.3.4     bdsmatrix_1.3-3 
[21] purrr_0.3.2      glue_1.3.1       sandwich_2.5-1   compiler_3.6.0   pillar_1.3.1    
[26] backports_1.1.4  pkgconfig_2.0.2  zoo_1.8-5  

Я использую RStudio версии 1.2.1335

Кто-нибудь имеет опыт решения этой проблемы? Любая помощь будет принята с благодарностью.

...