Автоматизировать хи-квадрат по столбцам

Я хотел бы использовать хи-квадрат для тестирования набора данных. Как это сделать, используя loop for или sapply.

Это набор образцов данных:

n<-40
set.seed(1)
data <- data.frame(v1.1=sample(c('0','1'),n,replace=T),v1.2=sample(c('0','1'),n,replace=T),v1.3=sample(c('0','1'),n,replace=T),v1.4=sample(c('0','1'),n,replace=T),v1.5=sample(c('0','1'),n,replace=T),m1=sample(c('1','2'),n,replace=T))

Я хотел бы проверить все переменные с именем v1.x с переменной m1. Это все.

Я хочу избежать такой ситуации:

chisq.test(table(data$v1.1,data$m1))
chisq.test(table(data$v1.2,data$m1))
chisq.test(table(data$v1.3,data$m1))
chisq.test(table(data$v1.4,data$m1))
chisq.test(table(data$v1.5,data$m1))

Я нашел эту тему, но для меня и сейчас это слишком сложно .


person Maciej B.    schedule 01.10.2017    source источник
comment
Взгляните на этот вопрос.   -  person MYaseen208    schedule 01.10.2017


Ответы (1)


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

myTests <- lapply(data[-length(data)], function(x) chisq.test(table(x, data$m1)))

Это возвращает именованный список с переменной changin в качестве имени каждого элемента списка.

names(myTests)
[1] "v1.1" "v1.2" "v1.3" "v1.4" "v1.5"

Затем обращайтесь к каждому с помощью myTests[[1]] или myTests[["v1.1"]]. Эти возвращаются

    Pearson's Chi-squared test with Yates' continuity correction

data:  table(x, data$m1)
X-squared = 0, df = 1, p-value = 1

Затем, чтобы извлечь компоненты из отдельных тестов, используйте names(myTests[[1]] и str(myTests[[1]]) для проверки содержимого. myTests[[1]]$p.value, например, извлечет значение p из первого теста, а unlist(sapply(myTests, "[", "p.value")) вернет именованный вектор со значениями p из всех тестов.

person lmo    schedule 01.10.2017