Ошибка mlogit.data(): назначенные идентификаторы данных должны быть совместимы с существующими данными.

Я работал над этим часами, и я просто не могу найти решение проблемы. Надеюсь, кто-то здесь может помочь.

Я пытаюсь создать матрицу личного выбора для некоторых данных со следующей структурой:

# A tibble: 2,152 x 32
     age choice canton  lr_s dist_svp dist_fdp dist_bdp dist_cvp dist_glp dist_sp
   <dbl> <fct>  <fct>  <dbl>    <dbl>    <dbl>    <dbl>    <dbl>    <dbl>   <dbl>
 1    39 sp     GE         3       49       25       25        4       16       1
 2    67 sp     ZH         0      100       49       64        4       25       0
 3    42 svp    ZH         7        4        4        1       36        4      36

   dist_gps pid_svp pid_fdp pid_bdp pid_cvp pid_glp pid_sp pid_gps french italian
      <dbl>   <dbl>   <dbl>   <dbl>   <dbl>   <dbl>  <dbl>   <dbl>  <dbl>   <dbl>
 1        0       0       0       0       0       0      0       1      1       0
 2        9       0       0       0       0       0      1       0      0       0
 3       36       0       0       0       0       0      1       0      0       0

Теперь мне нужно создать матрицу личного выбора с 7 альтернативами, которые обозначены dist_* / pid_* в столбцах.

Насколько я понимаю, это должно работать со следующим кодом:

work.pc <- mlogit.data(work,
                       varying = c(5:11, 12:18),
                       choice = "choice",
                       shape = "wide",
                       sep = "_")

Однако, когда я запускаю этот код, я получаю следующее сообщение об ошибке и несколько предупреждающих сообщений:

Error: Assigned data `ids` must be compatible with existing data.
x Existing data has 15064 rows.
x Assigned data has 2152 rows.
ℹ Only vectors of size 1 are recycled.
Run `rlang::last_error()` to see where the error occurred.
In addition: Warning messages:
1: Setting row names on a tibble is deprecated. 
2: Setting row names on a tibble is deprecated. 
3: Setting row names on a tibble is deprecated. 
4: Setting row names on a tibble is deprecated. 
5: Setting row names on a tibble is deprecated. 
6: Setting row names on a tibble is deprecated. 
7: Setting row names on a tibble is deprecated. 

В чем проблема? Я благодарен за любую помощь! Я пробовал все.


person Daniel Patkovic    schedule 01.05.2020    source источник
comment
извините, я не очень хорошо разбираюсь в табличках.. как я могу скопировать эти данные в r? Разве dput не будет намного проще?   -  person desval    schedule 01.05.2020


Ответы (1)


Проблема решена: работа с табличкой должна быть преобразована в dataframe.

После использования

work <- as.data.frame(work)

код работает правильно, т. е. сообщение об ошибке устранено.

person Daniel Patkovic    schedule 01.05.2020
comment
Дополнение к этому решению: похоже, это работает с объектами sf (которые создают ту же проблему), но это не совсем желательно, поскольку удаляет географический компонент в sf. Более того, предполагается, что НФ-объекты подчиняются аккуратной вселенной. Есть ли у кого-нибудь обходной путь для создания того же решения для объекта sf, но с сохранением геометрии (т.е. без необходимости преобразования в фрейм данных)? - person Abe; 12.09.2020