Извлечение определенных парных корреляций из матрицы корреляции и добавление подходящего количества звездочек для соответствующего уровня значимости

Я создаю (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***"
Другие вопросы по тегам