Paarweise t-Test berechnen

Allgemeine Statistik mit R, die Test-Methode ist noch nicht bekannt, ich habe noch keinen Plan!

Moderatoren: EDi, jogo

Antworten
mathrac

Paarweise t-Test berechnen

Beitrag von mathrac »

Guten Abend ihr Lieben,

ich habe folgende Daten gegeben:
  • Gruppe Werte
    1 20
    1 12
    1 18
    1 14
    1 16
    1 21
    1 17
    1 13
    1 18
    1 21
    2 13
    2 12
    2 15
    2 17
    2 16
    2 17
    3 9
    3 10
    3 15
    3 8
    3 8
    3 11
    3 13
    3 14
Meine Aufgabe ist jetzt: "Berechnen Sie zunächst alle paarweisen t-Tests." Da habe ich jetzt ein Problem. Ich habe "paarweisen t-Tests" so aufgefasst, dass ich zwischen jedem paar der Gruppen 1 bis 3 (1= Med+Pt, 2=Med+A?,3=Med) einen einfachen Zweistichproben t-Test mache:

Code: Alles auswählen

# Werte von Med+PT:
mp = subset(data,data$Gruppe=="1")
mp = mp[,2]

# Werte von Med+AP:
ma = subset(data,data$Gruppe=="2")
ma = ma[,2]

# Werte von Med:
med = subset(data,data$Gruppe=="3")
med = med[,2]

# Med+PT und Med+AP:
t1 = t.test(mp,ma);

# Med und Med+PT:
t2 = t.test(mp,med);

# Med und Med+AP:
t3 = t.test(ma,med);
das hat soweit auch funktioniert. Jetzt ist es aber so, dass ich im Moment ziemlich über das Wort "paarweise" nachdenke. Denn das könnte ja auch  Gepaarter t­-Test bedeuten. Aber da habe ich dann das Problem, dass die Vektoren unterschiedlich lang sind. Wie kann man das denn sonst noch machen? Hat da zufällig jemand eine Idee, oder ist das so schon passend? Ich brauch das, um dann von Hand multiple Vergleiche nach Bonferroni durchzuführen.

Vielen Dank schon mal und liebe Grüße.
jogo
Beiträge: 2085
Registriert: Fr Okt 07, 2016 8:25 am

Re: Paarweise t-Test berechnen

Beitrag von jogo »

Hallo mathrac,

Du hast soweit schon alles richtig gemacht - nur, dass es eine wesentlich elegantere Umsetzung gibt.
Es gibt einige spezielle Funktionen für die bivariate Analyse: pairwise~() und biplot() (das Suchen-Feld im Hilfefenster von RStudio kennt die Autovervollständigung, so dass die Funktionen pairwise~() schnell gefunden sind)

Code: Alles auswählen

data <- read.table(header=TRUE, text=
"Gruppe Werte
1 20
1 12
1 18
1 14
1 16
1 21
1 17
1 13
1 18
1 21
2 13
2 12
2 15
2 17
2 16
2 17
3 9
3 10
3 15
3 8
3 8
3 11
3 13
3 14")
pairwise.t.test(data$Werte, data$Gruppe)
Es können keine verbundenen Stichproben sein, weil die Anzahl je Gruppe unterschiedlich ist:

Code: Alles auswählen

table(data$Gruppe)
Die Funktion pairwise.t.test() hat auch einen Parameter zur Festlegung der zu verwendenden Korrektur.

Gruß, Jörg
mathrac

Re: Paarweise t-Test berechnen

Beitrag von mathrac »

Hallo Jörg,

ja das stimmt, die Anzahl der Daten sind unterschiedlich, weshalb ich die Aufgabe nicht wirklich verstehe. Also wir sollen dann in der den Teilaufgaben auch pairwise.t.test() durchführen, aber dass ist ja dann gar nicht möglich.

Also ich poste jetzt hier mal die komplette Aufgabe:
Screenshot (76).png
Dazu habe ich folgende Schmerz.txt bekommen:
  • 1 1 20
    2 1 12
    3 1 18
    4 1 14
    5 1 16
    6 1 21
    7 1 17
    8 1 13
    9 1 18
    10 1 21
    11 2 13
    12 2 12
    13 2 15
    14 2 17
    15 2 16
    16 2 17
    17 3 9
    18 3 10
    19 3 15
    20 3 8
    21 3 8
    22 3 11
    23 3 13
    24 3 14
dabei bin ich davon ausgegangen, dass die erste Spalte nur eine Nummerierung ist, also kann ich diese dann weg lassen. Die zweite Spalte ist die Gruppierung und die Dritte dann die Werte.

Jetzt ist halt noch meine Frage, wie kann ich diese "paarweise t-Tests" machen, wenn die Daten nicht verbunden sind. Deshalb habe ich den längeren Weg probiert.

Vielleicht hilft es, wenn ich die vorherige Aufgabe noch poste:
Screenshot (78).png
Diese habe ich gut hin bekommen, weshalb ich das mit R gar nicht verstehe.

Liebe Grüße.
jogo
Beiträge: 2085
Registriert: Fr Okt 07, 2016 8:25 am

Re: Paarweise t-Test berechnen

Beitrag von jogo »

Hallo mathrac,
mathrac hat geschrieben: Mi Mai 30, 2018 9:13 am ja das stimmt, die Anzahl der Daten sind unterschiedlich, weshalb ich die Aufgabe nicht wirklich verstehe. Also wir sollen dann in der den Teilaufgaben auch pairwise.t.test() durchführen, aber dass ist ja dann gar nicht möglich.
Du verwechsels da etwas. pairwise bedeutet Vergleich von zwei Gruppen (ein Paar von Gruppen). Bitte nicht verwechseln mit t.test(..., paired = TRUE) - dies sind gepaarte (=verbundene) Beobachtungen; das klingt ähnlich aber bedeutet etwas völlig Anderes (üblich bei vorher-nachher-Vergleichen).

Gruß, Jörg
mathrac

Re: Paarweise t-Test berechnen

Beitrag von mathrac »

Hallo Jörg,

danke für die Aufmerksamkeit. Ja das stimmt, aber wenn ich das jetzt mal für die Gruppe Med und MP probiere, bekomme ich folgende Warnmeldung:

Code: Alles auswählen

 pairwise.t.test(med,mp)
Error in tapply(x, g, mean, na.rm = TRUE) : 
  Argumente müssen dieselbe Länge haben
Das ist das was mich verwirrt. Weil ich kann ja die Gruppen nicht einfach verlängern, wenn ich die Test's untereinander machen möcht.

Liebe Grüße.
bigben
Beiträge: 2771
Registriert: Mi Okt 12, 2016 9:09 am

Re: Paarweise t-Test berechnen

Beitrag von bigben »

Hallo mathrac,

da wir nicht wissen, was bei Dir med und mp sind, kann man da vorrangig raten. Die Syntaxregeln der Funktion pairwise.t.test sieht vor, dass med die Messergebnisse und mp die Gruppenzugehörigkeit sind. Natürlich muss genau jeder Messwert genau einer Gruppe zugeordnet sein und beide also gleich lang. Das bedeutet nicht, dass jede Gruppe gleich oft vorkommen müsste.

LG,
Bernhard
---
Programmiere stets so, dass die Maxime Deines Programmierstils Grundlage allgemeiner Gesetzgebung sein könnte
jogo
Beiträge: 2085
Registriert: Fr Okt 07, 2016 8:25 am

Re: Paarweise t-Test berechnen

Beitrag von jogo »

Hallo mathrac,
mathrac hat geschrieben: Mi Mai 30, 2018 9:42 am

Code: Alles auswählen

 pairwise.t.test(med,mp)
Error in tapply(x, g, mean, na.rm = TRUE) : 
  Argumente müssen dieselbe Länge haben
Das ist das was mich verwirrt. Weil ich kann ja die Gruppen nicht einfach verlängern, wenn ich die Test's untereinander machen möcht.
das entspricht nicht dem Aufruf der Funktion pairwise.t.test() - bei dieser ist das zweite Argument der Vektor mit der Gruppenzuordnung - und natürlich muss zu jeder Beobachtung die Gruppe feststellbar sein, weshalb die beiden Vektoren (erstes und zweites Argument von pairwise.t.test()) gleich lang sein müssen.
Wahrscheinlich wolltest Du t.test(med, mp) durchführen - aber das hast Du ja schon vorher erledigt. Wenn Du dafür pairwise.t.test() verwenden möchtest, sähe das so aus:

Code: Alles auswählen

with(subset(data, Gruppe!=2), pairwise.t.test(Werte, Gruppe))
nochmal zur Funktion t.test(), bei der standardmäßig paired = FALSE gesetzt ist:

Code: Alles auswählen

t.test(med, mp) # sollte funktionieren, identisch mit t.test(med, mp, paired=FALSE)
t.test(med, mp, paired=TRUE) # sollte einen Fehler liefern
Gruß, Jörg
mathrac

Re: Paarweise t-Test berechnen

Beitrag von mathrac »

Hallo Bernhard,
da wir nicht wissen, was bei Dir med und mp sind, kann man da vorrangig raten.
bei mir ist med = Med, also der Gruppe 3 zugehörig und mp = Med+PT, also der Gruppe 1 angehörig. Jetzt will ich das in pairwise.t.test einsetzten. Achso okay.

Dann habe ich das mal mit pairwise.t.test(data$Werte,data$Gruppe) gemacht und bekomme folgendes heraus:

Code: Alles auswählen

Pairwise comparisons using t tests with pooled SD 

data:  data$Werte and data$Gruppe 

  1            2      
2 0.55611 -      
3 0.00063 0.04814

P value adjustment method: bonferroni
Also so müsste das dann vom Prinzip passen oder?
Jetzt komme ich aber zu meinem Hauptproblem zurück:

Wenn ich diese Methode jetzt nicht verwenden möchte, sondern die multiple Vergleiche nach Bonferroni mit hand bestimmen, brauche ich ja die p-Werte der t-tests der Gruppen untereinander also so:

Code: Alles auswählen

# Werte von Med+PT:
mp = subset(data,data$Gruppe=="1")
mp = mp[,2]

# Werte von Med+AP:
ma = subset(data,data$Gruppe=="2")
ma = ma[,2]

# Werte von Med:
med = subset(data,data$Gruppe=="3")
med = med[,2]

# Med+PT und Med+AP:
t1 = t.test(mp,ma);

# Med und Med+PT:
t2 = t.test(mp,med);

# Med und Med+AP:
t3 = t.test(ma,med);
das habe ich nun gemacht und frage mich, ob ich das so verwenden darf oder ob ich durch die Aufgabenstellung "Berechnen Sie
zunächst alle paarweisen t-Tests." eingeschränkt bin?

Vielen Dank schon mal für deine Hilfe!

Liebe Grüße.
Zuletzt geändert von bigben am Mi Mai 30, 2018 1:09 pm, insgesamt 1-mal geändert.
Grund: code-Tag korrigiert um Tabellendarstellung zu erreichen
mathrac

Re: Paarweise t-Test berechnen

Beitrag von mathrac »

Nachtrag:

Hallo Jörg,

verzeih mir bitte. Ich habe das erst jetzt gelesen.
Also passt dass dann so.
Zusammengefasst kann ich dann sagen, dass wenn ich das per Hand bestimmen will, einfach die p-Werte der t-test, die ich zuvor wie oben beschrieben habe, bestimme und damit dann weiterrechne. Die Alternative wäre es mit der Funktion pairwise.t.test() zu machen, bei der ich aber nicht alle einzelne Gruppe miteinander vergleiche, sondern der Funktion die Aufgabe überlasse meine Werte mit den Gruppen zu vergleichen. Dabei ist dann bei beiden Fällen egal, ob es verbundene Daten sind. Bzw. bei der Funktion pairwise.t.test() bestimmt das die Funktion selbst.

Liebe Grüße.
bigben
Beiträge: 2771
Registriert: Mi Okt 12, 2016 9:09 am

Re: Paarweise t-Test berechnen

Beitrag von bigben »

mathrac hat geschrieben: Mi Mai 30, 2018 12:12 pmAlso passt dass dann so.
Ja
Dabei ist dann bei beiden Fällen egal, ob es verbundene Daten sind. Bzw. bei der Funktion pairwise.t.test() bestimmt das die Funktion selbst.
Nein :!: Eine Funktion kann nicht entscheiden, ob Daten verbundene Daten sind, das kann nur der Mensch, der über den Entstehungsprozess der Daten informiert ist. pairwise.t.test kann sowohl verbundene als auch unverbundene Stichproben bearbeiten. Das musst Du dann aber schon selbst entscheiden. Voreingestellt sind unverbundene Stichproben. Infos darüber, wie man was anderes einstellt:

Code: Alles auswählen

help(pairwise.t.test)
LG,
Bernhard
---
Programmiere stets so, dass die Maxime Deines Programmierstils Grundlage allgemeiner Gesetzgebung sein könnte
Antworten