p-Wert in Boxplot einblenden

Wie erstelle ich Grafiken, was ist zu beachten?

Moderatoren: EDi, jogo

mokka
Beiträge: 29
Registriert: Fr Okt 19, 2018 2:46 pm

p-Wert in Boxplot einblenden

Beitrag von mokka »

Hallo liebe alle :)

Ich bin komplett neu in R. Mit matlab habe ich ein paar wenige Erfahrungen, aber würde nicht sagen, dass ich mich wirklich auskenne.

Ich versuche seit gestern zwei Boxplots gegenüber zu stellen (was mir gelungen ist) und würde gerne die p-Werte eines gepaarten T-Tests bei den Plots anzeigen lassen.

Hier hänge ich... ich habe es dann auch mit dem entsprechenden library und ggboxplot versucht, aber da schaffe ich nichtmal die gegenüberstellung von 2 Boxplots.

Mein Code sieht so aus:

Code: Alles auswählen

library(ggpubr)

data_test<- read.csv("C:/USER_MS/MS_Dokumente/Uni/Medizin/DA_MUW/patientdata.csv",sep=";",dec=",",header=TRUE)

boxplot(data_test$Median_ART_k,data_test$Median_ART_n,main="ART",xlab="Groups",ylab="Median",names=c("P","V"))
for(i in 1:11) lines(c(1,2),c(data_test$Median_ART_k[i],data_test$Median_ART_n[i]), col="red")
for(i in 1:11) points(c(1,2),c(data_test$Median_ART_k[i],data_test$Median_ART_n[i]), col="red")
p_ART<-t.test(data_test$Median_ART_k,data_test$Median_ART_n,paired=TRUE)
mein CSV-File sieht so aus, dass zb Median_ART_k eine Spalte ist mit 10 Einträgen und Median_ART_n auch eine Spalte mit 10 Einträgen. und ich will diese beiden als boxplot gegenüberstellen...

der code oben funktioniert, einen p-Wert bekomme ich heraus, lediglich das implementieren in die Grafik bereitet mir Kopfschmerzen...

ich habe es dann mit einem anderen library probiert (wie in https://www.r-bloggers.com/add-p-values ... o-ggplots/ angeleitet), aber da gelang mir eben nicht mal die gegenüberstellung..


KANN MIR JEMAND HELFEN? :oops:

Vielen Dank vorab für eure inputs!
bigben
Beiträge: 2771
Registriert: Mi Okt 12, 2016 9:09 am

Re: p-Wert in Boxplot einblenden

Beitrag von bigben »

KANN MIR JEMAND HELFEN
Hi,
wir brauchen nicht so viele Großbuchstaben, stattdessen Beispieldaten, am besten ein reproduzierbares Minimalbeispiel.

Zwei Tipps: Du solltest die Median_ART_k und Median_ART_n in einem Dataframe zusammenfassen und Du solltest Dich entscheiden, ob Du klassische R Grafiken oder ggplot2 Grafiken oder ggvis oder google-Grafiken oder ein anderes System verwenden möchtest. Das mischen der Systeme führt zu durcheinander.

Da Du die Funktion boxplot vorgegeben hast, die zum Standardgrafiksystem gehört, hier ein Beispiel innerhalb des Standardgrafiksystems:

Code: Alles auswählen

Median_ART_k <- runif(10,1,3.5)
Median_ART_n <- runif(20,1,5)

zusammen <- data.frame(werte = c( Median_ART_k,  Median_ART_n),
                       zuordnung = c(rep("k", length(Median_ART_k)),
                                     rep("n", length( Median_ART_n)
                                         )))
print(zusammen)  # jetzt sind die Daten gemeinsam im langen Format in einem Dataframe.

boxplot(werte ~ zuordnung, data=zusammen, ylim=c(0,6))
lines(c(1,2), c(5.5,5.5))
text(1.5, 5.9, "p = 0,99")
Mit den gleichen Beispieldaten in ggplot2 z. B.:

Code: Alles auswählen

library(ggplot2)
abbildung <- ggplot(zusammen) + 
  geom_boxplot(aes(x=zuordnung, y=werte)) + 
  xlab("Gruppe") + 
  ylab("Werte") +
  geom_text(aes(1.5, 5, label = "p = 0,99"))
print(abbildung)
LG,
Bernhard
---
Programmiere stets so, dass die Maxime Deines Programmierstils Grundlage allgemeiner Gesetzgebung sein könnte
mokka
Beiträge: 29
Registriert: Fr Okt 19, 2018 2:46 pm

Re: p-Wert in Boxplot einblenden

Beitrag von mokka »

Servus Benrhard!

Vielen Dank für deine Hilfe!

Ich wollte mein Beispiel so übersichtlich als möglich gestalten, weshalb ich nur 1 Variablen zu zwei Messzeitpunkten (n bzw. k) genannt habe.
De facto habe ich aber über 30 Variablen.

Ich würde gerne mit geom boxplot arbeiten - also möchte ich verstehen, wie ich diesen data.frame machen muss, tu mir damit aber noch schwer.
Nehmen wir ich habe die Variablen: a1,a2,a2,b2,a3,b3,a4,b4,... (wie vorher gesagt mit jeweils 10 werten) wobei ich in boxplots immer a1&b1 bzw. a2&b2 etc. miteinander vergleichen möchte... wie muss ich dann die "rep" zuordnung machen, bzw was macht das eigentlich?

ich denke, das komplizierteste ist es, meinen data.frame zu machen, sobald ich den habe, kann ich mit dem geom boxplot wahrscheinlich relativ einfach und schön arbeiten?

Liebe Grüße
Max
Athomas
Beiträge: 768
Registriert: Mo Feb 26, 2018 8:19 pm

Re: p-Wert in Boxplot einblenden

Beitrag von Athomas »

Den dataframe mit reshape(2) parat machen und dann mit ggplot2 vollenden.
Ach, wie gerne würde ich mitmachen - aber ich habe ja keine Daten :( !
Benutzeravatar
EDi
Beiträge: 1599
Registriert: Sa Okt 08, 2016 3:39 pm

Re: p-Wert in Boxplot einblenden

Beitrag von EDi »

reshape(2)
oder tidyr::gather() oder data.table::melt()
Bitte immer ein reproduzierbares Minimalbeispiel angeben. Meinungen gehören mir und geben nicht die meines Brötchengebers wieder.

Dieser Beitrag ist lizensiert unter einer CC BY 4.0 Lizenz
Bild.
mokka
Beiträge: 29
Registriert: Fr Okt 19, 2018 2:46 pm

Re: p-Wert in Boxplot einblenden

Beitrag von mokka »

Athomas hat geschrieben: Mo Okt 22, 2018 7:06 pm Den dataframe mit reshape(2) parat machen und dann mit ggplot2 vollenden.
Ach, wie gerne würde ich mitmachen - aber ich habe ja keine Daten :( !
hehe ok! ich habe jetzt einfach ein paar daten angehängt.

mein code beginnt mit:

Code: Alles auswählen

library(ggpubr)
data_test<- read.csv("C:/USER/beispieldaten.csv",sep=";",dec=",",header=TRUE)

...
danke euch allen :)
Dateianhänge
Beispieldaten.csv
(2.4 KiB) 67-mal heruntergeladen
mokka
Beiträge: 29
Registriert: Fr Okt 19, 2018 2:46 pm

Re: p-Wert in Boxplot einblenden

Beitrag von mokka »

(ich möchte jede Variable die auf "_k" endet mit der jeweilig passenden vergleichen, die auf "_n" endet ... falls das jetzt verwirrend war :roll:
jogo
Beiträge: 2085
Registriert: Fr Okt 07, 2016 8:25 am

Re: p-Wert in Boxplot einblenden

Beitrag von jogo »

Hallo mokka,

die Daten kann man auch einlesen mit

Code: Alles auswählen

read.csv2("http://forum.r-statistik.de/download/file.php?id=339")
mokka hat geschrieben: Di Okt 23, 2018 12:09 am (ich möchte jede Variable die auf "_k" endet mit der jeweilig passenden vergleichen, die auf "_n" endet ... falls das jetzt verwirrend war :roll:
Immer wenn ich sowas sehe, habe ich die Befürchtung, dass hier jemand eine der bösen Funktionen eingesetzt hat ...
Hast Du die Daten in R generiert und dann die CSV-Datei geschrieben?

Und mit Vergleich meinst Du sowas?

Code: Alles auswählen

Dat <- read.csv2("http://forum.r-statistik.de/download/file.php?id=339")
k <- length(Dat) ## Anzahl der Spalten
Jk <- seq(1, k, 2)
Jn <- seq(2, k, 2)
mapply(function(jk,jn) t.test(Dat[[jk]], Dat[[jn]]), Jk, Jn) ## oder so:
mapply(t.test, Dat[Jk], Dat[Jn])  
und noch eine Variante:

Code: Alles auswählen

Dat <- read.csv2("http://forum.r-statistik.de/download/file.php?id=339")
mapply(t.test, Dat[c(TRUE, FALSE)], Dat[c(FALSE, TRUE)])
Gruß, Jörg
Athomas
Beiträge: 768
Registriert: Mo Feb 26, 2018 8:19 pm

Re: p-Wert in Boxplot einblenden

Beitrag von Athomas »

ich möchte jede Variable die auf "_k" endet mit der jeweilig passenden vergleichen, die auf "_n" endet
Wenn Du jetzt noch sagst, wie Du Dir so einen "Vergleich" angesichts der wechselnden Größenordnungen vorstellst...
mokka
Beiträge: 29
Registriert: Fr Okt 19, 2018 2:46 pm

Re: p-Wert in Boxplot einblenden

Beitrag von mokka »

Guten Morgen und Dabke für eure schnelle Hilfe!

Ich lese Daten in Matlab ein, berechne dort diverses Zeug und speichere meine berechneten Werte dann in eine Excel Tabelle. Man kann sich das so vorstellen dass jede Variable (z.b. SD, HF, LF) unter 2 verschiedenen ‚laborbedingungen‘ gemessen wir (Zustand 1 ist k, Zustand 2 ist n).

Ich möchte jetzt im Endeffekt (glaube ich ^^) das Excel file einlesen (danke für den Tipp für das einlesen vom CSV file) und anschließend die Variablen in Boxplots gegenüberstellen. Das habe ich auch schon hinbekommen (werde ein Beispiel hochladen) - glaube aber das ich mit zb

Code: Alles auswählen

ggboxplot
schönere Plots bekomme und die hätte ich gerne für meine Arbeit :)

Ich hoffe meine Erklärung ist nachvollziehbar :-/
Antworten