Density ausgeben

Alles zum Thema der beschreibenden Statistik

Moderator: jogo

Antworten
Isegrim
Beiträge: 13
Registriert: Di Feb 02, 2021 11:18 pm

Density ausgeben

Beitrag von Isegrim »

Ich habe (aus eurer Sicht bestimmt) ein sehr triviales Problem. Habe einen Datensatz bei dem ich irgendwie nicht die Dichte ausgeben kann, da density die Daten nicht als numerisch erkennt. Wie kann ich das als numerisch bestimmen? Sind einfach Werte mit zwei Nachkommastellen. Hat das was mit dem Komma als Trennzeichen zu tun? Wie kann ich das bereits beim einlesen berücksichtigen?

Danke für eure Hilfe...
Dateianhänge
Experiment II Ausgangsverteilung.csv
(2.66 KiB) 140-mal heruntergeladen
Athomas
Beiträge: 769
Registriert: Mo Feb 26, 2018 8:19 pm

Re: Density ausgeben

Beitrag von Athomas »

Isegrim
Beiträge: 13
Registriert: Di Feb 02, 2021 11:18 pm

Re: Density ausgeben

Beitrag von Isegrim »

.
Zuletzt geändert von Isegrim am Mi Apr 20, 2022 3:40 pm, insgesamt 1-mal geändert.
Isegrim
Beiträge: 13
Registriert: Di Feb 02, 2021 11:18 pm

Re: Density ausgeben

Beitrag von Isegrim »

Athomas hat geschrieben: Mi Apr 20, 2022 2:53 pm https://lmgtfy.app/?q=r+read+comma+separator
Aber ich nutze das Komma ja nicht als Separator. Da stehen in der ersten Spalte halt 365 Zahlen (jeweils in einer Zelle nur eine Zahl) mit zwei Nachkommastellen. Die werden nur nicht als numerisch erkannt.
Athomas
Beiträge: 769
Registriert: Mo Feb 26, 2018 8:19 pm

Re: Density ausgeben

Beitrag von Athomas »

Sorry, in der Abfrage stand mal "decimal" - und nicht "separator".
Da ist mir wohl eine Alternative vorgeschlagen worden, die ich leichtsinnigerweise akzeptiert habe :D !
bigben
Beiträge: 2777
Registriert: Mi Okt 12, 2016 9:09 am

Re: Density ausgeben

Beitrag von bigben »

Im einfachsten Fall vielleicht so?

Code: Alles auswählen

daten <- scan("http://forum.r-statistik.de/download/file.php?id=1714",
              dec = ",")
plot(density(daten), main="")
scan liest einzelne Spalten als Vector ein. Wenn Du ggplot2 verwenden möchtest, dann brauchst Du die Daten als data.frame. Dann lieber gleich mit read.table einlesen:

Code: Alles auswählen

daten <- read.table("http://forum.r-statistik.de/download/file.php?id=1714",
              dec = ",", header = FALSE)
library(ggplot2)
ggplot(daten, aes(x = V1)) +
  geom_density()
LG,
Bernhard
---
Programmiere stets so, dass die Maxime Deines Programmierstils Grundlage allgemeiner Gesetzgebung sein könnte
Isegrim
Beiträge: 13
Registriert: Di Feb 02, 2021 11:18 pm

Re: Density ausgeben

Beitrag von Isegrim »

bigben hat geschrieben: Mi Apr 20, 2022 4:13 pm Im einfachsten Fall vielleicht so?

Code: Alles auswählen

daten <- scan("http://forum.r-statistik.de/download/file.php?id=1714",
              dec = ",")
plot(density(daten), main="")
scan liest einzelne Spalten als Vector ein. Wenn Du ggplot2 verwenden möchtest, dann brauchst Du die Daten als data.frame. Dann lieber gleich mit read.table einlesen:

Code: Alles auswählen

daten <- read.table("http://forum.r-statistik.de/download/file.php?id=1714",
              dec = ",", header = FALSE)
library(ggplot2)
ggplot(daten, aes(x = V1)) +
  geom_density()
LG,
Bernhard
Perfekt, danke für die Hilfe
Isegrim
Beiträge: 13
Registriert: Di Feb 02, 2021 11:18 pm

Re: Density ausgeben

Beitrag von Isegrim »

Kurze Nachfrage noch, wie könnte ich das ganze erweitern, wenn die Daten (die die Dichtefunktion bilden sollen) in Zeilen und Spalten (auch organisatorischen Gründen) verteilt sind? Eine Dichte soll aber mit ggplot2 über alles zusammen bestimmt werden.
Dateianhänge
Beispiel 1.csv
(567.53 KiB) 98-mal heruntergeladen
bigben
Beiträge: 2777
Registriert: Mi Okt 12, 2016 9:09 am

Re: Density ausgeben

Beitrag von bigben »

Hallo Isegrim,

wenn man das einliest mit

Code: Alles auswählen

bsp <-read.table("http://forum.r-statistik.de/download/file.php?id=1715", 
                 dec = ",", sep = ";")
wird es von R verstanden als data.frame mit 213 Variablen und je 365 Beobachtungen pro Variable. Wenn ich Dich richtig verstehe, ist diese Anordnung aber nicht logisch sinnvoll, sondern nur praktisch beim Erheben gewesen und in Wirklichkeit ist das alles eine Variable, d. h. die Spalten sollen zu einer großen Spalte zusammengeführt werden.

Wenn Du so etwas sehr kontrolliert und nicht mit allen Spalten machen willst, dann funktioniert das sehr gut mit stack:

Code: Alles auswählen

bsp <-read.table("http://forum.r-statistik.de/download/file.php?id=1715", 
                 dec = ",", sep = ";")

dreiSpalten <- stack(bsp, select = c("V1", "V2", "V3"))
head(dreiSpalten, 10)
plot(density(dreiSpalten$values))
Wenn man, wie Du hier, nicht alle Spalten einzeln aufführen will, dann kann man select = TRUE setzen:

Code: Alles auswählen

bsp <-read.table("http://forum.r-statistik.de/download/file.php?id=1715", 
                 dec = ",", sep = ";")

dreiSpalten <- stack(bsp, select = TRUE)
plot(density(dreiSpalten$values))
Ein anderer Weg, das mit wirklich allen Spalten zu machen, wäre die Funktion unlist. Das beruht darauf, dass ein data.frame eine Liste von Spalten ist und diese Liste kann man mit unlist auflösen:

Code: Alles auswählen

bsp <-read.table("http://forum.r-statistik.de/download/file.php?id=1715", 
                 dec = ",", sep = ";")

plot(density(unlist(bsp)))
HTH,
Bernhard


PS: Hast Du Dein Problem mit dem Darstellen mehrerer Dichtekurven in einem Plot lösen können? Auch das ließe sich schön mit stack lösen, wenn Du beispielsweise die Dichteverteilungen der ersten, zweiten und dritten Spalte vergleichen wolltest:

Code: Alles auswählen

bsp <-read.table("http://forum.r-statistik.de/download/file.php?id=1715", 
                 dec = ",", sep = ";")

dreiSpalten <- stack(bsp, select = c("V1", "V2", "V3"))
library(ggplot2)
ggplot(dreiSpalten) +
  geom_density(aes(x = values, color = ind))
---
Programmiere stets so, dass die Maxime Deines Programmierstils Grundlage allgemeiner Gesetzgebung sein könnte
Antworten