Seite 1 von 1

Histogramm aus Matrix erstellen

Verfasst: Mo Nov 09, 2020 2:35 pm
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

Re: Histogramm aus Matrix erstellen

Verfasst: Mo Nov 09, 2020 2:41 pm
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

Re: Histogramm aus Matrix erstellen

Verfasst: Mo Nov 09, 2020 2:41 pm
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

Re: Histogramm aus Matrix erstellen

Verfasst: Mo Nov 09, 2020 2:48 pm
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

Re: Histogramm aus Matrix erstellen

Verfasst: Mo Nov 09, 2020 3:00 pm
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