මෙම Yeo-ජොන්සන් බලය පරිවර්තනය සාකච්ඡා මෙතන පිටුවේ කොටුව කොක්ස් බලය පරිවර්තනය ශක්තීන් මත ගොඩනැගීම අතර හසුරුව බිංදු සහ සෘණ නිර්මාණය විශිෂ්ට ගුණ ඇත. මම සාමාන්යයෙන් ශුන්ය හෝ negative ණ දත්ත සමඟ කටයුතු කරන විට යන්නේ මෙයයි.
යෙයෝ-ජොන්සන් වඩාත් සුදුසු වන්නේ ඇයිද යන්න නිදර්ශනය කිරීම සඳහා වාසි / අවාසි සහිත පරිවර්තනයන්ගේ සාරාංශයක් මෙන්න.
ලඝු
වාසි: ධනාත්මක දත්ත සමඟ හොඳින් කටයුතු කරයි.
අවාසි: ශුන්ය හැසිරවිය නොහැක.
> log(0)
[1] -Inf
ප්ලස් 1 ලොග් කරන්න
වාසි: ප්ලස් 1 ඕෆ්සෙට් මඟින් ධනාත්මක දත්ත වලට අමතරව ශුන්යයන් හැසිරවීමේ හැකියාව එක් කරයි.
අවාසි: negative ණ දත්ත සමඟ අසමත් වේ
> log1p(-1)
[1] -Inf
> log1p(-2)
[1] NaN
Warning message:
In log1p(-2) : NaNs produced
වර්ගමුලය
වාසි: ශුන්ය හා ධනාත්මක දත්ත හැසිරවිය හැකි බල පරිවර්තනයක් භාවිතා කරයි.
අවාසි: negative ණ දත්ත සමඟ අසමත් වේ
> sqrt(-1)
[1] NaN
Warning message:
In sqrt(-1) : NaNs produced
කොටුව කොක්ස්
R කේතය:
box_cox <- function(x, lambda) {
eps <- 0.00001
if (abs(lambda) < eps)
log(x)
else
(x ^ lambda - 1) / lambda
}
වාසි: පරිමාණ බල පරිවර්තනයන් සක්රීය කරයි
අවාසි: ශුන්ය හා නිෂේධනීය ගැටළු වලින් පීඩා විඳිති (එනම් ධනාත්මක දත්ත පමණක් හැසිරවිය හැකිය.
> box_cox(0, lambda = 0)
[1] -Inf
> box_cox(0, lambda = -0.5)
[1] -Inf
> box_cox(-1, lambda = 0.5)
[1] NaN
යෙයෝ ජොන්සන්
R කේතය:
yeo_johnson <- function(x, lambda) {
eps <- .000001
not_neg <- which(x >= 0)
is_neg <- which(x < 0)
not_neg_trans <- function(x, lambda) {
if (abs(lambda) < eps) log(x + 1)
else ((x + 1) ^ lambda - 1) / lambda
}
neg_trans <- function(x, lambda) {
if (abs(lambda - 2) < eps) - log(-x + 1)
else - ((-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)
return(x)
}
වාසි: ධනාත්මක, ශුන්ය හා negative ණාත්මක දත්ත හැසිරවිය හැකිය.
අවාසි: මට සිතිය හැකි කිසිවක් නැත. ගුණාංග බොක්ස්-කොක්ස් වලට බෙහෙවින් සමාන නමුත් ශුන්ය හා negative ණාත්මක දත්ත හැසිරවිය හැකිය.
> yeo_johnson(0, lambda = 0)
[1] 0
> yeo_johnson(0, lambda = -0.5)
[1] 0
> yeo_johnson(-1, lambda = 0.5)
[1] -1.218951