sjplot,factor或numeric中的sjp.likert命令?为什么有两个不同的结果?

时间:2017-02-19 21:28:43

标签: r plot sjplot

我使用 sjp.likert 命令从我的数据中获得2个不同的结果,这是我的代码:

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)

注意我正在使用数值变量而不是因子,此时一切看起来都不错,但有时我更喜欢使用factor来省略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))

我做错了什么? 这是一个错误吗?

1 个答案:

答案 0 :(得分:0)

问题是重新排序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)

另一种方法是将因子转换为数值,并将因子级别设置为label-attribute。您可以使用参数sjmisc::to_value()的{​​{1}}执行此操作。举个例子,然后修改它:

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()