Создание списка таблиц сопряженности из переменных в фрейме данных с использованием цикла for и оператора if? - PullRequest
0 голосов
/ 19 сентября 2018

Образец фрейма данных:

 WasAdmitted concldur ArrivalDayWdWe IMDQuintile log_depdur
           1      130        Weekend          Q1   5.480639
           1      177        Weekday          Q1   5.370638
           0      125        Weekday          Q2   4.828314
           1      102        Weekday          Q5   5.220356
           1      203        Weekday          Q4   5.402677
           0      168        Weekday          Q2   5.123964

sample <- structure(list(WasAdmitted = c(1L, 1L, 0L, 1L, 1L, 0L), concldur = c(130L, 
177L, 125L, 102L, 203L, 168L), ArrivalDayWdWe = structure(c(2L, 
1L, 1L, 1L, 1L, 1L), .Label = c("Weekday", "Weekend"), class = "factor"), 
    IMDQuintile = structure(c(1L, 1L, 2L, 5L, 4L, 2L), .Label = c("Q1", 
    "Q2", "Q3", "Q4", "Q5"), class = "factor"), log_depdur = c(5.48063892334199, 
    5.37063802812766, 4.8283137373023, 5.22035582507832, 5.40267738187228, 
    5.12396397940326)), class = "data.frame")

У меня есть WasAdmitted в качестве моей двоичной зависимой переменной, представляющей интерес.Я хотел бы составить список таблиц сопряженности WasAdmitted со всеми другими переменными в моем фрейме данных, которые являются тип-фактором, целым числом или символом, в списке результирующих таблиц сопряженности.Поэтому я исключаю числовые переменные.

Для начала я создал это:

for (i in sample){
if (typeof(i) %in% c("integer", "factor", "chr"))
  return(table(sample$i, sample$WasAdmitted))
}

Однако я не уверен, как действовать дальше.

1 Ответ

0 голосов
/ 19 сентября 2018

Вы можете использовать lapply для создания таблиц после получения только нечисловых столбцов.

inx <- sapply(sample, inherits, "numeric")
contg <- lapply(sample[!inx][-1], table, sample[!inx][[1]])

contg[1]
#$concldur
#     
#      0 1
#  102 0 1
#  125 1 0
#  130 0 1
#  168 1 0
#  177 0 1
#  203 0 1

РЕДАКТИРОВАТЬ.

Если вы хотите использоватьЭтот результат для вычисления чего-либо, вы можете *apply функция по вашему выбору для каждого из ее членов.

Например, для вычисления критерия хи-квадрат для каждой таблицы:

chiq_list <- lapply(contg, chisq.test)

Это то же самое, что запустить один chisq.test на каждом из 3 членов результата contg.

length(contg)
#[1] 3

chisq.test(contg [[1]])
chisq.test(contg [[2]])
chisq.test(contg [[3]])

Затем вы можете извлечь то, что вы хотите из списка результатов теста.

Вот как можно извлечь статистику теста.

sapply(chiq_list, '[[', 'statistic')
#      concldur.X-squared ArrivalDayWdWe.X-squared 
#            6.000000e+00             4.252453e-32 
#   IMDQuintile.X-squared 
#                     NaN

Или значения p.

sapply(chiq_list, '[[', 'p.value')
# concldur ArrivalDayWdWe    IMDQuintile 
#0.3062189      1.0000000            NaN
...