2016-04-17 3 views
0

Ich bin ganz neu in der Programmierung und R, sondern habe einen Datensatz, der nur mit einem leistungsfähigeren Statistikprogramm wie R.Wie schleift man einen Test gegen eine bestimmte Kontrollgruppe in R?

Ich habe ein großes, aber einfaches Daten-Set, bestehend aus Tausenden von verschiedenen Gruppen mit mehrer analysiert werden kann Beispiele, die ich gegen die Kontrollgruppe mit einem Mann Whitney U Test vergleichen möchte, Datenstruktur ist unten abgebildet.

Group, Measurements 
a  0.14534 
cont 0.42574 
d  0.36347 
c  0.14284 
a  0.23593 
d  0.36347 
cont 0.33514 
cont 0.29210 
b  0.36345 
... 

Das Problem kommt aus, dass die Art der Prüfung erfordert, dass nur zwei Gruppen bezeichnet werden. Da ich jedoch mehr als eine Gruppe habe, funktioniert das nicht.

Das ist was ich bis jetzt habe und ich sehe wie es funktioniert nicht in einer wiederholten Weise und funktioniert nur wenn ich zwei Gruppen in meiner Eingabedatei habe.

data1 = read.csv(file.choose(), header=TRUE, stringsAsFactors=FALSE) 
attach(data1) 
testoutput <- wilcox.test(group ~ measurement, mu=0, alt="two.sided", conf.int=TRUE, conf.level=0.95, paired=FALSE, exact=FALSE, correct=TRUE) 
write.table(testoutput$p.value, file="mwUtest.tsv", sep="\t") 

Wie schreibe ich den Test richtig und mache eine Schleife, um alle meine Gruppen gegen meine vorgesehene Kontrollgruppe zu testen? Ich nehme an, dass die sapply oder lapply Funktionen vor dem wilcox.test verwendet werden, aber ich weiß nicht wie.

Es tut mir leid, wenn diese einfache Frage schon einmal aufgeworfen wurde, aber ich konnte keine vorherige Frage zu diesem speziellen Problem finden.

+0

Sieht aus wie Sie ein Komma als Dezimal-seperator haben - wenn ja addieren 'sep =“, "' zu deiner 'read.csv'. Versuchen Sie 'pairwise.wilcox.test', wenn Sie paarweise Wilcoxon Tests wollen, oder kruskal.test –

+0

Ah Entschuldigung, ich habe gerade diese Zahlen auf dem Sprung erfunden und ich verwende normalerweise Dezimalzahlen als Trennzeichen, da ich ein dreckiger Euro bin, die Daten in Das Blatt ist korrekt formatiert und ich habe meinen Beitrag entsprechend bearbeitet. Trotzdem danke! –

+0

Ich verstehe Sie sind neu in R, aber das Wort des Rates von jemandem, der dort gewesen ist: Verwenden Sie nicht anhängen. Gewöhnen Sie sich nicht daran, es zu benutzen, weil es Ihre Umgebung durcheinander bringt und zu seltsamen Problemen/Fehlern führen kann, die schwer zu debuggen sind. – Heroka

Antwort

0

In R gibt es oft viele Lösungen für das gleiche Problem. Hier ist, wie ich das lösen würde.

Zunächst mag ich meine Daten geteilt und einen Datenrahmen mit Experimenten und einen mit Kontrollen habe:

experiments <- dat[dat$group!="cont",] 
controls <- dat[dat$group=="cont",] 

Dann würde ich meine experimentellen Daten von Gruppe geteilt und Futtermittel, die mit meinen Kontrollmessungen zu meinem Test zusammen . Beachten Sie, dass diese Konstruktion es einfacher macht, mehr Werte aus dem Test zu extrahieren: Geben Sie einfach einen (benannten) Vektor zurück.

result <- lapply(split(experiments, experiments$group),function(x){ 
    mytest = wilcox.test(x$measurement,controls$measurement,mu=0, alt="two.sided", conf.int=TRUE, conf.level=0.95, paired=FALSE, exact=FALSE, correct=TRUE) 
    return(mytest$p.value) 
}) 

an einem Tisch Kombination wird dann einfach:

output <- do.call(rbind,result) 

verwendet Daten:

set.seed(123) 
nobs=100 
dat <- data.frame(group=sample(c(LETTERS[1:6],"cont"),nobs,T), 
        measurement=runif(nobs),stringsAsFactors=F) 
+0

Vielen Dank für die nette Antwort! Ihre Lösung hat perfekt funktioniert, um mein Problem zu lösen und war genau das, wonach ich suchte. Obwohl ich einige Probleme hatte, es zu testen, da der Test keine leeren Einträge mochte, aber dieser war überraschend einfach zu reparieren, sogar für einen Neuling (für andere R Neulinge mit dem gleichen Problem war das wie http: // stackoverflow .com/questions/4862178/remove-rows-mit-nas-in-datenframe). –