Панель управления не распознает мой coulmn как целое число

#r #regression #panel-data

Вопрос:

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)
 

Комментарии:

1. Возможно, если класс year from dat числовой, а не целочисленный и panelAR работает, попробуйте изменить класс year в ваших данных обратно на числовой.

2. @sm0k313 Я попробовал второе предложение, но, к сожалению, оно не сработало.

3. Не знаю, будет ли это иметь значение для panelAR (), но ваш первый объект-это tibble, а » dat » — это data.frame. Может быть, попробовать преобразовать реальные данные в фрейм данных?

4. @xilliam у тебя глаза как у ястреба. В этом-то и была проблема!

Ответ №1:

Ошибка связана с различным поведением data.frames и tibbles . Тибблы-это особый вид данных.фрейм, который «предотвращает падение размеров». Если вы попытаетесь подмножествовать тиббл с именем одного столбца, вы получите обратно тиббл с одним столбцом. Тем не менее, в зависимости от того, как вы подмножествуете фрейм данных, вы можете получить обратно вектор или фрейм данных. Ошибка, которую вы видите, является результатом этого различия. Внутреннее panelAR() подмножество объекта данных для переменной времени:

 time.vec <- data[, timeVar]
 

Итак, если «данные» -это тиббл, «time.vec» будет тибблом с одним столбцом, тогда
как если «данные»-это фрейм данных, «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 в фрейм данных.