Signifikanzen in ggplot2

Wie erstelle ich Grafiken, was ist zu beachten?

Moderatoren: EDi, jogo

willi

Signifikanzen in ggplot2

Beitrag von willi »

Moin allerseits,

ich habe mit ggplot2 nun geometrische Boxplots erstellt, würde nun gerne noch signifikanzen hinzufügen. Die Daten sind an Legehennen erhoben worden. Die Boxplots zeigen die jeweiligen Leistungen der Tiere einer Familie. Es stehen also alle Boxxplots der jeweiligen Familie neben einander und ich würde gerne wissen ob es signifikante Unterschiede zwischen den Famiilien gibt.

Ich habe folgendes versucht:

Code: Alles auswählen

ggplot(Fluegel_type, aes(Vater, Maximale.Kraft)+ stat_compare_means(, label = "p.signif", method = "aov",ref.group = "0.5"))+ geom_boxplot() + xlab("Vater") + ylab("MaximaleK raft in N")
bekomme aber folgenden Fehler:

Code: Alles auswählen

Error in aes(Vater, Maximale.Kraft) + stat_compare_means(, label = "p.signif",  : 
  non-numeric argument to binary operator
Der Parameter vater ist zwar als Character gespeichert, aber die interessante Variabe ist ja die maximale Kraft und die ist numeric.

Habt ihr eine Lösiung?

Vielen Dank
Zuletzt geändert von jogo am Mo Jul 09, 2018 2:14 pm, insgesamt 1-mal geändert.
Grund: Formatierung verbessert.
jogo
Beiträge: 2085
Registriert: Fr Okt 07, 2016 8:25 am

Re: Signifikanzen in ggplot2

Beitrag von jogo »

Hallo Willi,

das Komma direkt nach der öffnenden Klammer ist bestimmt ein Schreibfehler.
Wenn dies der einzige Fehler ist, sollte folgendes funktionieren:

Code: Alles auswählen

ggplot(Fluegel_type, aes(Vater, Maximale.Kraft) + 
  stat_compare_means(label = "p.signif", method = "aov",ref.group = "0.5")) + 
  geom_boxplot() + xlab("Vater") + ylab("MaximaleK raft in N")
Gruß, Jörg
p.s.:
Über Formatierung der Nachrichten liest Du hier: viewtopic.php?f=20&t=29
willi

Re: Signifikanzen in ggplot2

Beitrag von willi »

Hallo Jörg,

danke für deine Antwort. Leider klappt es noch nicht. Bekomme immer noch den selben Fehler. Woran könnte das liegen?
jogo
Beiträge: 2085
Registriert: Fr Okt 07, 2016 8:25 am

Re: Signifikanzen in ggplot2

Beitrag von jogo »

Hallo Willi,

ohne Information zu den Daten wird es dann wohl nicht gehen.
Bitte ein reproduzierbares Beispiel (so wie beschrieben in viewtopic.php?f=20&t=11 )
oder wenigstens den Output von:

Code: Alles auswählen

str(Fluegel_type)
Gruß, Jörg
willi

Re: Signifikanzen in ggplot2

Beitrag von willi »

Hallo Jörg,

Code: Alles auswählen

Vater	Abteil	Gewicht..g.	Länge..cm.	olumen..ml.	Auftrieb	Kraft.bei.Bruch	Maximale.Kraft
29025	2	4,66	73,45	4,5	?	206,34	307,65
29025	2	3,89	73,86	4	?	188,17	234,3
29025	2	4,95	78,73	6	?	202,75	271,49
29025	3	5,65	77,63	5	?	250,84	334,4
29025	4	4,05	73,52	4,5	?	237,36	295,83
29025	5	4,99	75,7	5	?	159,88	267,87
29025	5	5,81	73,94	5	?	413,82	435,96
29025	6	4,82	79,11	5	?	217,36	293,87
29025	6	5,4	74,63	4,5	?	300,79	340,8
29025	6	4,11	73,66	4	?	166,93	243,76
29046	1	4,96	73,73	5	?	298,06	298,06
29046	1	7,25	74,67	5,5	?	488,46	488,46
29046	2	4,6	74,74	4,5	?	210,67	293,66
29046	3	4,05	73,06	4	?	218,11	256,99
29046	3	4,66	75,85	5	?	151,28	260,42
29046	4	4,82	72,57	4	?	224,44	275,07
29046	5	5,26	74,13	5	?	318,76	344,26
das ist ein Ausschnitt aus der Fluegel_type Datei. Hierwürde ich gerne zu den "Vätern" die Boxplots erstellen. Das klappt schonmal. Wenn ich nun den Befehl stat_compare_means anfüge kommt die oben erwähne Fehlermeldung.

Hier der mein Verusch:
[ggplot(Fluegel_type, aes(Vater, Maximale.Kraft)) + geom_boxplot() + stat_compare_means())]

PS: Ich würde den corde erne so angeben wie du es tust, habe aber noch nicht verstanden wie das mit den [code.]-Tags funktioniert.. sorry
jogo
Beiträge: 2085
Registriert: Fr Okt 07, 2016 8:25 am

Re: Signifikanzen in ggplot2

Beitrag von jogo »

Hallo Willi,
willi hat geschrieben: Di Jul 10, 2018 11:10 am

Code: Alles auswählen

Vater	Abteil	Gewicht..g.	Länge..cm.	olumen..ml.	Auftrieb	Kraft.bei.Bruch	Maximale.Kraft
29025	2	4,66	73,45	4,5	?	206,34	307,65
29025	2	3,89	73,86	4	?	188,17	234,3
...
29025	6	5,4	74,63	4,5	?	300,79	340,8
29046	4	4,82	72,57	4	?	224,44	275,07
29046	5	5,26	74,13	5	?	318,76	344,26
das ist ein Ausschnitt aus der Fluegel_type Datei. Hierwürde ich gerne zu den "Vätern" die Boxplots erstellen. Das klappt schonmal. Wenn ich nun den Befehl stat_compare_means anfüge kommt die oben erwähne Fehlermeldung.
Eventuell hast Du beim Einlesen vergessen, dec="," anzugeben :!:
BTW: ich würde andere Spaltennamen setzen - aber das ist Geschmackssache.

Code: Alles auswählen

names(Fluegel_type) <- c("Vater", "Abteil", "Gewicht", "Laenge", "Volumen", "Auftrieb", "Bruchkraft", "maxKraft")
PS: Ich würde den Code gerne so angeben wie du es tust, habe aber noch nicht verstanden, wie das mit den [code.]-Tags funktioniert.. sorry
einfach den Abschnitt markieren und dann auf den Knopf </> (oberhalb des Editierfensters) klicken.

Gruß, Jörg
willi

Re: Signifikanzen in ggplot2

Beitrag von willi »

Ja die Namen sind recht umständlich. Aber das ist erstmal Nebensache für mich. Eingelesen habe ich die csv-Datei per

Code: Alles auswählen

 read.csv2
Würde daher erstmal davon ausgehen dass das richtig ist.

Wenn ich folgendes ausführe bekomme ich auch ein Ergebnis:

Code: Alles auswählen

compare_means(Maximale.Kraft~Type, data = Fluegel_type)
Hast du noch eine andere Idee?
jogo
Beiträge: 2085
Registriert: Fr Okt 07, 2016 8:25 am

Re: Signifikanzen in ggplot2

Beitrag von jogo »

willi hat geschrieben: Di Jul 10, 2018 12:28 pm Ja die Namen sind recht umständlich. Aber das ist erstmal Nebensache für mich. Eingelesen habe ich die csv-Datei per

Code: Alles auswählen

 read.csv2
Würde daher erstmal davon ausgehen dass das richtig ist.
Mich machten die verschiedenen Anzahlen von Nachkommastellen in der Anzeige stutzig; das passiert normalerweise nicht:

Code: Alles auswählen

data.frame(x=c(1.1, 2.11, 3, 4.05))
Außerdem zeigt R immer Dezimalpunkte an.
Wenn ich folgendes ausführe bekomme ich auch ein Ergebnis:

Code: Alles auswählen

compare_means(Maximale.Kraft~Type, data = Fluegel_type)
Hast du noch eine andere Idee?
Mich wundert eher, dass Du in diesem Fall irgendwelche Ergebnisse bekommst :shock:
Eventuell gibt es irgendwelche Typumwandlungen ...
Jetzt muss ich doch darauf bestehen, dass Du das Ergebnis von

Code: Alles auswählen

str(Fluegel_type)
zeigst.
(Für richtige Daten bräuchte ich das Ergebnis von z.B. dput(head(Fluegel_type)) )

:?: Aus welchem Paket stammt die Funktion compare_means() :?: https://cran.r-project.org/web/packages ... ggpubr.pdf

Gruß, Jörg
willi

Re: Signifikanzen in ggplot2

Beitrag von willi »

Also das Ergebnis von

Code: Alles auswählen

str(Fluegel_type)

Code: Alles auswählen

'data.frame':	343 obs. of  19 variables:
 $ Nacken                      : Factor w/ 340 levels "n22524","n22525",..: 190 191 228 294 231 229 295 227 230 296 ...
 $ Vater                       : int  29025 29025 29025 29025 29025 29025 29025 29025 29025 29025 ...
 $ Abteil                      : int  2 2 2 3 4 5 5 6 6 6 ...
 $ Gewicht..g.                 : num  4.66 3.89 4.95 5.65 4.05 4.99 5.81 4.82 5.4 4.11 ...
 $ Länge..cm.                  : num  73.5 73.9 78.7 77.6 73.5 ...
 $ olumen..ml.                 : num  4.5 4 6 5 4.5 5 5 5 4.5 4 ...
 $ Auftrieb                    : Factor w/ 2 levels "","?": 2 2 2 2 2 2 2 2 2 2 ...
 $ Kraft.bei.Bruch             : num  206 188 203 251 237 ...
 $ Maximale.Kraft              : num  308 234 271 334 296 ...
 $ Biegeerformung.bei.Bruch    : num  3 2.67 4 5 3 2.33 3.33 2.67 3.67 3.33 ...
 $ Biegeerformung.bei.max.Kraft: num  1.66 1.66 2.33 3.33 2.33 1.66 3 1.66 2.67 2.33 ...
 $ Biegespannung.bei.Bruch     : num  88.9 85.4 83 84.3 102.2 ...
 $ Biegespannung.bei.max.Kraft : num  132 106 111 112 127 ...
 $ Durchmesser                 : num  5.8 5.7 5.9 6.3 5.8 5.8 6 6 6.2 5.7 ...
 $ HGG                         : Factor w/ 20 levels "H1","H10","H2",..: 13 13 13 13 13 13 13 13 13 13 ...
 $ Schlupf                     : Factor w/ 3 levels "s1","s2","s3": 1 1 2 3 2 2 3 2 2 3 ...
 $ Mutter                      : Factor w/ 100 levels "m22024","m22025",..: 86 72 62 86 72 62 86 80 70 92 ...
 $ Dichte                      : num  1.04 0.97 0.83 1.13 0.9 1 1.16 0.96 1.2 1.03 ...
 $ Type                        : Factor w/ 2 levels "H","L": 2 2 2 2 2 2 2 2 2 2 ...
Den Tabellenausschnitt vorher habe ich aus der csv-Datei entnommen, daher wohl die Dezimalstellen und die Kommata.

compare_means() stammt aus ggpubr

Code: Alles auswählen

 dput(head(Fluegel_type))
structure(list(Nacken = structure(c(190L, 191L, 228L, 294L, 231L, 
229L), .Label = c("n22524", "n22525", "n22530", "n22533", "n22568", 
"n22569", "n22570", "n22575", "n22576", "n22583", "n22587", "n22594", 
"n22598", "n22601", "n22603", "n22609", "n22612", "n22614", "n22616", 
"n22618", "n22623", "n22639", "n22641", "n22648", "n22655", "n22656", 
"n22668", "n22681", "n22684", "n22685", "n22692", "n22699", "n22702", 
"n22706", "n22707", "n22719", "n22721", "n22723", "n22724", "n22725", 
"n22732", "n22734", "n22739", "n22743", "n22744", "n22750", "n22752", 
"n22753", "n22755", "n22758", "n22766", "n22767", "n22772", "n22773", 
"n22776", "n22781", "n22782", "n22790", "n22792", "n22805", "n22810", 
"n22811", "n22812", "n22814", "n22823", "n22824", "n22825", "n22828", 
"n22831", "n22842", "n22846", "n22849", "n22852", "n22853", "n22855", 
"n22859", "n22860", "n22862", "n22865", "n22866", "n22869", "n22871", 
"n22872", "n22874", "n22890", "n22891", "n22896", "n22897", "n22900", 
"n22902", "n22905", "n22907", "n22908", "n22910", "n22917", "n22920", 
"n22924", "n22926", "n22931", "n22934", "n22935", "n22937", "n22940", 
"n22944", "n22950", "n22953", "n22957", "n22958", "n22962", "n22963", 
"n22964", "n22965", "n22971", "n22975", "n22980", "n22987", "n22991", 
"n22995", "n22997", "n22999", "n23016", "n23020", "n23028", "n23029", 
"n23037", "n23048", "n23050", "n23052", "n23057", "n23058", "n23060", 
"n23061", "n23064", "n23076", "n23078", "n23079", "n23084", "n23087", 
"n23097", "n23099", "n23107", "n23108", "n23110", "n23118", "n23120", 
"n23121", "n23125", "n23127", "n23129", "n23131", "n23132", "n23135", 
"n23138", "n23139", "n23140", "n23146", "n23149", "n23152", "n23153", 
"n23159", "n23164", "n23166", "n23173", "n23177", "n23179", "n23182", 
"n23185", "n23186", "n23188", "n23200", "n23202", "n23205", "n23206", 
"n23212", "n23215", "n23216", "n23217", "n23225", "n23227", "n23229", 
"n23244", "n26102", "n26103", "n26109", "n26114", "n26116", "n29508", 
"n29510", "n29516", "n29519", "n29523", "n29525", "n29527", "n29534", 
"n29535", "n29538", "n29539", "n29542", "n29543", "n29548", "n29550", 
"n29552", "n29553", "n29555", "n29556", "n29558", "n29559", "n29562", 
"n29564", "n29571", "n29572", "n29579", "n29581", "n29583", "n29588", 
"n29590", "n29594", "n29597", "n29600", "n29604", "n29606", "n29611", 
"n29625", "n29626", "n29632", "n29633", "n29638", "n29645", "n29647", 
"n29649", "n29653", "n29659", "n29662", "n29665", "n29672", "n29674", 
"n29676", "n29682", "n29683", "n29689", "n29691", "n29692", "n29695", 
"n29701", "n29704", "n29706", "n29710", "n29719", "n29720", "n29722", 
"n29724", "n29725", "n29726", "n29727", "n29734", "n29735", "n29736", 
"n29741", "n29743", "n29744", "n29746", "n29748", "n29750", "n29752", 
"n29755", "n29756", "n29758", "n29764", "n29765", "n29766", "n29767", 
"n29774", "n29775", "n29781", "n29783", "n29789", "n29791", "n29792", 
"n29793", "n29795", "n29796", "n29797", "n29803", "n29805", "n29810", 
"n29815", "n29824", "n29825", "n29831", "n29836", "n29838", "n29843", 
"n29844", "n29851", "n29854", "n29856", "n29858", "n29868", "n29870", 
"n29872", "n29881", "n29887", "n29897", "n29903", "n29905", "n29906", 
"n29908", "n29910", "n29911", "n29912", "n29917", "n29922", "n29923", 
"n29929", "n29933", "n29935", "n29936", "n29939", "n29940", "n29945", 
"n29951", "n29954", "n29957", "n29960", "n29962", "n29966", "n29970", 
"n29973", "n29976", "n29978", "n29982", "n29983", "n29987", "n29988", 
"n29989", "n29990", "n29994", "n29995", "n29997", "n29999"), class = "factor"), 
    Vater = c(29025L, 29025L, 29025L, 29025L, 29025L, 29025L), 
    Abteil = c(2L, 2L, 2L, 3L, 4L, 5L), Gewicht..g. = c(4.66, 
    3.89, 4.95, 5.65, 4.05, 4.99), Länge..cm. = c(73.45, 73.86, 
    78.73, 77.63, 73.52, 75.7), olumen..ml. = c(4.5, 4, 6, 5, 
    4.5, 5), Auftrieb = structure(c(2L, 2L, 2L, 2L, 2L, 2L), .Label = c("", 
    "?"), class = "factor"), Kraft.bei.Bruch = c(206.34, 188.17, 
    202.75, 250.84, 237.36, 159.88), Maximale.Kraft = c(307.65, 
    234.3, 271.49, 334.4, 295.83, 267.87), Biegeerformung.bei.Bruch = c(3, 
    2.67, 4, 5, 3, 2.33), Biegeerformung.bei.max.Kraft = c(1.66, 
    1.66, 2.33, 3.33, 2.33, 1.66), Biegespannung.bei.Bruch = c(88.87, 
    85.39, 82.96, 84.3, 102.23, 68.86), Biegespannung.bei.max.Kraft = c(132.5, 
    106.32, 111.08, 112.38, 127.41, 115.37), Durchmesser = c(5.8, 
    5.7, 5.9, 6.3, 5.8, 5.8), HGG = structure(c(13L, 13L, 13L, 
    13L, 13L, 13L), .Label = c("H1", "H10", "H2", "H3", "H4", 
    "H5", "H6", "H7", "H8", "H9", "L1", "L10", "L2", "L3", "L4", 
    "L5", "L6", "L7", "L8", "L9"), class = "factor"), Schlupf = structure(c(1L, 
    1L, 2L, 3L, 2L, 2L), .Label = c("s1", "s2", "s3"), class = "factor"), 
    Mutter = structure(c(86L, 72L, 62L, 86L, 72L, 62L), .Label = c("m22024", 
    "m22025", "m22038", "m22051", "m22052", "m22059", "m22064", 
    "m22072", "m22076", "m22093", "m22096", "m22106", "m22116", 
    "m22122", "m22125", "m22127", "m22132", "m22134", "m22141", 
    "m22148", "m22154", "m22156", "m22157", "m22162", "m22165", 
    "m22187", "m22202", "m22206", "m22226", "m22230", "m22234", 
    "m22236", "m22237", "m22256", "m22268", "m22272", "m22273", 
    "m22274", "m22282", "m22284", "m22306", "m22310", "m22314", 
    "m22329", "m22332", "m22333", "m22335", "m22337", "m22345", 
    "m22348", "m22351", "m22357", "m22363", "m29001", "m29003", 
    "m29021", "m29024", "m29030", "m29044", "m29049", "m29090", 
    "m29094", "m29101", "m29115", "m29148", "m29150", "m29168", 
    "m29171", "m29180", "m29182", "m29198", "m29199", "m29202", 
    "m29206", "m29213", "m29232", "m29240", "m29244", "m29256", 
    "m29274", "m29295", "m29300", "m29302", "m29309", "m29311", 
    "m29321", "m29323", "m29324", "m29349", "m29352", "m29367", 
    "m29404", "m29406", "m29410", "m29424", "m29435", "m29447", 
    "m29477", "m29486", "m29504"), class = "factor"), Dichte = c(1.04, 
    0.97, 0.83, 1.13, 0.9, 1), Type = structure(c(2L, 2L, 2L, 
    2L, 2L, 2L), .Label = c("H", "L"), class = "factor")), .Names = c("Nacken", 
"Vater", "Abteil", "Gewicht..g.", "Länge..cm.", "olumen..ml.", 
"Auftrieb", "Kraft.bei.Bruch", "Maximale.Kraft", "Biegeerformung.bei.Bruch", 
"Biegeerformung.bei.max.Kraft", "Biegespannung.bei.Bruch", "Biegespannung.bei.max.Kraft", 
"Durchmesser", "HGG", "Schlupf", "Mutter", "Dichte", "Type"), row.names = c(NA, 
6L), class = "data.frame")
Das wäre der andere Befehl. Vielen Dank für deine Mühe.

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

Re: Signifikanzen in ggplot2

Beitrag von jogo »

willi hat geschrieben: Di Jul 10, 2018 1:56 pm Also das Ergebnis von

Code: Alles auswählen

str(Fluegel_type)
...
Das sieht alles gut aus.
Den Tabellenausschnitt vorher habe ich aus der csv-Datei entnommen, daher wohl die Dezimalstellen und die Kommata.
Das erklärt mein Stutzen.
compare_means() stammt aus ggpubr
o.k., habe ich richtig rausgefunden. Das Paket ist aktuell in der Version 0.1.7 :?

Code: Alles auswählen

 dput(head(Fluegel_type))
structure(list(Nacken = structure(c(190L, 191L, 228L, 294L, 231L, 
229L), .Label = c("n22524", "n22525", "n22530", "n22533", "n22568", ...
Das wäre der andere Befehl. Vielen Dank für deine Mühe.
prima, damit kann ich Daten zum Experimentieren konstruieren
... und bekomme prompt einen Fehler:

Code: Alles auswählen

> ###
> compare_means(Maximale.Kraft~Type, data = Fluegel_type)
Fehler: `group1`, `p` must resolve to integer column positions, not NULL
hm, ob das Paket wohl noch in den Kinderschuhen steckt? Mir scheint es fast so, denn auch hier gibt es den Fehler:

Code: Alles auswählen

> compare_means(MaxKraft ~ Type, data = data.frame(MaxKraft=Fluegel_type$Maximale.Kraft, Type=as.integer(Fluegel_type$Type)))
Fehler: `group1`, `p` must resolve to integer column positions, not NULL
aov() will auch nicht:

Code: Alles auswählen

> aov(Maximale.Kraft ~ Type, data=Fluegel_type)
Fehler in `contrasts<-`(`*tmp*`, value = contr.funs[1 + isOF[nn]]) : 
  Kontraste können nur auf Faktoren mit 2 oder mehr Stufen angewendet werden
... hier gibt es aber wenigstens den Hinweis darauf gibt, dass der Faktor $Type nur zwei Levels hat; zur Not kann man auch einen einfachen t-Test nehmen:

Code: Alles auswählen

> t.test(Maximale.Kraft ~ Type, data=Fluegel_type)
Fehler in t.test.formula(Maximale.Kraft ~ Type, data = Fluegel_type) : 
  Gruppierender Faktor muss genau zwei Stufen haben
wir kommen der Sache näher:
der Faktor $Type nur theoretisch zwei Levels hat, in dieser Teilmenge der Daten kommt aber nur einer der beiden Werte vor:

Code: Alles auswählen

> summary(Fluegel_type$Type)
H L 
0 6 
jepp

Gruß, Jörg
Antworten