Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/83.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
计算R中所有(可能较大)矩阵列的p值_R_Matrix_Compare_P Value - Fatal编程技术网

计算R中所有(可能较大)矩阵列的p值

计算R中所有(可能较大)矩阵列的p值,r,matrix,compare,p-value,R,Matrix,Compare,P Value,是否有更有效/更快的方法来比较两个矩阵(逐列)并使用t检验计算p值,以确保均值无差异(必要时最终切换到chisq.检验) 以下是我的解决方案: ## generate fake data (e.g., from treatment and control data) z0 <- matrix(rnorm(100),10,10) z1 <- matrix(rnorm(100, mean=1.1, sd=2),10,10) ## function to compare columns

是否有更有效/更快的方法来比较两个矩阵(逐列)并使用t检验计算p值,以确保均值无差异(必要时最终切换到chisq.检验)

以下是我的解决方案:

## generate fake data (e.g., from treatment and control data)
z0 <- matrix(rnorm(100),10,10)
z1 <- matrix(rnorm(100, mean=1.1, sd=2),10,10)

## function to compare columns (bloody for loop)
compare.matrix <- function(z0, z1){
  pval <- numeric(ncol(z0)) ## initialize

  for(i in 1:ncol(z0)){ ## compare columns
    pval[i] <- t.test(z1[, i], z0[, i])$p.value

    ## if var is categorical, switch test type
    if ( length(unique(z1[,i]))==2){
      index <- c(rep(0, nrow(z0)), rep(1, nrow(z1)))
      xx <- c(z0[,i], z1[,i])
      pval[i] <- chisq.test(table(xx, index), simulate.p.value=TRUE)$p.value      
    }
  }
  return(pval)  
}
compare.matrix(z0, z1)
##生成假数据(例如,来自治疗和控制数据)

z0这里有一种使用dplyr的方法。如果你有较大的矩阵,最好将前三行合并成一个步骤,但为了清晰起见,我将它们分开。我认为卡方检验是一个相当简单的扩展

z0_melt = melt(z0, value.name='z0')[,c('Var2','z0')]
z1_melt = melt(z1, value.name='z1')[,c('Var2','z1')]
all_df = merge(z0_melt, z1_melt)

library(dplyr)

all_df %>%
  group_by(Var2) %>%
  summarize(p = t.test(z0, z1)$p.value)

“等均值差异t检验”这句话让我想知道你是否需要配对t检验,但如果不需要,那么你的方法看起来是合理的(但我会用“均值无差异t检验”这句话)。谢谢。我根据你的建议修改了课文