Box-Cox-Transformation in R durchführen

Von Fabian
Kategorie: R
Tags: Regression
Lesezeit: 2 Minuten

Eine Box-Cox-Transformation ist eine häufig verwendete Methode zum Transformieren eines nicht normalverteilten Datensatzes in einen normalverteilten.

Die Grundidee hinter dieser Methode besteht darin, einen Wert für λ zu finden, so dass die transformierten Daten unter Verwendung der folgenden Formel so nahe wie möglich an der Normalverteilung liegen:

  • y (λ) = (y λ - 1) / λ wenn y ≠ 0 ist
  • y (λ) = log (y) wenn y = 0

Wir können eine Box-Cox-Transformation in R durchführen, indem wir die Funktion boxcox() aus der MASS()-Bibliothek verwenden. Das folgende Beispiel zeigt, wie diese Funktion in der Praxis verwendet wird.

In diesem Artikel der University of Connecticut finden Sie eine schöne Zusammenfassung der Entwicklung der Box-Cox-Transformation.

Beispiel: Box-Cox-Transformation in R

Der folgende Code zeigt, wie ein lineares Regressionsmodell an einen Datensatz angepasst wird. Verwenden Sie dann die Funktion boxcox(), um ein optimales Lambda zu finden, um die Antwortvariable zu transformieren und ein neues Modell anzupassen.

library(MASS)

# Daten erstellen
y=c(1, 1, 1, 2, 2, 2, 2, 2, 2, 3, 3, 3, 6, 7, 8)
x=c(7, 7, 8, 3, 2, 4, 4, 6, 6, 7, 5, 3, 3, 5, 8)

#Lineares Regressionsmodell anpassen
model <- lm(y~x)

#optimales Lambda für die Box-Cox-Transformation finden
bc <- boxcox(y ~ x)
(lambda <- bc$x[which.max(bc$y)])

[1] -0,4242424

#Anpassung eines neuen linearen Regressionsmodells mithilfe der Box-Cox-Transformation
new_model <- lm(((y^lambda-1)/lambda) ~ x)

Das optimale Lambda betrug -0,4242424. Somit ersetzte das neue Regressionsmodell die ursprüngliche Antwortvariable y durch die Variable y = (y -0,4242424-1 ) / -0,4242424.

Der folgende Code zeigt, wie zwei QQ-Diagramme in R erstellt werden, um die Unterschiede in den Residuen zwischen den beiden Regressionsmodellen zu visualisieren:

#Zeichnungsbereich definieren
op <- par(pty = "s", mfrow = c(1, 2))


#QQ-Plot für das Originalmodell
qqnorm(model$residuals)
qqline(model$residuals)

#QQ-Plot für ein Box-Cox-transformiertes Modell
qqnorm(new_model$residuals)
qqline(new_model$residuals)

#Beide QQ-Diagramme anzeigen
par(op)

Box-Cox-transformiertes Q-Q-Diagramm in R

Als Faustregel gilt: Wenn die Datenpunkte in einem QQ-Diagramm entlang einer geraden diagonalen Linie fallen, folgt der Datensatz wahrscheinlich einer Normalverteilung.

Beachten Sie, wie das Box-Cox-transformierte Modell ein QQ-Diagramm mit einer viel geraden Linie als das ursprüngliche Regressionsmodell erzeugt.

Dies ist ein Hinweis darauf, dass die Residuen des Box-Cox-transformierten Modells viel normaler verteilt sind, was eine der Annahmen der linearen Regression erfüllt.

Zusätzliche Ressourcen

So transformieren Sie Daten in R (Protokoll, Quadratwurzel, Kubikwurzel)
So erstellen und interpretieren Sie ein QQ-Diagramm in R
So führen Sie einen Shapiro-Wilk-Test auf Normalität in R durch

Statistik: Der Weg zur Datenanalyse

* Amazon Affiliate Link


Das könnte Sie auch interessieren: