Извлечение определенных парных корреляций из матрицы корреляции и добавление подходящего количества звездочек для соответствующего уровня значимости
Я создаю (apa) таблицу с конкретными корреляциями из большой матрицы, я также хочу добавить звездочку, если корреляция значительна. Я использовал пакет Hmisc, чтобы создать все возможные корреляции и соответствующие p-значения. Затем я использовал пакет MOTE, чтобы округлить корреляции и избавиться от ведущих нулей. Затем я изменил p-значения в звездочки. Я вытащил эти корреляции интересов и поместил их в новую матрицу. Допустим, я хочу создать только новую корреляционную матрицу (3 на 4), в которой "am", "gear" и "carb" определяют 3 строки, а "mpg", "cyl", "disp" и "hp" определяют 4 колонки.
library(Hmisc) # to get correlations and p-values
cormat = rcorr(as.matrix(mtcars))
cormat$r # to see the correlations
cormat$P # to see the p-values
cor.table = matrix(NA, nrow = 3, ncol = 4) # create empty matrix
library(MOTE) # to round and get rid of leading 0's
cor.table[1:3,1:4] = c(apa(cormat$r[9:11, c(1:4)],2,F)) # fill with correlations and get rid of leading zero's
pm = ifelse(cormat$P <= .001, "***",
ifelse(cormat$P <= .01, "**",
ifelse(cormat$P <= .05, "*", " "))) # create the appr. number of asterisks per cell
После этого я застрял. Теперь я хотел бы добавить соответствующее число звездочек в каждую ячейку (за значениями для корреляций), и, если возможно, выровнять все по вертикали. Точки для десятичного разряда вертикально друг над другом, может быть, это то, что мне нужно сделать в rmarkdown, но я еще не дошел до этого). Конечно, если есть более легкий или более элегантный способ сделать все это, я весь в ушах. Спасибо.
1 ответ
Нашел решение для наиболее важной части, извлекая конкретные попарные корреляции и добавляя подходящее число звездочек для их уровня значимости (пока нет решения для вертикального выравнивания значений в соответствии с десятичной запятой и уменьшения размеров звездочек):
library(Hmisc) # to get correlations and p-values
cormat = rcorr(as.matrix(mtcars))
cormat$r # to see all correlations
cormat$P # to see the p-values
cor.table = matrix(NA, nrow = 3, ncol = 4) # create empty matrix
library(MOTE) # to round and get rid of leading 0's
pm = ifelse(cormat$P <= .001, "***",
ifelse(cormat$P <= .01, "**",
ifelse(cormat$P <= .05, "*", " "))) # create the appr. number of asterisks per cell
cor.table = matrix(NA,
nrow = 3,
ncol = 4) # create empty matrix
cor.table[1:3,1:4] = paste(
apa(cormat$r[9:11, 1:4], 2,F),
pm[9:11, 1:4],
sep = ""
)
cor.table # to see resulting matrix
# [,1] [,2] [,3] [,4]
# [1,] ".60***" "-.52**" "-.59***" "-.24 "
# [2,] ".48**" "-.49**" "-.56***" "-.13 "
# [3,] "-.55**" ".53**" ".39*" ".75***"