Fehlermeldung bei pairwise.t.test

Alles zum Thema der beschreibenden Statistik

Moderator: jogo

FortuneCookie

Fehlermeldung bei pairwise.t.test

Beitrag von FortuneCookie »

Liebe Alle,

Schreibe gerade an einem Experimentalbericht und verstehe diese Fehlermeldung einfach nicht :(

Ich habe eine numeric Variable und trenne die Stufen nach einer character Variable. Das war noch für die Funktion ezANOVA kein Problem. Es gibt laut der ANOVA mit Messwiederholung wohl signifikante Unterschiede. Also teste ich weiter mit pairwise.t.test, um die signifikante Stufe zu entdecken.

> pairwise.t.test(farbig$evs, farbig$item, p.adj = "bonferroni", paired = T)
Error in complete.cases(x, y) : nicht alle Argumente haben gleiche Länge

Was sagt mir die Fehlermeldung? Wie korrigiere ich es? Wie entdecke ich sonst die signifikante Stufe? Doof wie ich bin hab ich natürlich wieder bis kurz vor Abgabetermin gewartet :/

VG Markus
jogo
Beiträge: 2085
Registriert: Fr Okt 07, 2016 8:25 am

Re: Fehlermeldung bei pairwise.t.test

Beitrag von jogo »

Hallo Markus,

willkommen im Forum!
FortuneCookie hat geschrieben: Di Sep 26, 2017 1:03 pm

Code: Alles auswählen

> pairwise.t.test(farbig$evs, farbig$item, p.adj = "bonferroni", paired = T)
Error in complete.cases(x, y) : nicht alle Argumente haben gleiche Länge
Bitte zeig doch mal den Output von

Code: Alles auswählen

str(farbig)
summary(farbig)
Doof wie ich bin hab ich natürlich wieder bis kurz vor Abgabetermin gewartet :/
viewtopic.php?f=20&t=46

Gruß, Jörg
FortuneCookie

Re: Fehlermeldung bei pairwise.t.test

Beitrag von FortuneCookie »

Hey jogo,

Vielen lieben Dank für deine Antwort mit Raketengeschwindigkeit! Was sagt denn die erwähnte Fehlermeldung genau? Ich verstehe es nicht. Hier der erbetene Output:
1.png
jogo
Beiträge: 2085
Registriert: Fr Okt 07, 2016 8:25 am

Re: Fehlermeldung bei pairwise.t.test

Beitrag von jogo »

Hallo Markus,

verzichte doch mal auf das paired=TRUE (ich kann mir nur schwer vorstellen, dass ein Elefant mit einem Schmetterling identisch sein kann)

Code: Alles auswählen

pairwise.t.test(farbig$evs, farbig$item, p.adj = "bonferroni")
Was sagt denn die erwähnte Fehlermeldung genau? Ich verstehe es nicht.
Eigentlich sagt die Fehlermeldung genau das, was dort geschrieben steht:
also dass z.B. die Anzahl der Elefanten nicht mit der Anzahl der Schmetterlinge übereinstimmt.

Code: Alles auswählen

set.seed(42)
farbig <- data.frame(evs=runif(100), item=rep(c("Ele", "Krok", "Schmett", "Mops"), each=25), stringsAsFactors = FALSE)
pairwise.t.test(farbig$evs, farbig$item, p.adj = "bonferroni", paired = TRUE)
pairwise.t.test(farbig$evs, farbig$item, p.adj = "bonferroni")

farbig <- data.frame(evs=runif(100), item=rep(c("Ele", "Krok", "Schmett", "Mops"), c(23,24,26,27)), stringsAsFactors = FALSE)
pairwise.t.test(farbig$evs, farbig$item, p.adj = "bonferroni", paired = TRUE)
pairwise.t.test(farbig$evs, farbig$item, p.adj = "bonferroni")
Gruß, Jörg
p.s.:
Du kannst dann in den anderen Foren, wo Du diese Frage auch noch gestellt hast, auf die Antworten hier verweisen ;)
bigben
Beiträge: 2771
Registriert: Mi Okt 12, 2016 9:09 am

Re: Fehlermeldung bei pairwise.t.test

Beitrag von bigben »

In gepaarten/verbundenen Stichproben sind von jeder Tierart genau gleichviele enthalten. Die Zahl der Fälle ist 379 und das ist eine Primzahl! Verbundene Stichproben kommen also gar nicht in Frage.

@jogo: Seit wann schreibst Du "paired = T" anstelle von "paired = TRUE" :?: Erwischen wir Dich demnächst bei einem attach()?

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: Fehlermeldung bei pairwise.t.test

Beitrag von jogo »

bigben hat geschrieben: Di Sep 26, 2017 4:52 pm In gepaarten/verbundenen Stichproben sind von jeder Tierart genau gleichviele enthalten. Die Zahl der Fälle ist 379 und das ist eine Primzahl! Verbundene Stichproben kommen also gar nicht in Frage.
und selbst gleiche Anzahl ist noch lange nicht ausreichend für paired:
die Sachlogik muss auch stimmen (es müssen in der gleichen Reihenfolge identische Merkmalsträger sein).
@jogo: Seit wann schreibst Du "paired = T" anstelle von "paired = TRUE" :?: Erwischen wir Dich demnächst bei einem a...ch()?
Ich war das nicht: der Teil stammte von Markus; der Rest war einfache Copypaste.
Aber natürlich hast Du Recht: wir wollen hier nicht so schlampigen Code als Vorbild hinstellen. Ich habe meine Nachricht inzwischen editiert.
... und nein, es ist nicht absehbar, dass sich meine Einstellung zu der bösen Funktion ändert.

Gruß, Jörg
FortuneCookie

Re: Fehlermeldung bei pairwise.t.test

Beitrag von FortuneCookie »

Verdammt, ihr seid echt gut :D Das mit der Primzahl haut mich aus den Socken, Du hast mich wahrhaftig verblüfft! Ich werde dem mal nachgehen und versuchen festzustellen, warum die Items nicht gleich oft angewandt wurden. Vielen vielen lieben Dank für den generierten Code!

paired = TRUE hab ich benutzt, weil es die gleichen Probanden sind, die sowohl Elefanten als auch Schmetterlinge betrachtet haben. EVS (Eye-Voice-Span) ist also messwiederholt und mein "R für Einsteiger" sagte mir das wäre das richtige Argument.

Ich dachte ich lasse den maximal effizienten Naturwissenschaftler heraushängen und hab TRUE abgekürzt, da es so grundsätzlich angenommen wird. Ist das schlampig?
jogo
Beiträge: 2085
Registriert: Fr Okt 07, 2016 8:25 am

Re: Fehlermeldung bei pairwise.t.test

Beitrag von jogo »

FortuneCookie hat geschrieben: Di Sep 26, 2017 7:42 pmpaired = TRUE hab ich benutzt, weil es die gleichen Probanden sind, die sowohl Elefanten als auch Schmetterlinge betrachtet haben. EVS (Eye-Voice-Span) ist also messwiederholt und mein "R für Einsteiger" sagte mir das wäre das richtige Argument.
von der Idee her stimmt die Sachlogik und paired=TRUE wäre richtig.
Nur Deine Daten passen nicht recht zu den Messwiederholungen.
Ich dachte ich lasse den maximal effizienten Naturwissenschaftler heraushängen und hab TRUE abgekürzt, da es so grundsätzlich angenommen wird. Ist das schlampig?
Ja, das ist schlampig ... und kann gefährlich werden, denn ein Objekt mit dem Namen T kann man selbst definieren, z.B.:

Code: Alles auswählen

T <- 0
FALSE==T   ### oho, diese beiden Sachen sind gleich
Im Gegensatz dazu kann man TRUE nicht als Objektnamen verwenden:

Code: Alles auswählen

TRUE <- 0  ### Fehlermeldung!
Gruß, Jörg
FortuneCookie

Re: Fehlermeldung bei pairwise.t.test

Beitrag von FortuneCookie »

Leider muss ich nochmal deine Hilfe anfordern. Ich hänge hier wieder seit Stunden und komme nicht voran. Schäme mich auch dich darum zu bitten meine Arbeit zu machen :(

Mein Dozent, sein Praktikant, oder sein Algorithmus hat bei der Erzeugung des EVS wohl einzelne Daten entfernt, nach welcher Regel weiß ich nicht. Mit der Funktion table(farbig$sid) habe ich die Probanden identifiziert, für die keine vollständigen Daten vorliegen. Muss ich die nun wirklich händisch entfernen? Im Grunde möchte ich einen Datensatz erzeugen mit der Variablenausprägung sid == (Häufigkeit der spezifischen Variablenausprägung == 25). Kann R sowas? Oder werde ich jetzt händisch alle Zeilen entfernen?

EDIT: Hab es inzwischen händisch entfernt, fände es aber für die Zukunft interessant, ob und wie es sonst automatisiert zu lösen ist.
1.png
jogo
Beiträge: 2085
Registriert: Fr Okt 07, 2016 8:25 am

Re: Fehlermeldung bei pairwise.t.test

Beitrag von jogo »

ja, das kann man automatisieren, z.B. so:

Code: Alles auswählen

farbig$N.sid <- ave(!is.na(farbig$sid), farbig$sid, FUN=sum)
farbig[farbig$N.sid==25L,]
aber auch Dein Ansatz lässt sich entsprechend ausbauen:

Code: Alles auswählen

names(which(table(farbig$sid))!=25) # sind das die vp.. mit unvollständigen Daten?
farbig.reduziert <- farbig[!(farbig$sid %in% names(which(table(farbig$sid))!=25)),]
Gruß, Jörg
Antworten