De Yeo-Johnson-machtstransformatie die hier wordt besproken, heeft uitstekende eigenschappen die zijn ontworpen om nullen en negatieven te verwerken, terwijl wordt voortgebouwd op de sterke punten van Box Cox-machtstransformatie. Dit is waar ik meestal naar toe ga als ik te maken heb met nullen of negatieve gegevens.
Hier is een samenvatting van transformaties met voor- en nadelen om te illustreren waarom Yeo-Johnson de voorkeur verdient.
Log
Voordelen: doet het goed met positieve gegevens.
Nadelen: verwerkt geen nullen.
> log (0)
[1] -Inf
Log Plus 1
Voordelen: de plus 1-offset voegt de mogelijkheid toe om naast positieve gegevens ook nullen te verwerken.
Nadelen: mislukt met negatieve gegevens
> log1p (-1)
[1] -Inf
> log1p (-2)
[1] NaN
Waarschuwingsbericht:
In log1p (-2): NaNs geproduceerd
Square Root
Voordelen: gebruikt een machtstransformatie die nullen en positieve gegevens aankan.
Nadelen: mislukt met negatieve gegevens
> sqrt (-1)
[1] NaN
Waarschuwingsbericht:
In sqrt (-1): NaNs geproduceerd
Box Cox
R-code:
box_cox <- functie (x, lambda) {
eps <- 0.00001
if (abs (lambda) < eps)
logboek (x)
anders
(x ^ lambda - 1) / lambda
}
Voordelen: maakt geschaalde stroomtransformaties mogelijk
Nadelen: lijdt aan problemen met nullen en negatieven (d.w.z. kan alleen positieve gegevens verwerken.
> box_cox (0, lambda = 0)
[1] -Inf
> box_cox (0, lambda = -0,5)
[1] -Inf
> box_cox (-1, lambda = 0,5)
[1] NaN
Yeo Johnson
R-code:
yeo_johnson <- functie (x, lambda) {
eps <- .000001
not_neg <- welke (x > = 0)
is_neg <- welke (x < 0)
not_neg_trans <- functie (x, lambda) {
if (abs (lambda) < eps) log (x + 1)
anders ((x + 1) ^ lambda - 1) / lambda
}
neg_trans <- functie (x, lambda) {
if (abs (lambda - 2) < eps) - log (-x + 1)
anders - ((-x + 1) ^ (2 - lambda) - 1) / (2 - lambda)
}
x [not_neg] <- not_neg_trans (x [not_neg], lambda)
x [is_neg] <- neg_trans (x [is_neg], lambda)
terugkeer (x)
}
Voordelen: kan omgaan met positieve, nul en negatieve gegevens.
Nadelen: Geen dat ik kan bedenken.Eigenschappen lijken erg op Box-Cox maar kunnen nul en negatieve gegevens aan.
> yeo_johnson (0, lambda = 0)
[1] 0
> yeo_johnson (0, lambda = -0,5)
[1] 0
> yeo_johnson (-1, lambda = 0,5)
[1] -1.218951