R выполнить множественный тест хи-квадрат для фрейма данных на основе значения столбца

У меня есть фрейм данных с номерами счетчиков, и я хочу выполнить chisq.test для каждого значения переменной Cluster. Итак, в основном мне нужно 4 таблицы непредвиденных обстоятельств (для A, B, C, D), где строки = категория, столбцы = наркотик, значение = общее количество. И впоследствии следует выполнить chisq.test для всех 4 таблиц.

Пример фрейма данных

df <- data.frame(Cluster = c(rep("A",8),rep("B",8),rep("C",8),rep("D",8)),
                 Category = rep(c(rep("0-1",2),rep("2-4",2),rep("5-12",2),rep(">12",2)),2),
                 Drug = rep(c("drug X","drug Y"),16),
                 Total = as.numeric(sample(20:200,32,replace=TRUE)))

person Joep_S    schedule 25.06.2020    source источник


Ответы (1)


Во-первых, используйте xtabs() для создания стратифицированных таблиц непредвиденных обстоятельств.

tab <- xtabs(Total ~ Category + Drug + Cluster, df)
tab

# , , Cluster = A
# 
#         Drug
# Category drug X drug Y
#     >12      92     75
#     0-1      33    146
#     2-4     193     95
#     5-12     76    195
# 
# etc.

Затем используйте apply() для проведения критерия хи-квадрат Пирсона для каждой страты.

apply(tab, 3, chisq.test)

# $A
# 
#   Pearson's Chi-squared test
# 
# data:  array(newX[, i], d.call, dn.call)
# X-squared = 145.98, df = 3, p-value < 2.2e-16
#
# etc.

Кроме того, вы можете выполнить критерий хи-квадрата Кокрана-Мантеля-Хензеля для условной независимости.

mantelhaen.test(tab)

#   Cochran-Mantel-Haenszel test
# 
# data:  tab
# Cochran-Mantel-Haenszel M^2 = 59.587, df = 3, p-value = 7.204e-13
person Darren Tsai    schedule 25.06.2020
comment
Большое спасибо! Я ожидал чего-то немного более сложного, но все равно сам бы к такому решению не пришел. - person Joep_S; 25.06.2020