我对统计数据的经验很少,非常感谢任何帮助。我目前正在使用R来执行此操作。
我正在尝试确定Likert分析数据的重要性。我的每个前后调查都有一个问题,有25个问题(专栏),有59个学生(行)的答复。
我正在使用Wilcoxon签名等级测试,即。通过比较调查前数据的第一列和调查后数据的第一列,然后是第二个问题,依此类推,测试第一个问题的重要性。
如何编写for循环以在所有问题的回答中运行Wilcoxon测试?
到目前为止我已经发现了这个,但是还没有能够正确运行它。甚至帮助理解一些语法也会很棒。
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]
提前非常感谢你。
答案 0 :(得分:0)
以下是根据您所描述的内容运行wilcoxon测试的示例:
示例数据:假设响应评级为1到5,前后调查将分别单独保存,并具有匹配的列名称。
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函数循环每个列名称(x),该列名称将插入所选的pre [,x]和post [,x]数据以进行测试。所有25个测试的结果都以列表(all.test)的形式返回:
all.test <- lapply(colnames(post), function(x) wilcox.test(pre[,x], post[,x]))
要一次性提取所有测试的统计数据和p.value,请使用sapply循环每个wilcoxon测试并提取(&#39; [&#39;)两个&#34;统计数据&#34;和&#34; p.value&#34;并作为矩阵返回。
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