So transformieren Sie Daten in R (Log, Quadratwurzel, Kubikwurzel)

Von Fabian
Kategorie: R
Tags: Operationen
Lesezeit: 3 Minuten

Bei vielen statistischen Tests wird davon ausgegangen, dass die Residuen einer Antwortvariablen normal verteilt sind.

Oft sind die Residuen jedoch nicht normal verteilt. Eine Möglichkeit, dieses Problem zu beheben, besteht darin, die Antwortvariable mithilfe einer der drei Transformationen zu transformieren:

1. Log-transformation: Transformieren Sie die Antwortvariable von y nach log(y).

2. Quadratwurzel-Transformation: Transformieren Sie die Antwortvariable von y nach √y.

3. Kubikwurzel-Transformation: Transformieren Sie die Antwortvariable von y nach y1/3.

Durch Ausführen dieser Transformationen nähert sich die Antwortvariable typischerweise der Normalverteilung an. Die folgenden Beispiele zeigen, wie diese Transformationen in R durchgeführt werden.

Log-Transformation in R

Der folgende Code zeigt, wie eine Log-transformation für eine Antwortvariable durchgeführt wird:

#Dataframe erstellen
df <- data.frame(y=c(1, 1, 1, 2, 2, 2, 2, 2, 2, 3, 3, 3, 6, 7, 8),
                 x1=c(7, 7, 8, 3, 2, 4, 4, 6, 6, 7, 5, 3, 3, 5, 8),
                 x2=c(3, 3, 6, 6, 8, 9, 9, 8, 8, 7, 4, 3, 3, 2, 7))

#Log-transformation durchführen
log_y <- log10(df$y)

Der folgende Code zeigt, wie Histogramme erstellt werden, um die Verteilung von y vor und nach einer Log-transformation anzuzeigen:

#Histogramm für die ursprüngliche Verteilung erstellen
hist(df$y, col='steelblue', main='Original')

#Histogramm für logarithmisch transformierte Verteilung erstellen 
hist(log_y, col='coral2', main='Log Transformed')

Log-transformation von Daten in R

Beachten Sie, dass die logarithmisch transformierte Verteilung im Vergleich zur ursprünglichen Verteilung viel normaler ist. Es ist immer noch keine perfekte „Glockenform“, aber es ist näher an einer Normalverteilung als die ursprüngliche Verteilung.

Wenn wir für jede Verteilung einen Shapiro-Wilk-Test durchführen, werden wir feststellen, dass die ursprüngliche Verteilung die Normalitätsannahme nicht erfüllt, während die logarithmisch transformierte Verteilung dies nicht tut (bei α = 0,05):

#Shapiro-Wilk-Test an Originaldaten durchführen
shapiro.test(df$y)

    Shapiro-Wilk normality test

data:  df$y
W = 0.77225, p-value = 0.001655

#Shapiro-Wilk-Test für logarithmisch transformierte Daten durchführen 
shapiro.test(log_y)

    Shapiro-Wilk normality test

data:  log_y
W = 0.89089, p-value = 0.06917

Quadratwurzel-Transformation in R

Der folgende Code zeigt, wie eine Quadratwurzeltransformation für eine Antwortvariable durchgeführt wird:

#Dataframe erstellen
df <- data.frame(y=c(1, 1, 1, 2, 2, 2, 2, 2, 2, 3, 3, 3, 6, 7, 8),
                 x1=c(7, 7, 8, 3, 2, 4, 4, 6, 6, 7, 5, 3, 3, 5, 8),
                 x2=c(3, 3, 6, 6, 8, 9, 9, 8, 8, 7, 4, 3, 3, 2, 7))

#Quadratwurzeltransformation durchführen
sqrt_y <- sqrt(df$y)

Der folgende Code zeigt, wie Histogramme erstellt werden, um die Verteilung von y vor und nach einer Quadratwurzeltransformation anzuzeigen:

#Histogramm für die ursprüngliche Verteilung erstellen
hist(df$y, col='steelblue', main='Original')

#Histogramm für Quadratwurzel-transformierte Verteilung erstellen 
hist(sqrt_y, col='coral2', main='Square Root Transformed')

Quadratwurzeltransformation in R

Beachten Sie, dass die durch Quadratwurzel transformierte Verteilung im Vergleich zur ursprünglichen Verteilung viel normaler verteilt ist.

Kubikwurzeltransformation in R

Der folgende Code zeigt, wie eine Kubikwurzelumwandlung für eine Antwortvariable durchgeführt wird:

#Dataframe erstellen
df <- data.frame(y=c(1, 1, 1, 2, 2, 2, 2, 2, 2, 3, 3, 3, 6, 7, 8),
                 x1=c(7, 7, 8, 3, 2, 4, 4, 6, 6, 7, 5, 3, 3, 5, 8),
                 x2=c(3, 3, 6, 6, 8, 9, 9, 8, 8, 7, 4, 3, 3, 2, 7))

#Quadratwurzeltransformation durchführen
cube_y <- df$y^(1/3)

Der folgende Code zeigt, wie Histogramme erstellt werden, um die Verteilung von y vor und nach einer Quadratwurzeltransformation anzuzeigen:

#Histogramm für die ursprüngliche Verteilung erstellen
hist(df$y, col='steelblue', main='Original')

#Histogramm für Quadratwurzel-transformierte Verteilung erstellen 
hist(cube_y, col='coral2', main='Cube Root Transformed')

Kubikwurzeltransformation in R

Abhängig von Ihrem Dataset kann eine dieser Transformationen zu einem neuen Dataset führen, das normaler verteilt ist als die anderen.

Statistik: Der Weg zur Datenanalyse

* Amazon Affiliate Link


Das könnte Sie auch interessieren: