используя функцию cor.test в R - PullRequest
0 голосов
/ 06 марта 2019

Если x матрица n*m, то при использовании cor(x) у меня есть корреляционная матрица m*m между каждой парой столбцов.

Как можно использовать функцию cor.test в матрице n*m, чтобы иметь также матрицу m*m p-значений?

1 Ответ

0 голосов
/ 06 марта 2019

Возможно, существует существующая функция, но вот моя версия. p_cor_mat запускает cor.test для каждой пары столбцов в матрице x и записывает значение p. Затем они помещаются в квадратную матрицу и возвращаются.

# Set seed
set.seed(42)

# Matrix of data
x <- matrix(runif(120), ncol = 4)

# Function for creating p value matrix
p_cor_mat <- function(x){
  # All combinations of columns
  colcom <- t(combn(1:ncol(x), 2))

  # Calculate p values
  p_vals <- apply(colcom, MAR = 1, function(i)cor.test(x[,i[1]], x[,i[2]])$p.value)

  # Create matrix for result
  p_mat <- diag(ncol(x))

  # Fill upper & lower triangles
  p_mat[colcom] <- p_mat[colcom[,2:1]] <- p_vals

  # Return result
  p_mat
}

# Test function
p_cor_mat(x)
#>           [,1]      [,2]      [,3]      [,4]
#> [1,] 1.0000000 0.4495713 0.9071164 0.8462530
#> [2,] 0.4495713 1.0000000 0.5960786 0.7093539
#> [3,] 0.9071164 0.5960786 1.0000000 0.7466226
#> [4,] 0.8462530 0.7093539 0.7466226 1.0000000

Создано в 2019-03-06 пакетом Представить (v0.2.1)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...