1

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(即使有 Haven 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吗?或者两者(或它们的依赖关系)的某种不兼容?

4

1 回答 1

1

我认为问题在于您的数据males_part是一个小标题,但是tibble直到您附加haven. 如果您没有tibble加载,那么您将没有任何用于 tibble 类的方法"tbl_df""tbl",它的行为就像一个数据框。tibble加载后,它将开始像小玩意一样。

这是一个问题,因为 tibble 和数据帧不相同,但 tibble 的类包括"data.frame". 我猜想发生的事情是plm假设从数据框中提取单列会给出一个向量,但是对于一个小标题,它会给出另一个小标题。

您的解决方法非常简单。只需使用males_part <- as.data.frame(males_part)删除 tibble 类,然后haven就无所谓了。

可以想象,这值得向plm. tibble这是导致问题的设计缺陷(如果 tibbles 继承自data.frame,它们应该像数据框一样工作),但现在 tibbles 很常见,而且这种设计不太可能改变。该函数可以通过在函数的早期plm放置来保护自己免受这种情况的影响,或者使用.data <- as.data.frame(data)pdata.framedrop = TRUE

于 2020-04-16T15:24:23.477 回答