Команда sjp.likert в sjplot, факторном или числовом? Почему два разных результата?

Я получаю 2 разных результата из своих данных с помощью команды sjp.likert, это мой код:

library(sjPlot)

l <- c(1,2,2,2,3,3,4,4,5,5,5,4,3,2,2)

lab <- c("strongly not agree",
         "not agree",
         "Neutral",
         "Agree",
         "Strongly agree")


sjp.likert(items       = l,
           cat.neutral = 3,
           catcount    = 4,
           legend.labels = lab)

обратите внимание, что я работаю с числовой переменной, а не с фактором, на данный момент все выглядит нормально, но иногда я предпочитаю работать с фактором, чтобы не указывать параметр legend.labels. Так что я использую это

l.factor <- factor(x = l,labels = lab)

sjp.likert(items       = l.factor,
           cat.neutral = 3,
           catcount    = 4)

Но вот здесь у меня возникает проблема, например: «нейтральный» ответ больше не 20%, теперь 6,7%. Насколько я вижу, пакет считывает «нейтральный» ответ как нейтральный, потому что серый цвет справа.

Вы можете видеть, что правильное число составляет 20%, используя это

prop.table(table(l.factor))
prop.table(table(l))

Что я делаю неправильно? это ошибка?


person Victor Espinoza    schedule 19.02.2017    source источник


Ответы (1)


Проблема в том, что переупорядочивание значений внутри sjp-likert()-функции (если у вас нейтральная категория) основано на числовых индексах, что не работает с факторами с уровнями символов. Таким образом, вам нужно изменить порядок уровней факторов перед вызовом функции:

l.factor <- factor(x = l,labels = lab[c(1,2,4,5,3)])

sjp.likert(items       = l.factor,
           cat.neutral = 5,
           catcount    = 4)

Другой способ — преобразовать факторы в числовые значения и установить уровни факторов в качестве метки-атрибута. Вы можете сделать это с помощью sjmisc::to_value() с аргументом keep.labels = TRUE. Взяв ваш пример и немного изменив его:

l <- c(1,2,2,2,3,3,4,4,5,5,5,4,3,2,2)

lab <- c("strongly not agree",
         "not agree",
         "Neutral",
         "Agree",
         "Strongly agree")

l.factor <- factor(x = l,labels = lab)

l.factor <- to_value(l.factor, keep.labels = T)

sjp.likert(items       = l.factor,
           cat.neutral = 3,
           catcount    = 4)

to_value() работает как с векторами, так и с фреймом данных, поэтому вы можете легко преобразовывать факторы в фрейме данных в числовые, сохраняя метки значений:

to_value(my_data_frame, keep.labels = T)

person Daniel    schedule 23.02.2017
comment
Первый. Спасибо! Большое спасибо. Планируется ли добавить такое ограничение в документацию? я не нашел что-то о проблеме факторной переменной. Я спрашиваю, потому что последний созданный сюжет создает путаницу, потому что действительно заставляет меня думать, что я правильно читаю элементы. Или, может быть, изменить функцию? - person Victor Espinoza; 23.02.2017