Likert 分析:使用 wilcoxon 确定 R 中预调查数据和 post 调查数据之间的显着性
Likert Analysis: Using wilcoxon to determine significance between pre and post survey data in R
我在统计学方面的经验很少,如有任何帮助,将不胜感激。我目前正在使用 R 来执行此操作。
我正在尝试确定李克特分析数据的重要性。我有一份 sheet 我们的预调查和 post 调查,有 25 个问题(列),59 名学生(行)的回答。
我正在使用 Wilcoxon 符号秩检验,即。通过将预调查数据的第一列与 post 调查数据的第一列进行比较来测试第一个问题的重要性,然后是第二个问题,依此类推。
我如何为 运行 Wilcoxon 测试写一个 for 循环来回答所有问题?
到目前为止我已经找到了这个,但是没能 运行 正确地找到它。即使帮助理解一些语法也会很棒。
test.fun <- function(dat, col) {
c1 <- combn(unique(dat$group),2) sigs <- list() for(i in 1:ncol(c1)) {
sigs[[i]] <- wilcox.test(
dat[dat$group == c1[1,i],col],
dat[dat$group == c1[2,i],col]
)
}
names(sigs) <- paste("Group",c1[1,],"by Group",c1[2,])
tests <- data.frame(Test=names(sigs),
W=unlist(lapply(sigs,function(x) x$statistic)),
p=unlist(lapply(sigs,function(x) x$p.value)),row.names=NULL)
return(tests) }
tests <- lapply(colnames(dat)[-1],function(x) test.fun(dat,x)) names(tests) <- colnames(dat)[-1]
在此先感谢您。
这里有一个 运行ning wilcoxon 检验的例子,基于你所描述的内容:
示例数据:假设响应被评为 1 到 5,预调查和 post 调查分开保存,并具有匹配的列名称。
pre <- replicate(25, sample(1:5, 59, replace=T))
post <- replicate(25, sample(1:5, 59, replace=T))
colnames(pre) <- colnames(post) <- paste0("Q", 1:25)
为了 运行 wilcoxon 测试,使用 lapply 函数循环每个将插入所选 pre[x] 和 post[x] 的列名 (x)测试的数据。所有 25 项测试的结果 return 作为列表 (all.test):
all.test <- lapply(colnames(post), function(x) wilcox.test(pre[,x], post[,x]))
要一次提取所有测试的统计数据和p.value,请使用 sapply 循环每个 wilcoxon 测试并提取 ('[') "statistics" 和 "p.value" 以及 return作为矩阵。
sapply(all.test, '[', c("statistic", "p.value"))
[,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9] [,10]
statistic 1556.5 1931 1718 1894.5 1659 1785 1652.5 2066.5 1912.5 1658
p.value 0.3122574 0.29259 0.903439 0.3976938 0.6555535 0.8086088 0.6301387 0.07366355 0.3451189 0.6523042
[,11] [,12] [,13] [,14] [,15] [,16] [,17] [,18] [,19] [,20]
statistic 1605.5 1723 1678.5 1368 1810 1813 2082 1595 1862.5 1588
p.value 0.4591325 0.9254467 0.735141 0.04035589 0.7040117 0.6920512 0.06084165 0.4222573 0.5027951 0.4028304
[,21] [,22] [,23] [,24] [,25]
statistic 1986.5 1816.5 1854 1819.5 1859.5
p.value 0.1772745 0.6779568 0.5344984 0.6661272 0.5147567
我在统计学方面的经验很少,如有任何帮助,将不胜感激。我目前正在使用 R 来执行此操作。
我正在尝试确定李克特分析数据的重要性。我有一份 sheet 我们的预调查和 post 调查,有 25 个问题(列),59 名学生(行)的回答。
我正在使用 Wilcoxon 符号秩检验,即。通过将预调查数据的第一列与 post 调查数据的第一列进行比较来测试第一个问题的重要性,然后是第二个问题,依此类推。
我如何为 运行 Wilcoxon 测试写一个 for 循环来回答所有问题?
到目前为止我已经找到了这个,但是没能 运行 正确地找到它。即使帮助理解一些语法也会很棒。
test.fun <- function(dat, col) {
c1 <- combn(unique(dat$group),2) sigs <- list() for(i in 1:ncol(c1)) {
sigs[[i]] <- wilcox.test(
dat[dat$group == c1[1,i],col],
dat[dat$group == c1[2,i],col]
)
}
names(sigs) <- paste("Group",c1[1,],"by Group",c1[2,])
tests <- data.frame(Test=names(sigs),
W=unlist(lapply(sigs,function(x) x$statistic)),
p=unlist(lapply(sigs,function(x) x$p.value)),row.names=NULL)
return(tests) }
tests <- lapply(colnames(dat)[-1],function(x) test.fun(dat,x)) names(tests) <- colnames(dat)[-1]
在此先感谢您。
这里有一个 运行ning wilcoxon 检验的例子,基于你所描述的内容:
示例数据:假设响应被评为 1 到 5,预调查和 post 调查分开保存,并具有匹配的列名称。
pre <- replicate(25, sample(1:5, 59, replace=T))
post <- replicate(25, sample(1:5, 59, replace=T))
colnames(pre) <- colnames(post) <- paste0("Q", 1:25)
为了 运行 wilcoxon 测试,使用 lapply 函数循环每个将插入所选 pre[x] 和 post[x] 的列名 (x)测试的数据。所有 25 项测试的结果 return 作为列表 (all.test):
all.test <- lapply(colnames(post), function(x) wilcox.test(pre[,x], post[,x]))
要一次提取所有测试的统计数据和p.value,请使用 sapply 循环每个 wilcoxon 测试并提取 ('[') "statistics" 和 "p.value" 以及 return作为矩阵。
sapply(all.test, '[', c("statistic", "p.value"))
[,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9] [,10]
statistic 1556.5 1931 1718 1894.5 1659 1785 1652.5 2066.5 1912.5 1658
p.value 0.3122574 0.29259 0.903439 0.3976938 0.6555535 0.8086088 0.6301387 0.07366355 0.3451189 0.6523042
[,11] [,12] [,13] [,14] [,15] [,16] [,17] [,18] [,19] [,20]
statistic 1605.5 1723 1678.5 1368 1810 1813 2082 1595 1862.5 1588
p.value 0.4591325 0.9254467 0.735141 0.04035589 0.7040117 0.6920512 0.06084165 0.4222573 0.5027951 0.4028304
[,21] [,22] [,23] [,24] [,25]
statistic 1986.5 1816.5 1854 1819.5 1859.5
p.value 0.1772745 0.6779568 0.5344984 0.6661272 0.5147567