如何解决panelAR 无法将我的 coulmn 识别为整数
所以我正在使用以下数据集:
# A tibble: 1,136 x 17
ccode year vanhdemo pcgnp left ainew sdnew milctr2 britinfl lpop iwar cwar popinc pcginc polrtnew lag_ainew lag_sdnew
<dbl> <int> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
1 2 1980 18.7 11.3 0 1 1 0 1 19.2 0 0 1.01 7.51 7 NA NA
2 2 1981 18.7 12.3 0 1 1 0 1 19.3 0 0 1.01 7.99 7 1 1
3 2 1982 18.7 13.2 0 1 1 0 1 19.3 0 0 1.01 7.39 7 1 1
4 2 1983 18.7 14.2 0 1 1 0 1 19.3 0 0 1.01 7.69 7 1 1
5 2 1984 16.1 15.5 0 1 1 0 1 19.3 0 0 1.01 9.66 7 1 1
6 2 1985 16.1 16.5 0 1 1 0 1 19.3 0 0 1.01 6.24 7 1 1
7 2 1986 16.1 17.5 0 1 1 0 1 19.3 0 0 1.01 5.86 7 1 1
8 2 1987 16.1 18.6 0 2 2 0 1 19.3 0 0 1.01 6.39 7 1 1
9 20 1980 25.6 10.2 0 1 1 0 1 17.0 0 0 1.08 9.01 7 NA NA
10 20 1981 25.6 10.7 0 1 1 0 1 17.0 0 0 1.08 5.77 7 1 1
# ... with 1,126 more rows
如您所见,R 将变量 year
识别为整数。最初,列值是数字,但我将它们转换为整数。但是,当我运行以下代码(使用 panelAR 包)时,我遇到了麻烦:
panelAR(vanhdemo ~ pcgnp + left + lpop + iwar + milctr2 + britinfl,data = dat,panelVar = "ccode",timeVar = "year",autoCorr = "psar1",panelCorrMethod = "pcse",rho.na.rm = TRUE,panel.weight = "t-1",bound.rho = TRUE)
我收到此错误消息:
Error: The time variable must be defined as an integer.
我不明白我在这里做错了什么。如果我重新创建数据集的一部分(如下所示),模型运行良好。那么问题是否源于数据集(最初是 .dta 文件)?如果有人有兴趣看,我绝对可以上传它。
这是相同数据的一个小例子:
ccode <- c(rep(2,8),rep(20,2))
year <- c(1980:1987,1980,1981)
vanhdemo <- c(rep(18.7,4),rep(16.1,rep(25.6,2))
pcgnp <- c(11.3,12.3,13.2,14.2,15.5,16.5,17.5,18.6,10.2,10.7)
dat <- data.frame(ccode,year,vanhdemo,pcgnp)
解决方法
在@xilliam 的评论中回答。解决方案是将表格从 tibble 转换为数据框。
,该错误与 data.frames
和 tibbles
的不同行为有关。 Tibbles 是“防止维度下降”的 special kind of data.frame。如果您尝试使用单个列名对 tibble 进行子集化,
你会得到一个单列的小标题。然而,根据您如何对 data.frame 进行子集化,您可能会返回一个向量或 data.frame。您看到的错误源于这种区别。在内部 panelAR()
子集时间变量的数据对象:
time.vec <- data[,timeVar]
所以,如果 'data' 是一个小标题,'time.vec' 将是一个单列小标题,而
如果 'data' 是 data.frame,则 'time.vec' 将是一个向量。 panelAR()
然后
检查 'time.vec' 是否为整数向量,并在数据对象为 tibble 的情况下抛出错误。
您可以在示例数据中看到这种行为,如下所示:
# make a tibble
dat_tib <- tibble::as_tibble(dat)
# returns a vector
dat[,"year"]
# returns a data.frame
dat["year"]
# returns a tibble
dat_tib[,"year"]
# returns a tibble
dat_tib["year"]
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。