分析李克特数据
Analysing likert data
我正在尝试为以下数据框计算 R 中的基本统计数据(均值、标准差、变量)(此 table 中的数字是响应频率):
Question Strongly disagree Disagree Don't know Agree Strongly agree
A 1 1 15 4 25
B 1 1 18 3 23
C 0 0 19 1 26
我如何计算上面提到的内容并将这些数据可视化?
在这种情况下获得汇总统计数据的唯一方法是做出强有力的假设,即响应之间的差异都是相同的(例如,"Strongly disagree" 和 "Disagree" 之间的差异是与 "Disagree" 和 "Don't know" 之间的区别相同)。如果您愿意做出该假设,那么您可以计算加权平均值。
tt <- read.table(header=TRUE,textConnection("
Question Strongly_disagree Disagree Dont_know Agree Strongly_agree
A 1 1 15 4 25
B 1 1 18 3 23
C 0 0 19 1 26"))
tt2 <- tt[,-1] ## scores only
ss <- sweep(tt2,MARGIN=2,FUN="*",1:5) ## weight by numeric equivalent
平均值:计算分数的加权平均值
(meanvals <- rowSums(ss)/rowSums(tt2))
## [1] 4.108696 4.000000 4.152174
这些对应的选择等于或略高于 "Agree"。
或者您可以使用 apply(tt2,1,weighted.mean,x=1:5)
标准偏差:
devs <- outer(-meanvals,1:5,"+")
sqrt(rowSums(devs^2*tt2)/rowSums(tt2))
(您可能想除以 rowSums(tt2)-1
以获得样本标准偏差)。
我正在尝试为以下数据框计算 R 中的基本统计数据(均值、标准差、变量)(此 table 中的数字是响应频率):
Question Strongly disagree Disagree Don't know Agree Strongly agree
A 1 1 15 4 25
B 1 1 18 3 23
C 0 0 19 1 26
我如何计算上面提到的内容并将这些数据可视化?
在这种情况下获得汇总统计数据的唯一方法是做出强有力的假设,即响应之间的差异都是相同的(例如,"Strongly disagree" 和 "Disagree" 之间的差异是与 "Disagree" 和 "Don't know" 之间的区别相同)。如果您愿意做出该假设,那么您可以计算加权平均值。
tt <- read.table(header=TRUE,textConnection("
Question Strongly_disagree Disagree Dont_know Agree Strongly_agree
A 1 1 15 4 25
B 1 1 18 3 23
C 0 0 19 1 26"))
tt2 <- tt[,-1] ## scores only
ss <- sweep(tt2,MARGIN=2,FUN="*",1:5) ## weight by numeric equivalent
平均值:计算分数的加权平均值
(meanvals <- rowSums(ss)/rowSums(tt2))
## [1] 4.108696 4.000000 4.152174
这些对应的选择等于或略高于 "Agree"。
或者您可以使用 apply(tt2,1,weighted.mean,x=1:5)
标准偏差:
devs <- outer(-meanvals,1:5,"+")
sqrt(rowSums(devs^2*tt2)/rowSums(tt2))
(您可能想除以 rowSums(tt2)-1
以获得样本标准偏差)。