我有20栏分别代表一个问题(简介),在我的调查中,受访者(在主题设计范围内)必须从5个选项中挑选一个(从A到E的likert量表)。现在我想从统计学上测试答案在不同的问题(配置文件)中的分布是否不同,所以我必须在可能的剖面配对比较的交叉选项卡上运行Stuart测试。
因此,如果我只有一个比较:-1在Q1和Q2上做响应的交叉选项卡(Q2),例如2-做来自"irr“包的SM (stuart.maxwell.mh (tab1) )测试,则过程非常简单。3-提取p值
但是这样做太费时了,超过20个问题。我需要一个函数或循环来做测试,提取p.values并将它们打印在一个矩阵中。有什么帮助吗?
data <- data.frame(Q1=sample(1:5, 20, replace=T),
Q2=sample(1:5, 20, replace=T),
Q3=sample(1:5, 20, replace=T),
Q4=sample(1:5, 20, replace=T),
Q5=sample(1:5, 20, replace=T),
Q6=sample(1:5, 20, replace=T),
Q7=sample(1:5, 20, replace=T),
Q8=sample(1:5, 20, replace=T),
Q9=sample(1:5, 20, replace=T),
Q10=sample(1:5, 20,replace=T) ) #fake data
choose(n=10, k=2) # possible pairwise comparisons n!/k!(n-k)!
library(irr) # to run Stuart-Maxwell test
crosstab1<-table(data$Q1,data$Q2)
test1<-stuart.maxwell.mh(crosstab1)
p.value1 <- (test1$p)发布于 2017-05-12 12:47:30
您可以通过将combn与apply配对来实现这一点。从combn(names(data), m = 2, simplify = FALSE)中,您可以得到data中所有成对的列组合的列表。然后,您可以从分析步骤中创建一个函数,并将其封装在对sapply的调用中,以便对列表中的元素进行迭代。如果其中一些测试将失败,您可以使用try,然后在尝试错误存在的情况下对输出进行条件设置。
set.seed(1)
n <- 10
data <- as.data.frame(replicate(n, sample(1:5, 20, replace=T)))
names(data) <- paste0("Q", seq(n))
sapply(combn(names(data), 2, simplify = FALSE), function(i) {
require(irr)
xtab <- table(data[,i[1]], data[,i[2]])
test <- try(stuart.maxwell.mh(xtab))
ifelse(class(test) == "try-error", NA, test$p)
})结果(省略错误信息):
[1] 0.60653066 0.14569903 0.76409383 0.67869842 0.30610257 0.56851257 0.29978059 NA 0.50186668 0.40946486 NA 0.96507339 0.79040671 0.65190962
[15] 0.04643301 0.31731051 0.19468671 0.13960650 0.32043451 0.18998439 0.05035511 0.26611587 0.31731051 0.10539922 0.42712948 0.79543629 0.43459821 0.12994287
[29] 0.15729921 NA 0.42313825 0.69285237 0.20373938 1.00000000 0.71653131 0.55782540 0.31890656 0.22313016 0.57637784 0.14830902 0.31731051 0.40839235
[43] NA 0.05488579 0.31731051https://stackoverflow.com/questions/43934605
复制相似问题