You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

R语言Likert包分析真实调研数据的实操问题求助

解决R语言likert包分析与可视化的核心问题

我来帮你一步步搞定这些likert包的使用痛点,我之前处理混合尺度Likert数据时也遇到过类似的问题,下面是具体的解决方案:

一、关键预处理步骤:把Likert变量转为有序因子

likert包的核心依赖是有序因子(ordered factor),如果你的变量是数值或无序因子,就会出现图表乱序、中立项不居中的问题。这是官方demo没讲透的核心前提:

1. 转换单个Likert变量

假设你的daff_rate是1-5的数值型响应,先把它转为带明确顺序的因子:

library(likert)
library(dplyr)

# 提取数据并预处理
fdaff_likert <- f2f %>%
  select(RESPID, daff_rate) %>%
  # 转换为有序因子:必须指定levels的顺序(从最消极到最积极)
  mutate(daff_rate = factor(daff_rate,
                            levels = c(1, 2, 3, 4, 5),  # 对应你实际的选项编码
                            labels = c("非常不同意", "不同意", "中立", "同意", "非常同意"),  # 替换为你的选项文本
                            ordered = TRUE))

# 创建likert对象(此时不需要手动指定nlevels,包会自动识别因子水平数)
likert_obj <- likert(items = fdaff_likert[, "daff_rate", drop = FALSE])

2. 验证预处理结果

运行str(likert_obj$items)检查因子水平:如果显示Ordinal Factor w/ 5 levels "非常不同意"<"不同意"<...,说明预处理正确。

二、解决图表无序、中立项不居中的问题

完成上面的预处理后,再运行plot(likert_obj),图表的堆叠顺序会和你指定的因子水平一致,中立项也会自动居中。如果还是有问题:

  • 检查nlevels参数是否和因子水平数匹配(比如5级就不要设成4)
  • 确认你的中立项确实是因子水平的中间值(5级的话是第3级,4级的话可以手动指定neutral参数,比如likert(..., neutral=2))

三、将y轴重命名为对应问题

有两种简单方法:

方法1:先修改数据框列名,再创建likert对象

# 把列名改成你的问题文本
colnames(fdaff_likert)[2] <- "你对数字服务效率的满意度评价?"
# 重新创建likert对象
likert_obj <- likert(items = fdaff_likert[, 2, drop = FALSE])
# 绘图时y轴会自动显示修改后的名称
plot(likert_obj)

方法2:绘图时直接指定ylab(适合单个item的情况)

plot(likert_obj, ylab = "你对数字服务效率的满意度评价?")

四、基于区域列进行分组分析

如果要按region列分组生成堆叠条形图,只需要在创建likert对象时指定group参数:

# 预处理:保留region列+转换Likert变量为有序因子
f2f_grouped <- f2f %>%
  select(RESPID, region, daff_rate) %>%
  mutate(daff_rate = factor(daff_rate,
                            levels = c(1,2,3,4,5),
                            labels = c("非常不同意", "不同意", "中立", "同意", "非常同意"),
                            ordered = TRUE))

# 创建分组likert对象
likert_grouped <- likert(items = f2f_grouped[, "daff_rate", drop = FALSE],
                         group = f2f_grouped$region)

# 绘制分组堆叠条形图
plot(likert_grouped)

生成的图表会按区域分组,每个区域对应一个堆叠条形,方便对比不同区域的响应分布。

额外注意事项

  • 如果有不同尺度的Likert项(比如有的是5级,有的是4级),要分开创建likert对象,不能放在同一个items参数里(因为尺度不统一)。
  • 多个同尺度的Likert项可以一起放进items,比如items = f2f_processed[, c("daff_rate", "service_rate")],会生成多个item的对比堆叠图。

内容的提问来源于stack exchange,提问作者Chris Bova

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 03:51:10