QQ-Plots in R

Zur Überprüfung, ob eine Variable normalverteilt ist, werden häufig QQ-Plots erzeugt. In R plotte ich diese mit ggplot
R
Autor:in

produnis

Veröffentlichungsdatum

17. April 2021

Zur Überprüfung, ob eine Variable normalverteilt ist, werden häufig Quantil-Quantil-Diagramme (QQ-Plots) erzeugt. In R plotte ich diese mit ggplot und der Funktion stat_qq().

# Lade Testdaten "epa"
load(url("https://www.produnis.de/R/data/epa.RData"))

# aktiviere ggplot
library(ggplot2)
library(qqplotr)
# erstelle QQ-Plot für Variable "age"
# gruppiert nach "sex"
ggplot(epa, aes(sample=age)) +
 stat_qq(aes(color=sex))

Ich hab lange versucht, mit den “Hausmitteln” das Konfidenzintervall hinzuzufügen. Diese Arbeit kann man sich sparen, wenn z.B. das Zusatzpaket ggpubr installiert ist.

install.packages("ggpubr")

Es enthält die Funktion ggqqplot(), die automatisch das Konfidenzintervall hinzufügt. Der Aufruf ist etwas anders als bei ggplot():

ggpubr::ggqqplot(epa, x="age", color="sex") 

Weitere Möglichkeiten bietet das Zusatzpaket qqplotr.

install.packages("qqplotr")

Es fügt weitere Geome und Funktionen für ggplot hinzu. In unserem Beispiel sind die Plots aber nicht ganz so “schön” wie das vorangegangene:

# aktiviere die zusatzfunktionen
library(qqplotr)

ggplot(epa, aes(sample=age)) +
  # zeichne Punkte wie im "Original"
  stat_qq_point(aes(color=sex)) + 
  # füge Linie hinzu
  stat_qq_line(aes(color=sex)) +
  # füge Konfidenzgrenzen hinzu
  stat_qq_band(aes(fill=sex))

Es wird besser, wenn wir die Layerreihenfolge vertauschen und den Alpha-Wert der Farbe herbasetzen:

ggplot(epa, aes(sample=age)) +
  # fange mit Konfidenzgrenzen an
  # setzte Alpha-Wert für Farbe
  stat_qq_band(aes(fill=sex), alpha=2/10) +
  # füge Linie hinzu
  stat_qq_line(aes(color=sex)) +
  # zeichne Punkte wie im "Original"
  stat_qq_point(aes(color=sex)) 

Natürlich geht das alles auch mit den “alten” R-Hausmitteln und den Funktionen qqnorm() und qqline():

qqnorm(epa$age)
qqline(epa$age, col = "steelblue", lwd = 2)

Auch gibt es die abgewandelte Funktion qqPlot() aus dem car-Paket:

car::qqPlot(epa$age)

[1] 182 371