Как преобразовать данные в R (логарифм, квадратный корень, кубический корень)


Многие статистические тесты предполагают, что остатки переменной отклика имеют нормальное распределение.

Однако часто остатки не имеют нормального распределения. Одним из способов решения этой проблемы является преобразование переменной ответа с помощью одного из трех преобразований:

1. Преобразование журнала: преобразование переменной ответа из y в log(y) .

2. Преобразование квадратного корня: преобразовать переменную отклика из y в √ y .

3. Преобразование кубического корня: преобразовать переменную ответа из y в y 1/3 .

Выполняя эти преобразования, переменная отклика обычно становится ближе к нормально распределенной. В следующих примерах показано, как выполнять эти преобразования в R.

Преобразование журнала в R

В следующем коде показано, как выполнить преобразование журнала для переменной ответа:

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

В следующем коде показано, как создать гистограммы для просмотра распределения y до и после преобразования журнала:

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

Обратите внимание, что распределение с логарифмическим преобразованием гораздо более нормальное по сравнению с исходным распределением. Это все еще не идеальная «форма колокола», но оно ближе к нормальному распределению, чем исходное распределение.

На самом деле, если мы проведем тест Шапиро-Уилка для каждого распределения, мы обнаружим, что исходное распределение не соответствует предположению о нормальности, а логарифмически преобразованное распределение — нет (при α = 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

Преобразование квадратного корня в R

В следующем коде показано, как выполнить преобразование квадратного корня для переменной ответа:

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

В следующем коде показано, как создать гистограммы для просмотра распределения y до и после преобразования квадратного корня:

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

Обратите внимание, что преобразованное квадратным корнем распределение гораздо более нормально распределено по сравнению с исходным распределением.

Преобразование кубического корня в R

В следующем коде показано, как выполнить преобразование кубического корня для переменной ответа:

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

В следующем коде показано, как создать гистограммы для просмотра распределения y до и после преобразования квадратного корня:

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

В зависимости от вашего набора данных одно из этих преобразований может привести к созданию нового набора данных с более нормальным распределением, чем другие.