R chisq.тест — автоматизация через df, каждая переменная с каждой, df содержит данные, а не подсчеты, широкая форма

#r #automation #chi-squared

Вопрос:

У меня есть фрейм данных, который выглядит так:

 gend domh nat le re lf rf ad ab imp 1 f R fr y y n y y y Y 2 f R fr n n y n n n N 3 f R fr y y Y 4 f R fr n n n n n n N 5 m L fr y n n y y y Y 6 m R fr y y y y y y Y 7 m R fr y y y y y y Y 8 f L fr y y n n n y N 9 f R fr n n n n n y N 10 m R fr y y y y y y Y 11 f R fr y y n n y y Y 12 m R pfr n N 13 f R pfr y y n n n y N 14 m R pfr y n n n y y N 15 f R pfr y n y n y y Y 16 f R pfr y n y y y y Y 17 m L pfr n n y y y y Y 18 m R pfr y y y y y y Y 19 m R pfr y n y y y y Y 20 f R pfr y y y y y y Y 21 f R pfr n N 22 f R pfr y y y y y y Y  

Я бы хотел, чтобы каждая переменная была «хи-квадрат» с каждой, то есть пол с domh, nat, le и т. Д., Затем domh с каждым из остальных и т. Д. и т. Д. Я знаю, как это сделать вручную:

 gt;chisq.test(df$gend, df$domh, simulate.p.value = T, B = 1000000)  

но просто должен быть способ автоматизировать это. Мне нужны только значения p (и имя пары) из тестов. Кто-нибудь может помочь, пожалуйста?

Ответ №1:

Функция colpair_map из corrr пакета, по-видимому, обеспечивает один из способов, так как вам нужно только значение p. (Зацикливание на столбцах, конечно, является очевидной альтернативой).

 # you first need a function that just returns p-value # to be used in colpair_map. The lt;htestgt; object returned # by chisq.test doesn't work with colpair_map chisq_pval lt;- function(...) {  chisq.test(...)$p.value }  # the chisq_pval function defined above can now be used directly # in colpair_map, along with the additional arguments for chisq.test corrr::colpair_map(df, chisq_pval, simulate.p.value = T, B = 1000000)  

Комментарии:

1. Большое спасибо за быстрый ответ, gpgdx! Ваше решение сработало идеально, и я тоже ценю комментарии и объяснения.