So transformieren sie daten in r (log, quadratwurzel, kubikwurzel)


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

Allerdings sind die Residuen oft nicht normalverteilt. Eine Möglichkeit, dieses Problem zu lösen, besteht darin, die Antwortvariable mithilfe einer von drei Transformationen zu transformieren:

1. Log-Transformation: Transformieren Sie die Antwortvariable von y in log(y) .

2. Quadratwurzeltransformation: Transformieren Sie die Antwortvariable von y in √y .

3. Kubikwurzeltransformation: Transformieren Sie die Antwortvariable von y in y 1/3 .

Durch die Durchführung dieser Transformationen nähert sich die Antwortvariable im Allgemeinen 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 Protokolltransformation für eine Antwortvariable durchgeführt wird:

 #create data frame
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))

#perform log transformation
log_y <- log10(df$y)

Der folgende Code zeigt, wie Histogramme erstellt werden, um die Verteilung von y vor und nach der Durchführung einer Protokolltransformation anzuzeigen:

 #create histogram for original distribution
hist(df$y, col='steelblue', main='Original')

#create histogram for log-transformed distribution 
hist(log_y, col='coral2', main='Log Transformed')

Protokolldatentransformation in R

Beachten Sie, dass die logarithmisch transformierte Verteilung viel normaler ist als die ursprüngliche Verteilung. Es ist immer noch keine perfekte „Glockenform“, aber sie kommt einer Normalverteilung näher als der ursprünglichen Verteilung.

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

 #perform Shapiro-Wilk Test on original data
shapiro.test(df$y)

	Shapiro-Wilk normality test

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

#perform Shapiro-Wilk Test on log-transformed data 
shapiro.test(log_y)

	Shapiro-Wilk normality test

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

Quadratwurzeltransformation in R

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

 #create data frame
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))

#perform square root transformation
sqrt_y <- sqrt(df$y)

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

 #create histogram for original distribution
hist(df$y, col='steelblue', main='Original')

#create histogram for square root-transformed distribution 
hist(sqrt_y, col='coral2', main='Square Root Transformed') 

Quadratwurzeltransformation in R

Beachten Sie, dass die Quadratwurzeltransformationsverteilung viel normaler verteilt ist als die Originalverteilung.

Kubikwurzeltransformation in R

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

 #create data frame
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))

#perform square root transformation
cube_y <- df$y^(1/3)

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

 #create histogram for original distribution
hist(df$y, col='steelblue', main='Original')

#create histogram for square root-transformed distribution 
hist(cube_y, col='coral2', main='Cube Root Transformed') 

Kubikwurzeltransformation in R

Abhängig von Ihrem Datensatz kann eine dieser Transformationen einen neuen Datensatz erzeugen, der normaler verteilt ist als die anderen.

Einen Kommentar hinzufügen

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert