Histogramm aus Matrix erstellen

Wie erweitere ich R um eigene Funktionen oder Pakete? Welches Paket ist passend für meine Fragestellung?

Moderatoren: EDi, jogo

Antworten
A346
Beiträge: 22
Registriert: Di Okt 20, 2020 11:04 am

Histogramm aus Matrix erstellen

Beitrag von A346 »

Hallo zusammen,

ich habe folgende Matrix:
Matrix.PNG
Betrachten wir nur die erste Zeile:

Ich möchte ein Histogramm erstellen, welches mir auf der x-Achse die Werte 1 - 5 anzeigt und auf der y-Achse die Häufigkeit 117, 107,67,68,65.

Gibt es einen Trick, sodass das mit dem hist() Befehl klappt?

Viele Grüße
A346
jogo
Beiträge: 2086
Registriert: Fr Okt 07, 2016 8:25 am

Re: Histogramm aus Matrix erstellen

Beitrag von jogo »

Hallo A346,


hier ein erster Ansatz:

Code: Alles auswählen

x <- matrix(rep(c(117, 107,67,68,65), 3), 3, byrow=TRUE)

barplot(x[1,], names.arg = 1:5)
Gruß, Jörg
bigben
Beiträge: 2780
Registriert: Mi Okt 12, 2016 9:09 am

Re: Histogramm aus Matrix erstellen

Beitrag von bigben »

Hallo A346,

man muss unterscheiden zwischen einem Balkendiagramm und einem Histogramm. Die Chancen stehen hoch, dass Du gar kein Histogramm haben willst und deshalb ist hist auch nicht die richtige Funktion. Zwei Möglichkeiten für Balkendiagramme könnten so aussehen:

Code: Alles auswählen

m <- matrix(c(117, 107,67,68,65, 1:5, 6:10), nrow = 3, byrow = TRUE)
barplot(m[1,])
plot(m[1,], type = "h")
LG,
Bernhard
---
Programmiere stets so, dass die Maxime Deines Programmierstils Grundlage allgemeiner Gesetzgebung sein könnte
A346
Beiträge: 22
Registriert: Di Okt 20, 2020 11:04 am

Re: Histogramm aus Matrix erstellen

Beitrag von A346 »

Hallo Bernhard,

danke für deine schnelle Antwort!

die Darstellung geht somit auf jeden Fall einfacher!

Der Mittelwert wäre (117*1 + 107 * 2 + 67*3 + 68*4 +65*5) / (117+107+67+68+65) = 1129/424 = 2,66

Gibt es hier dann einen effizienten Befehl, um Mittelwert und Standardabweichung zu bestimmen?

Viele Grüße
A346
jogo
Beiträge: 2086
Registriert: Fr Okt 07, 2016 8:25 am

Re: Histogramm aus Matrix erstellen

Beitrag von jogo »

Hallo A346,

Code: Alles auswählen

weighted.mean(x=1:5, w=c(117, 107, 67, 68, 65))
ich weiß noch nicht, was Du mit der Standardabweichung meinst.
Wenn c(117, 107, 67, 68, 65) die Häufigkeiten sind für die Werte 1:5,
dann eventuell:

Code: Alles auswählen

sd(rep(1:5, c(117, 107, 67, 68, 65)))
Ansonsten habe ich für Deinen speziellen Fall sowas geschrieben:

Code: Alles auswählen

weighted.sd <- function(x, w) {
  m <- weighted.mean(x, w)
  sqrt(sum((x - m)^2 * w) / (sum(w)-1))
}
Gruß, Jörg
Antworten