Уважаемое сообщество StackOverflow:
Я пытаюсь создать матрицу значений p, которая соответствует матрице, которую я получил путем получения значений корреляции
Мои данные следующие (просто делаю 5 строк для простоты, мои реальные данные - 3 столбца для каждого фрейма данных с 50 строками).
FG_Smooth <- data.frame(FS_1 = c(0.43, 0.33, 3.47, 5.26, 1.09), FS2 = c(0.01, 0.02, 6.86, 3.27, 0.86), FS_3 = c(0.07, 0.36, 1.91, 5.61, 0.84), row.names = c("Group_3", "Thermo", "Embryophyta", "Flavo", "Cyclo"))
FMG_Smooth <- data.frame(GS_1 = c(1.13, 1.20, 0.52, 2.81, 0.70), GS_2 = c(1.18, 1.7, 0.42, 2.93, 0.78), GS_3 = c(1.17, 1.11, 0.60, 3.10, 0.87), row.names = c("Proline", "Trigonelline", "L-Lysine", "Nioctine", "Caffeate"))
library(Hmisc)
rcorr(t(FG_Smooth), t(FMG_Smooth), type = "pearson")
Но я получаю эту ошибку:
Ошибка в rcorr (t (FG_Smooth), t (FMG_Smooth), type = "pearson"):
должно иметь> 4 наблюдения
У меня есть только 3 биологических образца каждого, поэтому я не могу использовать команду rcorr
, которая была предложена несколько раз в нескольких сообщениях. Команда rcorr
дает вам 1) матрицу корреляций; и 2) р-значения для корреляций.
Итак, чтобы обойти эту проблему, я выполнил следующее: как предлагалось в других сообщениях:
library(stats)
cor(t(FG_Smooth), t(FMG_Smooth), method = "pearson")
Это работает и дает матрицу всех моих корреляций.
Мой следующий шаг - найти p-значения, связанные с каждым значением в корреляционной матрице. Функция cor.test
дает только общее значение p, а это не то, что мне нужно.
После просмотра нескольких постов - я наткнулся на это:
Функция rcorr () для корреляций
Я следовал инструкциям к указанному коду:
tblcols <- expand.grid(1:ncol(FG_Smooth), 1:ncol(FMG_Smooth))
cfunc <- function(var1, var2) {
cor.test(FG_Smooth[,var1], FMG_Smooth[,var2], method="pearson")
}
res <- mapply(function(a,b) {
cfunc(var1 = a, var2 = b)
}, tblcols$Var1, tblcols$Var2)
head(res)
[,1] [,2] [,3] [,4] [,5] [,6] [,7]
statistic 1.324125 -0.1022017 2.422883 0.9131595 -0.3509424 1.734178 1.53494
parameter 3 3 3 3 3 3 3
p.value 0.2773076 0.9250449 0.09392613 0.4284906 0.74883 0.1812997 0.2223626
estimate 0.6073388 -0.05890371 0.8135079 0.4663678 -0.1985814 0.7075406 0.663238
null.value 0 0 0 0 0 0 0
alternative "two.sided" "two.sided" "two.sided" "two.sided" "two.sided" "two.sided" "two.sided"
[,8] [,9]
statistic -0.009291327 2.880821
parameter 3 3
p.value 0.99317 0.06348644
estimate -0.005364273 0.8570256
null.value 0 0
alternative "two.sided" "two.sided"
Это дает мне только 9 p-значений, а не матрицу p-значений, которая соответствует каждому значению корреляции, полученному с помощью команды cor
. В этом примере это будет матрица p-значений 5x5, поскольку команда cor
дает матрицу значений корреляции 5x5.
Есть ли разница? способ сделать это?