Gegevens transformeren in r (logboek, vierkantswortel, kubuswortel)


Veel statistische tests gaan ervan uit dat de residuen van een responsvariabele normaal verdeeld zijn.

De residuen zijn echter vaak niet normaal verdeeld. Eén manier om dit probleem op te lossen is door de responsvariabele te transformeren met behulp van een van de volgende drie transformaties:

1. Logtransformatie: transformeer de responsvariabele van y naar log(y) .

2. Vierkantsworteltransformatie: Transformeer de responsvariabele van y naar √y .

3. Derdemachtsworteltransformatie: transformeer de responsvariabele van y naar y 1/3 .

Door deze transformaties uit te voeren, benadert de responsvariabele doorgaans de normale verdeling. De volgende voorbeelden laten zien hoe u deze transformaties in R kunt uitvoeren.

Logtransformatie in R

De volgende code laat zien hoe u een logtransformatie uitvoert op een antwoordvariabele:

 #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)

De volgende code laat zien hoe u histogrammen maakt om de verdeling van y weer te geven voor en na het uitvoeren van een logtransformatie:

 #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')

Gegevenstransformatie registreren in R

Merk op dat de log-getransformeerde distributie veel normaler is dan de oorspronkelijke distributie. Het is nog steeds geen perfecte „klokvorm“, maar het ligt dichter bij een normale verdeling dan de oorspronkelijke verdeling.

Als we op elke verdeling een Shapiro-Wilk-test uitvoeren, zullen we ontdekken dat de oorspronkelijke verdeling niet voldoet aan de normaliteitsaanname, terwijl de log-getransformeerde verdeling dat niet doet (bij α = 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

Vierkantsworteltransformatie in R

De volgende code laat zien hoe u een vierkantsworteltransformatie uitvoert op een antwoordvariabele:

 #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)

De volgende code laat zien hoe u histogrammen maakt om de verdeling van y weer te geven voor en na het uitvoeren van een worteltransformatie:

 #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') 

Vierkantsworteltransformatie in R

Merk op dat de getransformeerde vierkantswortelverdeling veel normaler verdeeld is dan de oorspronkelijke verdeling.

Derdemachtsworteltransformatie in R

De volgende code laat zien hoe u een derdemachtsworteltransformatie uitvoert op een antwoordvariabele:

 #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)

De volgende code laat zien hoe u histogrammen maakt om de verdeling van y weer te geven voor en na het uitvoeren van een worteltransformatie:

 #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') 

Derdemachtsworteltransformatie in R

Afhankelijk van uw dataset kan een van deze transformaties een nieuwe dataset opleveren die normaler verdeeld is dan de andere.

Einen Kommentar hinzufügen

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