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
?还是两者(或它们的依存关系)某种不兼容?
我认为问题在于您的数据males_part
有些琐碎,但是您只有在tibble
附加时才加载软件包haven
。如果您尚未tibble
加载,那么您将没有任何适用于tibble类"tbl_df"
和的方法"tbl"
,它将完全像一个数据框一样工作。一旦tibble
被加载,它会开始像一个tibble。
这是一个问题,因为小标题和数据帧不相同,但是小标题的类别包括"data.frame"
。我猜发生了什么,那就是plm
假设从数据帧中提取单个列给出了一个矢量,但是如果有一个小标题,它将给出另一个小标题。
解决方法非常简单。只需使用males_part <- as.data.frame(males_part)
删除小标题类,然后haven
就可以了。
可以想象,这值得向的维护者报告plm
。这是一个设计缺陷tibble
,导致出现问题(如果小标题从继承而来data.frame
,它们应该像数据帧一样工作),但是小标题如今已非常普遍,并且这种设计不太可能更改。该plm
功能可以通过将其放在函数的data <- as.data.frame(data)
早期pdata.frame
或使用来保护每个列的提取来防止自身受到攻击drop = TRUE
。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句