2017-10-01 4 views
1

Ich möchte Chi-Quadrat zum Testen von Datensätzen verwenden. Wie man es macht, Schleife für oder sapply verwendend. Chi-Quadrat über Spalten automatisieren

Dies ist eine Reihe von Beispieldaten:

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)) 

Ich mag würde, alle Variablen testen v1.x mit Variable m1 genannt. Das ist alles.

Ich möchte eine solche Situtation zu vermeiden:

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)) 

Ich fand this topic, aber für mich und für jetzt ist es zu schwierig.

+0

Werfen Sie einen Blick auf diese [Frage] (https://stackoverflow.com/q/7382039/707145). – MYaseen208

Antwort

3

Sie können einfach lapply verwenden, um die Variablen zu durchlaufen.

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

Dies gibt eine benannte Liste, mit der changin Variable als Name jedes Listenelement.

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

Zugriff Dann wird jeder mit myTests[[1]] oder myTests[["v1.1"]]. Diese Rückkehr

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

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

Dann ziehen Sie Komponenten aus den einzelnen Tests verwenden names(myTests[[1]] und str(myTests[[1]]), um den Inhalt zu untersuchen. myTests[[1]]$p.value z. B. zieht den p.value aus dem ersten Test und unlist(sapply(myTests, "[", "p.value")) wird einen benannten Vektor mit p-Werten aus allen Tests zurückgeben.