Website-Icon Björn Walther

Q-Q-Plot in R erstellen

Welchen Zweck hat ein Q-Q-Plot bzw. Q-Q-Diagramm überhaupt? Das Quantil-Quantil-Diagramm dient zur Prüfung von Variablen auf Normalverteilung. Es vergleicht die tatsächliche Verteilung einer Variable mit der idealtypischen Normalverteilung – mithilfe der Quantile. Letzteres ist eher unwichtig, da eigentlich nur ein Streudiagramm mit einer Gerade erzeugt und interpretiert werden muss.

Für das Q-Q-Diagramm empfiehlt sich eine z-Standardisierung der betreffenden Variable mit dem scale()-Befehl. Ich erstelle im Dataframe data_xls eine neue Variable „zGewicht“:


data_xls$zGewicht 

Ohne zusätzliche Pakete

Anschließend reicht mir der Befehl qqnorm() für die Punkte der tatsächlichen Verteilung und qqline() für die "Normalverteilungsgerade":


qqnorm(data_xls$zGewicht)
qqline(data_xls$zGewicht)

Im Ergebnis erhalte ich ein Diagramm der folgenden Art:

Hier ist es wichtig, dass die Beobachtungen (=Punkte) möglichst auf oder nahe der idealen Normalverteilung (= Gerade) liegen. Je weiter weg Punkte sind, desto eher bezeichnet man sie als "Ausreißer" bzw. sind sie von einer idealen Normalverteilung weg. Eine genaue Vorgehensweise, was normalverteilt ist und was nicht, gibt es allerdings nicht. Wenn die Mehrheit der Punkte auf oder nahe der Gerade liegen, ist dies meist ausreichend, um von einer hinreichenden Normalverteilung auszugehen. Exakt einer Normalverteilung wird sowieso fast nie eine Verteilung entsprechen, weswegen der Anwender hier auch mitunter etwas pragmatischer sein kann. Es geht meist um in etwa und nicht exakt normalverteilte Daten.

In meinem Fall kann man schon eine eher linkssteile Verteilung erkennen, die nach rechts hin im sog. long-tail ausdünnt. Das heißt konkret das größere Werte häufiger vorkommen, aber mitunter sehr weit vom Mittelwert entfernt sind. Das zeigt sich in den starken vertikalen Abständen der Punkte im oberen rechten Bereich der Grafik. Hier würde man also eher von einer Variable sprechen, die nicht normalverteilt ist.

 

Mit dem Paket DescTools

Zunächst sollte das Paket "DescTools" über die Funktion install.packages() installiert und über die library()-Funktion geladen werden:


install.packages("DescTools")
library(DescTools)

Als Nächstes braucht es lediglich den Befehl PlotQQ() mit der jeweiligen Variable. Hier sind qqnorm() und qqline() zusammengefasst und gleichzeitig wird das 95%-Konfidenzintervall als graues Band um die Normalverteilungsgerade ausgegeben.


PlotQQ(data_xls$zGewicht)

Das Intervall wird links und rechts jeweils weiter. Allerdings kann man auch gut erkennen, dass im oberen rechten Bereich viele Punkte auch deutlich außerhalb des Konfidenzintervalls liegen. Wie bereits oben geschrieben, ein Hinweis auf keine hinreichende Normalverteilung.

 

Mit dem Paket ggplot

Im Vorfeld bedarf es auch hier der Installation (install.packages()) und Laden (library()) des Paketes. Achtung, das Paket heißt ggplot2 - ggplot ist nur die Kurzbezeichnung.


install.packages("ggplot2")
library(ggplot2)

Nun wird es etwas komplizierter, das Q-Q-Diagramm sieht aber deutlich besser aus. Mit ggplot(DATENQUELLE, aes(sample=VARIABLE) definiert man die Datengrundlage. Mit stat_qq() wird das Q-Q-Diagramm erzeugt und mit mit stat_qq_line() wird die Normalverteilungsgerade eingezeichnet. Diese 3 Befehle werden einfach mit + verknüpft.


ggplot(data_xls, aes(sample=zGewicht)) +
  stat_qq() + stat_qq_line()

Nach der Ausführung erhält man ein grundlegendes Q-Q-Diagramm von ggplot.

Titel sowie Bezeichnungen der Achsen sind mit dem Befehl labs() noch hinzuzufügen.


ggplot(data_xls, aes(sample=Größe)) +
  stat_qq() + stat_qq_line()+
  labs(title="Q-Q-Plot Gewicht", x = "theoretisch", y="tatsächlich")

 

Im Ergebnis ändert sich nichts an der Interpretation zu oben.

 

 

Die mobile Version verlassen