【问题标题】:panelAR doesn't recognise my coulmn as an integerpanelAR 无法将我的列识别为整数
【发布时间】:2021-10-01 16:35:26
【问题描述】:

https://easyupload.io/3rnesm

所以我正在使用以下数据集:

# 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, 4), 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)

【问题讨论】:

  • 如果dat 中的年份类别是数字而非整数且panelAR 有效,请尝试将数据中的年份类别改回数字。
  • @sm0k313 我尝试了第二个建议,但不幸的是它没有奏效。
  • 如果这对 panelAR() 很重要,请不要这样做,但您的第一个对象是 tibble,但 'dat' 是 data.frame。也许尝试将真实数据转换为 data.frame?
  • @xilliam 你的眼睛像鹰一样。这就是问题所在!

标签: r regression panel-data


【解决方案1】:

错误与data.framestibbles 的不同行为有关。 Tibbles 是一个special kind of data.frame,它'防止尺寸下降'。如果您尝试使用单个列名子集小标题, 你会得到一个单列的小标题。然而,根据您如何对 data.frame 进行子集化,您可能会得到一个向量或一个 data.frame。您看到的错误是由这种区别引起的。在内部 panelAR() 子集数据对象的时间变量:

time.vec <- data[, timeVar]

因此,如果 'data' 是一个 tibble,则 'time.vec' 将是一个单列 tibble,而 如果 '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"]

【讨论】:

    【解决方案2】:

    在@xilliam 的评论中回答。解决方案是将表格从 tibble 转换为数据框。

    【讨论】:

      猜你喜欢
      • 2015-11-22
      • 1970-01-01
      • 2018-08-08
      • 1970-01-01
      • 2011-07-13
      • 2018-06-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多