R 计算现有循环中Wilcoxon的效果大小

R 计算现有循环中Wilcoxon的效果大小,r,statistics,R,Statistics,我是一个新手/中级R用户,从未真正接触过循环和编写函数。昨天我无意中发现了一段很好的代码,它允许我对整个数据集进行Wilcoxon测试。然而,我也希望它能计算出效果大小,似乎我无法将该函数添加到现有代码中。如果您有任何意见,我们将不胜感激 威尔科克森环: test.fun <- function(data, col) { c1 <- combn(unique(data$group),2) sigs <- list() for(i in 1:ncol(c1))

我是一个新手/中级R用户,从未真正接触过循环和编写函数。昨天我无意中发现了一段很好的代码,它允许我对整个数据集进行Wilcoxon测试。然而,我也希望它能计算出效果大小,似乎我无法将该函数添加到现有代码中。如果您有任何意见,我们将不胜感激

威尔科克森环:

    test.fun <- function(data, col) { 

 c1 <- combn(unique(data$group),2)
 sigs <- list()
 for(i in 1:ncol(c1)) {
    sigs[[i]] <- wilcox.test(
                   as.numeric(data[data$group == c1[1,i],col]),
                   as.numeric(data[data$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)
}

test.fun下面是我尝试组合这些函数的步骤

请不要在我的个人资料中警告我不是一个长期专家——我回答问题的动机是a)兴趣和b)我自己的进步。因此,请仔细检查所有结果,然后再相信它。至少在别人纠正我的错误之前,它会让你继续前进:)

因此,考虑到这一点:

首先,您应该从
rFromWilcoxon
中删除
cat
行,并将其替换为
r

然后更改
test.fun
如下:

test.fun <- function(data, col, group = 'group') { 

     c1 <- combn(unique(data[[group]]),2)
     N  <- nrow(data) / ncol(c1)    # Calculates N assuming all groups are equal size
     sigs <- list()

     for(i in 1:ncol(c1)) {
          sigs[[i]] <- wilcox.test(
               as.numeric(data[data[[group]] == c1[1, i], col]),
               as.numeric(data[data[[group]] == c1[2, i], col])
          )
     }


     r <- lapply(sigs, function(i) rFromWilcox(i, N))    # Applies rFromWilcox function

     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,
                         r = unlist(r))
tests
}

test.fun工作起来很有魅力!谢谢!
test.fun <- function(data, col, group = 'group') { 

     c1 <- combn(unique(data[[group]]),2)
     N  <- nrow(data) / ncol(c1)    # Calculates N assuming all groups are equal size
     sigs <- list()

     for(i in 1:ncol(c1)) {
          sigs[[i]] <- wilcox.test(
               as.numeric(data[data[[group]] == c1[1, i], col]),
               as.numeric(data[data[[group]] == c1[2, i], col])
          )
     }


     r <- lapply(sigs, function(i) rFromWilcox(i, N))    # Applies rFromWilcox function

     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,
                         r = unlist(r))
tests
}