0

行列 m が与えられた場合、行/変数に対して t.test を実行し (平均がゼロでないかどうかをテストする)、各列が t.test$statistic および t.test$p.value などに対応する行列を取得するにはどうすればよいですか?行のために。一部の行には複数の NA があるため、同時に t.test が失敗しないことを確認したいと考えています。したがって、この場合、結果の行列の行は、t.test$statistic 列と t.test$p.value 列の両方で NA になります。以下のようなものを考えましたが、うまくいきません。最後に、マトリックスのリストでこれを行う必要がありますが、単一のマトリックスでこれを行うことができれば、マトリックスのリストでlapplyを使用できると考えています。ありがとう!

res <- apply(m, 1, function(x) {
u <- matrix(NA, nrow = nrow(m), ncol = 4, dimnames = list(
    c(rownames(m)),
    c("Stats", "P-values")
    ))
if(sum(!is.na(x)) > 1)
    u[,1] <- t.test(x)$statistic
    u[,2] <- t.test(x)$p.value
else NA
return(u)
}
)
4

2 に答える 2

0

これらの線に沿って何かを行うことができます

ステップ 1: おもちゃのデータセットを生成する

library(mvtnorm)
set.seed(1)
mat1 <- rmvnorm(n = 30, mean = sample(c(rep(0, 5), 1:5)), sigma = diag(10))
mat1[sample(seq(nrow(mat1) * ncol(mat1)), 5)] <- NA
mat1 <- t(mat1)
mat2 <- rmvnorm(n = 30, mean = sample(c(rep(0, 5), 1:5)), sigma = diag(10))
mat2[sample(seq(nrow(mat2) * ncol(mat2)), 5)] <- NA
mat2 <- t(mat2)
mat_list <- list(mat1, mat2)

ステップ 2: テストを実行するヘルパー関数を作成し、欠損値がある場合は NA を生成する

t_test <- function(x)
    c(stat = ifelse(any(is.na(x)), NA, t.test(x)$statistic),
      p_val = ifelse(any(is.na(x)), NA, t.test(x)$p.value))

ステップ 3: 行単位の行列のリストに適用する

lapply(mat_list, function(m) t(apply(m, 1, t_test)))
## [[1]]
##           stat      p_val
##  [1,]  1.02334 3.1461e-01
##  [2,] -0.17025 8.6599e-01
##  [3,] -0.55501 5.8314e-01
##  [4,]       NA         NA
##  [5,]  1.48641 1.4796e-01
##  [6,]       NA         NA
##  [7,] 25.64252 1.7737e-21
##  [8,]       NA         NA
##  [9,] 24.50047 6.2831e-21
## [10,]       NA         NA

## [[2]]
##           stat      p_val
##  [1,]       NA         NA
##  [2,]       NA         NA
##  [3,] -0.44341 6.6076e-01
##  [4,]       NA         NA
##  [5,]  1.28913 2.0754e-01
##  [6,]       NA         NA
##  [7,]  4.86929 3.6477e-05
##  [8,] 16.59708 2.4032e-16
##  [9,]  0.54102 5.9263e-01
## [10,]       NA         NA
于 2014-03-16T12:36:33.390 に答える