এখানে আলোচিত ইয়ে-জনসন পাওয়ার ট্রান্সফর্মেশনে বক্স কক্স পাওয়ার ট্রান্সফর্মেশনের শক্তির ভিত্তিতে জিরো এবং নেগেটিভগুলি পরিচালনা করার জন্য নকশা করা দুর্দান্ত বৈশিষ্ট্য রয়েছে। আমি যখন জিরো বা নেতিবাচক ডেটা নিয়ে কাজ করি তখন সাধারণত আমি এটি যাই to
ইয়ো-জনসন কেন বেশি পছন্দনীয় তা চিত্রিত করার জন্য এখানে পেশাদারদের সাথে রূপান্তরগুলির সংক্ষিপ্তসার রইল।
লগিন
পেশাদাররা: ইতিবাচক ডেটা সহ ভাল করে।
কনস: জিরো পরিচালনা করে না।
> log(0)
[1] -Inf
লগ প্লাস 1
পেশাদাররা: প্লাস 1 অফসেটটি ইতিবাচক ডেটা ছাড়াও শূন্যগুলি পরিচালনা করার ক্ষমতা যুক্ত করে।
কনস: নেতিবাচক তথ্য সহ ব্যর্থ
> log1p(-1)
[1] -Inf
> log1p(-2)
[1] NaN
Warning message:
In log1p(-2) : NaNs produced
বর্গমূল
পেশাদাররা: একটি পাওয়ার ট্রান্সফর্মেশন ব্যবহার করে যা শূন্য এবং ধনাত্মক ডেটা পরিচালনা করতে পারে।
কনস: নেতিবাচক তথ্য সহ ব্যর্থ
> sqrt(-1)
[1] NaN
Warning message:
In sqrt(-1) : NaNs produced
বক্স কক্স
আর কোড:
box_cox <- function(x, lambda) {
eps <- 0.00001
if (abs(lambda) < eps)
log(x)
else
(x ^ lambda - 1) / lambda
}
পেশাদাররা: স্কেলড পাওয়ার ট্রান্সফর্মেশনগুলি সক্ষম করে
কনস: শূন্য এবং negativeণাত্মক সমস্যাগুলির দ্বারা ভোগা (যেমন কেবল ইতিবাচক ডেটা পরিচালনা করতে পারে।
> 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 <- 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)
}
পেশাদাররা: ইতিবাচক, শূন্য এবং নেতিবাচক ডেটা পরিচালনা করতে পারে।
কনস: আমি ভাবতে পারি না এমন কিছুই। বৈশিষ্ট্যগুলি বক্স-কক্সের সাথে খুব মিল তবে শূন্য এবং নেতিবাচক ডেটা পরিচালনা করতে পারে।
> yeo_johnson(0, lambda = 0)
[1] 0
> yeo_johnson(0, lambda = -0.5)
[1] 0
> yeo_johnson(-1, lambda = 0.5)
[1] -1.218951