Получение ошибки подмножества Я не получал два месяца a go при запуске logisti c regression (svyglm) для данных опроса (набор данных SPSS) - PullRequest
1 голос
/ 20 июня 2020

Я перезапускаю скрипт, который раньше работал без ошибок около двух месяцев go.

Я использовал пакет haven для загрузки (не публикуемых c и проприетарных) SPSS dataset и пакет опроса для анализа сложных данных опроса.

Теперь, однако, когда я запускаю даже простую логистическую c регрессию, где обе переменные являются фиктивными (закодированы 0 для нет и 1 для да) ... что-то вроде это ...

f <- read_sav("~/data.sav")
fsd <- svydesign(ids=~1, data=f, weights=~f$weight)
model <- svyglm(exclhlth~male,design=fsd,family=quasibinomial())

... Я получаю следующие ошибки:

Error: Must subset elements with a valid subscript vector.
x Subscript has the wrong type `omit`.
ℹ It must be logical, numeric, or character.
Run `rlang::last_error()` to see where the error occurred.
> rlang::last_error()
<error/vctrs_error_subscript_type>
Must subset elements with a valid subscript vector.
x Subscript has the wrong type `omit`.
ℹ It must be logical, numeric, or character.
Backtrace:
 1. survey::svyglm(exclhlth ~ male, design = fsd, family = quasibinomial())
 2. survey:::svyglm.survey.design(...)
 4. survey:::`[.survey.design2`(design, -nas, )
 5. base::`[.data.frame`(x$variables, i, ..1, drop = FALSE)
 7. vctrs:::`[.vctrs_vctr`(xj, i)
 8. vctrs:::vec_index(x, i, ...)
 9. vctrs::vec_slice(x, i)
Run `rlang::last_trace()` to see the full context.

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

За два месяца до go я обновил R, Rstudio, а также пакеты убежища и опроса. Итак, я предполагаю, что что-то изменилось, но я не уверен, что делать.

Я начал переход с SPSS на R только в конце прошлого года, поэтому заранее благодарю вас за любые указания и заранее извиняюсь за newb ie ошибок!

1 Ответ

1 голос
/ 21 июня 2020

Хорошо, похоже, ваша проблема в том, что функции импорта данных RStudio создают классы, которые захватывают операцию с индексом ([). Это уже случалось раньше, когда RStudio переключался с создания объектов data.frame на tbl, но тогда было достаточно использовать as.data.frame() перед вызовом svydesign().

До новой версии survey пакет доступен, вы можете попробовать использовать foreign::read.spss вместо haven::read_sav?

(Кроме того, если бы вы могли придумать менее конфиденциальный пример и отправить его сопровождающему, я почти уверен, что он Буду признателен.)

Обновление : проблема в том, что выходные данные na.omit имеют класс omit, а некоторые переменные имеют класс haven_labelled, а подмножество Оператор для haven_labelled очень требователен к классу своих аргументов: он должен быть простым целым или логическим, без класса.

В справке для класса labelled предлагается использовать haven::as_factor или haven::zap_labels для приведения этих помеченных векторов к стандартному классу R.

Дальнейшее обновление : я подал на github проблему для пакета haven, который был перемещен в пакет vctrs, поэтому это поведение, вероятно, будет изменено.

Мех следующее обновление : Это было исправлено в разрабатываемой версии vctrs

...