我使用 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))
我做错了什么? 这是一个错误吗?
答案 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()