Ihre Beispieldaten reichen nicht aus, um tatsächlich T-Tests für alle Untergruppen durchzuführen. Aus diesem Grund nehme ich den iris
Datensatz, der 3 Pflanzenarten enthält: Setosa, Versicolor und Virginica. Dies sind meine Gruppen. Sie müssen Ihren Code entsprechend anpassen. Im Folgenden zeige ich, wie man eine Gruppe im Vergleich zu allen anderen Gruppen, eine Gruppe gegen jede andere Gruppe und alle Kombinationen einzelner Gruppen testet.
Eine Gruppe im Vergleich zu allen anderen Gruppen kombiniert:
Zuerst lassen Sie uns sagen, ich will versicolor und Virginica zu Setosa vergleichen, das heißt Setosa ist mein group 1
zu dem alle anderen Gruppen verglichen werden sollte. Eine einfache Möglichkeit, zu erreichen, was Sie wollen, ist die folgende:
sapply(names(iris)[-ncol(iris)], function(x){
t.test(iris[iris$Species=="setosa", x],
iris[iris$Species!="setosa", x])$p.value
})
Sepal.Length Sepal.Width Petal.Length Petal.Width
7.709331e-32 1.035396e-13 1.746188e-69 1.347804e-60
Hier habe ich die Namen der verschiedenen Variablen im Datensatz names(iris)
geliefert - exlcuding die Spalte angibt, die Gruppenvariable [-ncol(iris)]
(da es sich um die letzte Spalte) - als Vektor zu sapply
, der die entsprechenden Namen als Argumente an die Funktion übergibt, die ich definiert habe.
Eine Gruppe im Vergleich zu allen anderen Gruppen:
Falls Sie groupwise Vergleiche für alle Gruppen machen wollen, können die folgenden hilfreich sein: Erstellen Sie zunächst ein Datenrahmen von allen Gruppen x variable Kombinationen, die Sie werden, abgesehen von der Gruppierungsvariablen selbst und der Referenzgruppe, natürlich. Dies kann erreicht werden durch:
comps <- expand.grid(unique(iris$Species)[-1], # excluding Setosa as reference group
names(iris)[-ncol(iris)] # excluding group column
)
head(comps)
Var1 Var2
1 versicolor Sepal.Length
2 virginica Sepal.Length
3 versicolor Sepal.Width
4 virginica Sepal.Width
5 versicolor Petal.Length
6 virginica Petal.Length
Hier sind Var1
die verschiedenen Arten und Var2
die verschiedenen Variablen, für die Vergleiche durchgeführt werden. Die Referenz group 1
oder Setosa ist in diesem Fall implizit. Jetzt kann ich apply
verwenden, um die Tests zu erstellen. Ich tue dies, indem ich jede Zeile von comps
als Argument mit zwei Elementen verwende, von denen das erste angibt, um welche Gruppe es sich handelt, und das zweite Argument gibt an, welche Variable verglichen werden soll. Diese werden verwendet, um den ursprünglichen Datenrahmen zu unterteilen.
wo Gruppe 1 aka Setosa in der Funktion fest codiert ist. Das gibt mir einen Datenrahmen mit p-Werte für alle Kombinationen (mit Setosa als Referenzgruppe), so dass sie leicht zu sehen:
head(comps)
Var1 Var2 pval
1 versicolor Sepal.Length 3.746743e-17
2 virginica Sepal.Length 3.966867e-25
3 versicolor Sepal.Width 2.484228e-15
4 virginica Sepal.Width 4.570771e-09
5 versicolor Petal.Length 9.934433e-46
6 virginica Petal.Length 9.269628e-50
Alle Kombinationen von Gruppen:
Sie können die erweitern oben leicht einen Datenrahmen zu erzeugen, der p-Werte von t-Tests für jede Kombination von Gruppen enthält. Ein Ansatz wäre:
comps <- expand.grid(unique(iris$Species), unique(iris$Species), names(iris)[-ncol(iris)])
Dies hat jetzt drei Spalten. Die ersten beiden sind die Gruppen und die dritte die Variable:
head(comps)
Var1 Var2 Var3
1 setosa setosa Sepal.Length
2 versicolor setosa Sepal.Length
3 virginica setosa Sepal.Length
4 setosa versicolor Sepal.Length
5 versicolor versicolor Sepal.Length
6 virginica versicolor Sepal.Length
Sie können diese verwenden, um die Tests durchzuführen:
comps$pval <- apply(comps, 1, function(x) {
t.test(iris[iris$Species==x[1], x[3]], iris[iris$Species==x[2], x[3]])$p.value
})
ich eine Fehlermeldung: Was soll ich tun?
t.test
kann eine Fehlermeldung ausgeben, wenn die Stichprobengröße zu klein ist oder die Werte für eine Gruppe konstant sind. Dies ist problematisch, da es möglicherweise nur für bestimmte Gruppen auftritt und Sie möglicherweise nicht im Voraus wissen, welche es ist. Der Fehler wird jedoch den gesamten Funktionsaufruf an apply
stören, und Sie werden keine Ergebnisse sehen.
Eine Möglichkeit, dies zu umgehen und die problematischen Gruppen zu identifizieren, ist das Umbrechen der Funktion t.test
um dplyr::failwith
(siehe auch ?tryCatch
). Um zu zeigen, wie dies funktioniert, sollten Sie Folgendes berücksichtigen:
smalln <- data.frame(a=1, b=2)
t.test(smalln$a, smalln$b)
> Error in t.test.default(smalln$a, smalln$b) : not enough 'x' observations
failproof.t <- failwith(default="Some default of your liking", t.test, quiet = T)
failproof.t(smalln$a, smalln$b)
[1] "Some default of your liking"
Auf diese Weise, wenn t.test
einen Fehler werfen würde, Sie ein Zeichen als Ergebnis erhalten statt und die Berechnung weiter mit anderen Gruppen. Natürlich können Sie auch default
auf eine Nummer oder irgendetwas anderes setzen. Es muss kein Charakter sein.
Statistische Haftungsausschluss: Nach all dem, beachten Sie, dass die Durchführung einer Reihe von t-Tests ist nicht unbedingt eine gute statistische Praxis. Vielleicht möchten Sie Ihre p-Werte anpassen, um mehrere Tests zu berücksichtigen, oder Sie möchten alternative Testverfahren verwenden, die gemeinsame Tests durchführen.
Sie sollten Beispieldaten enthalten Ihr Problem [reproduzierbaren] (http://stackoverflow.com/questions/5963269/how-to-make-a-great-r-reproducible-example machen) und es leichter machen, dir zu helfen. – MrFlick