Нужно ли в R выбирать каждую непрерывную переменную вручную при запуске теста корреляции? - PullRequest
1 голос
/ 18 июня 2020

Допустим, у меня есть набор данных из 100 переменных, 70 непрерывных переменных и 30 категориальных переменных. Все переменные относятся к целому классу. Если я буду sh, чтобы запустить корреляцию Пирсона / Спирмена для непрерывных переменных, нужно ли мне вводить каждую из непрерывных переменных вручную? Или есть способ запускать их партиями. Спасибо

Ответы [ 2 ]

1 голос
/ 18 июня 2020

Я думаю, что если у вас есть logi c для логического разделения двух типов переменных, вы могли бы закодировать R для этого.

Давайте используем данные mtcars в качестве примера. Хотя все переменные mtcars равны numeri c, идея должна быть такой же. Давайте сначала преобразуем все переменные с менее чем 10 значениями в factor. Затем мы можем легко выбрать переменные is.numeric для вашего анализа.

df <- data.frame(lapply(mtcars, function(x) if(length(table(x)) < 10) 
                          as.factor(x) else x)) 

или

df <- data.frame(lapply(mtcars, function(x) 
                       if(length(levels(as.factor(x))) < 10) as.factor(x) else x))

Тогда,

my_numeric <- Filter(is.numeric, df)
cor(my_numeric)

            mpg       disp         hp        drat         wt        qsec
mpg   1.0000000 -0.8475514 -0.7761684  0.68117191 -0.8676594  0.41868403
disp -0.8475514  1.0000000  0.7909486 -0.71021393  0.8879799 -0.43369788
hp   -0.7761684  0.7909486  1.0000000 -0.44875912  0.6587479 -0.70822339
drat  0.6811719 -0.7102139 -0.4487591  1.00000000 -0.7124406  0.09120476
wt   -0.8676594  0.8879799  0.6587479 -0.71244065  1.0000000 -0.17471588
qsec  0.4186840 -0.4336979 -0.7082234  0.09120476 -0.1747159  1.00000000

Следующие переменные были исключены из приведенного выше анализа, так как они имеют менее 10 категорий:

my_factor <- Filter(is.factor, df)

head(my_factor)

  cyl vs am gear carb
1   6  0  1    4    4
2   6  0  1    4    4
3   4  1  1    4    1
4   6  1  0    3    1
5   8  0  0    3    2
6   6  1  0    3    1



0 голосов
/ 18 июня 2020

Ваши задачи кажутся двоякими: одна связана с подмножеством, а другая - с тем, как запускать корреляционные тесты для групп столбцов в одном go. Итак, этот ответ состоит из двух частей.

Часть 1 :

Применение логики c, упомянутой в моем комментарии, - это различие между непрерывным и категориальным переменные могут быть созданы, если предположить, что первые имеют гораздо больше, а вторые - гораздо меньше различных значений, и, следовательно, можно определить пороговое значение, чтобы различать guish их - вы могли бы поступить так:

Данные:

df <- data.frame(
  v1 = sample(1:2, 100, replace = T),
  v2 = sample(1:3, 100, replace = T),
  v3 = sample(1:30, 100, replace = T),
  v4 = sample(1:50, 100, replace = T),
  v5 = sample(1:40, 100, replace = T),
  v6 = sample(1:60, 100, replace = T)
)

Предполагая, что 10 является разумным пороговым значением, для подмножества фрейма данных в тех (предположительно непрерывных) столбцах, которые имеют более 10 unique значений, вы можете использовать sapply таким образом:

df_cont <- df[, sapply(df, function(x) length(unique(x)) > 10)]

Для проверки запустите head:

head(df_cont)
  v3 v4 v5 v6
1  8 40 40 22
2 29  1  6 22
3 19 39 37 18
4 16 37 24  5
5 13 32 16 22
6 27 25 18 11

Часть 2:

Сначала сделайте манекен фрейм данных со всеми возможными комбинациями столбцов, используя expand.grid:

combinations <- expand.grid(colnames(df), colnames(df))

Затем apply cor.test для всех комбинаций:

apply(combinations, 1, function(i){
  x <- df_cont[,i[[1]]]
  y <- df_cont[,i[[2]]]
  cor.test(x, y, method = "kendall")
})
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...