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

У меня странная проблема при оценке случайных эффектов с пакетом plm в R.

Вот ссылка на dput часть моих данных: https://pastebin.com/raw/mTdh26dg

Мой код:

library(plm)
library(haven)
pmales <- pdata.frame(males_part, index = c("NR", "YEAR"))
random <- plm(WAGE ~ SCHOOL + EXPER + EXPER2 + BLACK + HISP + MAR + UNION + RUR + NE + NC + S + factor(YEAR), 
              data = pmales, model = "random")

Причина, по которой я включил libary(haven), заключается в том, что исходный набор данных представляет собой файл .dta.

Когда я запускаю этот код, я получаю эту ошибку:

Error in is.pbalanced.default(x) : 
  argument "y" is missing, with no default

Странно то, что если я начинаю с чистого сеанса R и не загружаю haven (и не импортирую данные из dput), я не получаю эту ошибку. Я получаю сообщение об ошибке, если я импортирую из dput, но все равно загружаю haven. Я также не получаю ошибку при оценке моделей within или pooling (даже с убежищем loaded).

Вот мой sessionInfo():

R version 3.6.3 (2020-02-29)
Platform: x86_64-pc-linux-gnu (64-bit)
Running under: Linux Mint 19.3

Matrix products: default
BLAS:   /usr/lib/x86_64-linux-gnu/blas/libblas.so.3.7.1
LAPACK: /usr/lib/x86_64-linux-gnu/lapack/liblapack.so.3.7.1

locale:
 [1] LC_CTYPE=en_US.UTF-8       LC_NUMERIC=C               LC_TIME=en_US.UTF-8        LC_COLLATE=en_US.UTF-8     LC_MONETARY=nl_NL.UTF-8   
 [6] LC_MESSAGES=en_US.UTF-8    LC_PAPER=nl_NL.UTF-8       LC_NAME=C                  LC_ADDRESS=C               LC_TELEPHONE=C            
[11] LC_MEASUREMENT=nl_NL.UTF-8 LC_IDENTIFICATION=C       

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

other attached packages:
[1] haven_2.2.0 plm_2.2-3  

loaded via a namespace (and not attached):
 [1] Rcpp_1.0.4.6     rstudioapi_0.11  Formula_1.2-3    magrittr_1.5     hms_0.5.3        MASS_7.3-51.5    lattice_0.20-41  rlang_0.4.5     
 [9] bibtex_0.4.2.2   fansi_0.4.1      stringr_1.4.0    tools_3.6.3      grid_3.6.3       nlme_3.1-144     cli_2.0.2        ellipsis_0.3.0  
[17] maxLik_1.3-8     miscTools_0.6-26 assertthat_0.2.1 lmtest_0.9-37    digest_0.6.25    lifecycle_0.2.0  tibble_3.0.0     crayon_1.3.4    
[25] bdsmatrix_1.3-4  vctrs_0.2.4      Rdpack_0.11-1    gbRd_0.4-11      glue_1.4.0       sandwich_2.5-1   stringi_1.4.6    pillar_1.4.3    
[33] compiler_3.6.3   forcats_0.5.0    pkgconfig_2.0.3  zoo_1.8-7       

Это ошибка в plm или haven? Или какая-то несовместимость двух (или их зависимостей)?


person avs    schedule 16.04.2020    source источник
comment
Это была ошибка в пакете plm, исправленная в версии 2.4-4. Однако основная причина немного отличается от того, что было проанализировано здесь.   -  person Helix123    schedule 31.08.2020


Ответы (1)


Я думаю, проблема в том, что ваши данные males_part представляют собой табличку, но у вас не загружен пакет tibble, пока вы не прикрепите haven. Если у вас не загружен tibble, то у вас не будет никаких методов для классов таблиц "tbl_df" и "tbl", и он будет действовать точно так же, как фрейм данных. Как только tibble будет загружен, он начнет действовать как таблетка.

Это проблема, потому что таблички и фреймы данных не идентичны, но класс таблички включает "data.frame". Я предполагаю, что происходит то, что plm предполагает, что извлечение одного столбца из фрейма данных дает вектор, но с tibble он дает другой tibble.

Обходной путь для вас довольно прост. Просто используйте males_part <- as.data.frame(males_part), чтобы удалить класс tibble, и тогда haven не будет иметь значения.

Возможно, об этом стоит сообщить сопровождающему plm. Это недостаток дизайна в tibble, который вызывает проблему (если тибблы наследуются от data.frame, они должны вести себя как фреймы данных), но тибблы в настоящее время довольно распространены, и этот дизайн вряд ли изменится. Функция plm может защитить себя от этого, поместив data <- as.data.frame(data) в начале функции pdata.frame или защитив каждое извлечение столбца с помощью drop = TRUE.

person user2554330    schedule 16.04.2020
comment
Это решает проблему, спасибо! Но разве пакет haven не загружает пакет tibble? - person avs; 16.04.2020
comment
Еще одна вещь. Это для задания класса, и только некоторые из нас получают эту ошибку. У всех нас есть последние (3.6.x) версии R, разные операционные системы и последние версии этих пакетов. - person avs; 16.04.2020
comment
Да, haven загружает tibble, и это вызывает ошибку. Не знаю, чем отличаются ваши одноклассники. Возможно, они никогда не превращали данные в табличку, например. если вы используете read.csv, вы получаете фрейм данных, если вы используете readr::read_csv, вы получаете табличку. - person user2554330; 16.04.2020
comment
Я добавил текст в первый абзац, чтобы более подробно объяснить, что происходит. - person user2554330; 16.04.2020
comment
Спасибо, я принял ваш ответ. Это такая странная специфическая ошибка, тем более, что при оценке других моделей ее не бывает. - person avs; 16.04.2020
comment
Я предполагаю, что большинство пакетов уже знают об этом и защитили себя от проблем с tibble. - person user2554330; 16.04.2020
comment
Я отправил электронное письмо сопровождающему plm, Иву Круассану. Я предполагаю, что это будет исправлено в ближайшее время. - person avs; 17.04.2020
comment
Это кажется связанным: « title = «ошибка в аргументе pbalanced defaultx y отсутствует без учета по умолчанию»> stackoverflow.com/questions/60847460/ - person Helix123; 17.04.2020
comment
Это была ошибка в пакете plm, исправленная в версии 2.4-4. Однако основная причина немного отличается от того, что было проанализировано здесь. - person Helix123; 31.08.2020