1

2 つの行列 (列ごと) を比較し、t-test を使用して平均値に差がない (最終的に必要に応じて chisq.test に切り替える) p 値を計算する、より効率的で高速な方法はありますか?

これが私の解決策です:

## 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)
4

1 に答える 1