基于计数的Likert量表均值计算异常问题求助
修正Likert量表均值计算错误的方案
问题根源
你第三步的计算逻辑完全错误。正确的Likert加权均值应该是所有(同意等级编码值 × 对应选择人数)的总和除以总参与人数,而你用agreement_numeric的均值除以其总和,这种计算方式会把数值无意义地缩小,导致所有结果都为0.05这类异常值。
正确计算步骤与R代码示例
假设你的数据集结构包含问题项,以及各同意等级的选择人数列(比如Strongly_disagree到Strongly_agree),以下是修正后的代码:
1. 模拟/加载数据集
# 模拟你的Likert数据集(替换成你实际的数据集) library(tibble) likert_data <- tibble( item = c("用户体验满意度", "功能实用性", "界面友好度"), Strongly_disagree = c(4, 6, 3), Disagree = c(9, 11, 7), Neutral = c(16, 19, 22), Agree = c(21, 24, 18), Strongly_agree = c(10, 10, 10) )
2. 计算加权均值
library(dplyr) likert_summary <- likert_data %>% rowwise() %>% mutate( # 计算加权总和:编码值1-5分别对应各选项人数 weighted_total = 1*Strongly_disagree + 2*Disagree + 3*Neutral + 4*Agree + 5*Strongly_agree, # 计算该问题的总参与人数 total_people = sum(c_across(Strongly_disagree:Strongly_agree)), # 核心:加权均值 = 加权总和 / 总人数 avg_score = weighted_total / total_people ) %>% ungroup() %>% select(item, avg_score) # 保留需要的列 # 查看计算结果 print(likert_summary)
3. 可视化均值
用ggplot2将结果展示为图表:
library(ggplot2) ggplot(likert_summary, aes(x = item, y = avg_score)) + geom_col(fill = "#2E86AB", alpha = 0.8) + geom_text(aes(label = round(avg_score, 2)), vjust = -0.3, size = 4) + ylim(1, 5) + # 匹配Likert量表的1-5评分范围 labs(title = "Likert量表各维度均值", x = "评估项", y = "加权均值") + theme_bw()
关键说明
- 编码逻辑保持你的设定:
Strongly disagree=1,Strongly agree=5,无需调整 - 加权均值的核心是用人数加权各评分值,最终结果会落在1-5之间,符合Likert量表的预期范围
内容的提问来源于stack exchange,提问作者Ryan Bruno
相关产品推荐
相关产品推荐

