Як слід перетворювати негативні дані, включаючи нулі?


191

Якщо у мене є дуже перекошені позитивні дані, я часто беру журнали. Але що мені робити із сильно перекривленими негативними даними, що включають нулі? Я бачив дві трансформації:

  • який має чітку функцію, яка 0 відображає до 0.log(x+1)
  • де c оцінюється або встановлюється як дуже невелике додатне значення.log(x+c)

Чи є інші підходи? Чи є якісь вагомі причини віддати перевагу одному підходу перед іншими?


19
Я підсумував деякі відповіді, а також інший матеріал на robjhyndman.com/researchtips/transformations
Роб Гіндман

5
відмінний спосіб перетворити та просувати stat.stackoverflow!
Робін Жирард

Так, я погоджуюсь @robingirard (я щойно приїхав сюди через пост в блозі Роба)!
Еллі Кессельман

Також див. Stats.stackexchange.com/questions/39042/…, щоб застосувати додаток до лівих цензурних даних (що можна охарактеризувати, аж до зміни місця розташування, точно так, як у цьому запитанні).
whuber

2
Мабуть дивно запитати про те, як трансформуватися, не вказавши в першу чергу мету перетворення. Яка ситуація? Чому потрібно трансформуватися? Якщо ми не знаємо, чого ви намагаєтесь досягти, як можна розумно запропонувати щось ? (Очевидно, що не можна сподіватися перетворитись на нормальність, тому що наявність (ненульової) ймовірності точних нулів передбачає сплеск розподілу в нуль, який спайк жодної трансформації не видалить - він може лише перемістити його навколо.)
Glen_b

Відповіді:


55

Мені здається, що найбільш відповідний вибір трансформації залежить від моделі та контексту.

Точка "0" може виникати з декількох різних причин, кожну з яких, можливо, доведеться по-різному трактувати:

  • Обрізання (як у прикладі Робіна): Використовуйте відповідні моделі (наприклад, суміші, моделі виживання тощо)
  • Відсутні дані: Внести дані / залишити спостереження, якщо це доречно.
  • Природний нульовий бал (наприклад, рівень доходу; безробітний має нульовий дохід): Перетворюйте за потребою
  • Чутливість вимірювального приладу: Можливо, додайте невелику кількість до даних?

Я не дуже пропоную відповідь, тому що я підозрюю, що немає універсальної "правильної" трансформації, коли у вас є нулі.


6
Кожна відповідь на моє запитання дала корисну інформацію, і я все проголосував за них. Але я можу вибрати лише одну відповідь, і Srikant's забезпечує найкращий огляд ІМО.
Роб Хайндман

2
Також зауважте, що існують завищені з нулем моделі (зайві нулі, і ви хвилюєтеся про деякі нулі: модель суміші), і моделі перешкод (нулі, і ви небайдужі про ненулі: двоступенева модель з початковою цензурованою моделлю).
Уейн

82

Ніхто не згадував обернену гіперболічну синусову трансформацію. Тому для повноти я додаю його сюди.

Це є альтернативою перетворень Боксу-Кокса і визначається де θ > 0 . При будь-якому значенні θ нульове відображення до нуля. Існує також версія з двома параметрами, що дозволяє здійснювати зсув так само, як і двопараметричне перетворення BC.

f(y,θ)=sinh1(θy)/θ=log[θy+(θ2y2+1)1/2]/θ,
θ>0θБербідж, Магі та Робб (1988) обговорюють трансформацію IHS, включаючи оцінку .θ

Перетворення IHS працює з даними, визначеними на всій реальній лінії, включаючи негативні значення та нулі. Для великих значень він поводиться як перетворення журналу, незалежно від значення θ (крім 0). Обмежуючий випадок, як θ 0, дає f ( y , θ ) y .yθθ0f(y,θ)y

Мені здається, що трансформація IHS повинна бути набагато краще відомою, ніж вона є.


1
Виглядає як гарна альтернатива / логістичним перетвореннямtanh
Firebug

1
З приводу IHS деякі, мабуть, не згодні: onlinelibrary.wiley.com/doi/10.1890/10-0340.1/abrief
kjetil b halvorsen

3
Цей документ стосується зворотного синусоїдального перетворення, а не зворотного гіперболічного синуса.
Брайан

42

Корисний підхід, коли змінна використовується як незалежний фактор регресії, - це замінити її двома змінними: одна - це двійковий показник того, чи є вона нульовою, а інша - значення вихідної змінної або її повторне вираження, наприклад, його логарифм. Цей прийом обговорюється в книзі Hosmer & Lemeshow про логістичну регресію (і в інших місцях я впевнений). Урізані графіки ймовірності позитивної частини вихідної змінної корисні для визначення відповідного повторного вираження. (Див. Аналіз на https://stats.stackexchange.com/a/30749/919 для прикладів.)

Коли змінна є залежною в лінійній моделі, цензурована регресія (подібно до Тобіта ) може бути корисною, знову ж таки усуваючи необхідність створення розпочатого логарифму. Ця методика поширена серед економетриків.


1
Чи моделювання даних як нульового завищеного Пуассона є особливим випадком такого підходу?
Девід Лебоуер

4
@David, хоча здається схожим, це не так, оскільки ZIP - це модель залежної змінної, а не незалежна змінна.
whuber

1
@whuber Ця методика обговорюється в книзі Hosmer & Lemeshow про логістичну регресію. Чи випадково ви могли б дізнатися, в якій главі вони обговорюють цю техніку? Я переглядаю їхню книгу, але не можу знайти потрібну сторінку ...
landroni

1
@landroni H&L тоді ще свіжий був у мене, тому я впевнений, що в цій книзі є щось, що стосується цієї теми. (Я консультувався з ним, щоб розробити деякі дуже великі регресійні моделі, і багато незалежних змінних довелося розглядати таким чином.) Однак я не можу знайти посилання і на даний момент. Я писав про цю техніку в наступних дописах, якщо ви шукаєте деталі. Два, які відображаються в пошуку на сайті, є на сайті stats.stackexchange.com/questions/6563 та stats.stackexchange.com/questions/4831 .
whuber

1
@landroni Так, вони еквівалентні так само, як і всі числові кодування будь-якої бінарної змінної еквівалентні. Виберіть те, що вам зручніше тлумачити.
whuber

37

Перетворення журналу зі зрушеннями - це особливі випадки перетворень Box-Cox :

y(λ1,λ2)={(y+λ2)λ11λ1when λ10log(y+λ2)when λ1=0

Це розширена форма для негативних значень, але також застосовна до даних, що містять нулі. Box and Cox (1964) представляє алгоритм пошуку відповідних значень для , використовуючи максимальну ймовірність. Це дає вам остаточну трансформацію. λ

Причина віддавати перевагу перетворенням Box-Cox полягає в тому, що вони розроблені для забезпечення припущень для лінійної моделі. Проведено певну роботу, щоб показати, що навіть якщо ваші дані не можуть бути перетворені на нормальність, оцінене значення все одно призводить до симетричного розподілу.λ

Я не впевнений, наскільки добре це стосується ваших даних, оскільки це може бути той який є лише перетворенням журналу, про який ви згадали, але, можливо, варто оцінити запитуваний λ , щоб побачити, чи є інша трансформація відповідний.λ=(0,1)λ

У R boxcox.fitфункція в пакеті geoRобчислить параметри для вас.


Хм, не можу змусити латексні "починати справи" приймати нові рядки. : - /
Ars

@ars Я виправив еквіваленти, щоб використовувати випадки початку. Я сподіваюся, що я не маніпулював еквіваленти в процесі.

1
@Rob: О, вибачте. ГеоР Diggle - це шлях, але вкажіть lambda2=TRUEу аргументах до boxcox.fit. (Також оновлений відповідь.)
АРС

3
@ Gd047: ось гарна посилання: elevatorlady.ca/doc/refcard/expressions.html
АРС

6
Для кожного, хто читає це питання, цікаво, що сталося з цією функцією, тепер його називають boxcoxfit.
страгу

19

Я припускаю, що нуль! = Відсутні дані, оскільки це зовсім інше питання.

Думаючи про те, як обробити нулі при множинній лінійній регресії, я схильний вважати, скільки нулів у нас насправді?

Всього пара нулів

Якщо у мене досить великий набір даних у досить великому наборі даних, я схильний:

  1. Вийміть крапку, візьміть колоди і підійдіть модель
  2. c

c

Ви можете зробити цю процедуру трохи менш грубою і скористатися методом boxcox зі зрушеннями, описаними у відповіді ars.

Велика кількість нулів

Якщо мій набір даних містить велику кількість нулів, то це говорить про те, що проста лінійна регресія - не найкращий інструмент для роботи. Натомість я б використав щось на зразок моделювання суміші (як запропонували Срікант та Робін).


15

Якщо ви хочете чогось швидкого і брудного, чому б не скористатися квадратним коренем?


7
І часто перетворення кореня куба працює добре і дозволяє нулі та негативи. Я виявив, що корінь куба особливо добре працює, коли, наприклад, вимірювання - це об'єм або кількість частинок на одиницю об'єму. Корінь куба перетворив би його в лінійний вимір. Більш гнучкий підхід полягає у встановленні обмеженого кубічного сплайна (природного сплайна) на кубіку кореня або квадратного кореня, що дозволяє трохи відійти від прийнятої форми.
Френк Харрелл

2
+1. Невелику статтю про коріння куба див. Stata-journal.com/article.html?article=st0223 (Це буде безкоштовно .pdf з першого кварталу 2014 р.)
Нік Кокс

2
Квадратний корінь, що дорівнює нулю, дорівнює нулю, тому трансформуються лише ненульові значення. Це не робить нічого для боротьби зі шипом, якщо нуль завищений, і може спричинити серйозні проблеми, якщо в групах кожна має різну кількість нулів. Іншими словами, якщо деякі групи мають багато нулів, а інші мають мало, це перетворення може вплинути на багато речей негативно. Для групи з найбільшою дисперсією (також мала найменші нулі) перетворюються майже всі значення. На відміну від тих, у кого найбільше нулів, не велика частина значень перетворюється. Це може змінити, яка група має найбільшу дисперсію.
D_Williams

Жодна трансформація не збереже дисперсію у випадку, описаному @D_Williams. Моделі сумішей (згадані в цій темі в інших місцях), мабуть, були б хорошим підходом у цьому випадку.
mkt

10

Я припускаю, що у вас є постійні дані.

Якщо дані включають нулі, це означає, що у вас є нульовий сплеск, який може бути пов'язаний з певним аспектом ваших даних. Це з'являється, наприклад, у вітровій енергії, вітер нижче 2 м / с виробляє нульову потужність (це називається відключений), а вітер (щось навколо) 25 м / с також виробляє нульову потужність (з міркувань безпеки це називається відключеним) . Хоча розподіл виробленої енергії вітру здається безперервним, є сплеск у нуль.

Моє рішення: У цьому випадку я пропоную обробити нулі окремо, працюючи із сумішшю шипа в нуль та моделлю, яку ви планували використовувати для тієї частини розподілу, яка є безперервною (wrt Lebesgue).


9

Порівнюючи відповідь, надану @RobHyndman, перетворення log-plus-one, яке поширюється на негативні значення, з формою:

T(x)=sign(x)log(|x|+1)
r = -1000:1000

l = sign(r)*log1p(abs(r))
l = l/max(l)
plot(r, l, type = "l", xlab = "Original", ylab = "Transformed", col = adjustcolor("red", alpha = 0.5), lwd = 3)

#We scale both to fit (-1,1)
for(i in exp(seq(-10, 100, 10))){
  s = asinh(i*r)

  s = s / max(s)
  lines(r, s, col = adjustcolor("blue", alpha = 0.2), lwd = 3)
}
legend("topleft", c("asinh(x)", "sign(x) log(abs(x)+1)"), col = c("blue", "red"), lty = 1)

θθ1θ0

введіть тут опис зображення


θx=0


8

Оскільки запропоновано Box-Cox для двох параметрів, ось R, щоб встановити вхідні дані, запустити на ньому довільну функцію (наприклад, прогнозування часових рядів), а потім повернути інвертований вихід:

# Two-parameter Box-Cox function
boxcox.f <- function(x, lambda1, lambda2) {
  if (lambda1!=0) {
    return(((x + lambda2) ^ lambda1 - 1) / lambda1)
  } else {
    return(log(x + lambda2))
  }
}

# Two-parameter inverse Box-Cox function
boxcox.inv <- function(x, lambda1, lambda2) {
  if (lambda1!=0) {
    return((lambda1 * x + 1) ^ (1 / lambda1) - lambda2)
  } else {
    return(exp(x) - lambda2)
  }
}

# Function to Box-Cox transform x, apply function g, 
# and return inverted Box-Cox output y
boxcox.fit.apply <- function(x, g) {
  require(geoR)
  require(plyr)

  # Fit lambdas
  t <- try(lambda.pair <- boxcoxfit(x, lambda2=T)$lambda)

  # Estimating both lambdas sometimes fails; if so, estimate lambda1 only
  if (inherits(t, "try-error")) {
    lambda1 <- boxcoxfit(x)$lambda
    lambda2 <- 0
  } else {
    lambda1 <- lambda.pair[1]
    lambda2 <- lambda.pair[2]
  }
  x.boxcox <- boxcox.f(x, lambda1, lambda2)

  # Apply function g to x.boxcox. This should return data similar to x (e.g. ts)
  y <- aaply(x.boxcox, 1, g)

  return(boxcox.inv(y, lambda1, lambda2))
}

5

Припустимо, Y - це сума грошей, яку кожен американець витрачає на новий автомобіль за даний рік (загальна ціна придбання). Y буде шипом при 0; взагалі не матиме значень між 0 і приблизно 12 000; і прийматимуть інші цінності переважно в підлітковому, двадцятому та тридцятому тисячах. Прогнози були б довірениками щодо рівня потреби та / або зацікавленості в здійсненні такої покупки. Навряд чи потреба чи відсотки навряд чи можуть бути нульовими для осіб, які не здійснювали покупки; на цих масштабах некупці будуть набагато ближче до покупців, ніж Y або навіть журнал Y міг би запропонувати. У такому випадку, але в галузі охорони здоров’я, я виявив, що найточніші прогнози, судячи з перекваліфікації тестових наборів / тренувань, отримані шляхом збільшення порядку,

  1. Логістична регресія на бінарній версії Y,
  2. OLS на Y,
  3. Звичайна регресія (PLUM) на Y, поділену на 5 категорій (щоб розділити покупців на 4 групи однакового розміру),
  4. Багаточленна логістична регресія на Y, поділену на 5 категорій,
  5. OLS в журналі (10) Y (я не думав пробувати корінь куба), і
  6. OLS на Y поділено на 5 категорій.

Деякі відмовляться при цій категоризації безперервної залежної змінної. Але хоча вона жертвує деякою інформацією, категоризація, здається, допомагає відновленням важливого основного аспекту ситуації - знову ж таки, що «нулі» набагато більше схожі на решту, ніж Y вказувало б.


4
Ви також можете розділити його на дві моделі: ймовірність придбання автомобіля (бінарний відгук) та вартість автомобіля за даною покупкою. Це стандартна практика у багатьох сферах, наприклад, страхування, кредитний ризик тощо
Hong Ooi

1
@HongOoi - чи можете ви запропонувати будь-які читання щодо того, коли такий підхід є та не застосовується?
rolando2

4

Розглянута тут трансформація потужності Йо-Джонсона має чудові властивості, призначені для обробки нулів і негативів, будуючи при цьому сильні перетворення потужності Box Cox. Це те, до чого я зазвичай займаюся, коли маю справу з нулями або негативними даними.

Ось підсумок перетворень із плюсами / мінусами, щоб проілюструвати, чому Йе-Джонсон є кращим.

Журнал

Плюси: добре справляється з позитивними даними.

Мінуси: не обробляє нулі.

> 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

Кокс Кокс

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)

}

Плюси: може обробляти позитивні, нульові та негативні дані.

Мінуси: жодного, що я можу придумати. Властивості дуже схожі на Box-Cox, але можуть обробляти нульові та негативні дані.

> yeo_johnson(0, lambda = 0)
[1] 0
> yeo_johnson(0, lambda = -0.5)
[1] 0
> yeo_johnson(-1, lambda = 0.5)
[1] -1.218951

1
Мінуси Йе-Джонсона: складне, окреме перетворення позитивів і негативів і значень з обох боків лямбда, магічне значення настройки (епсилон; а що таке лямбда?). Немає легко очевидної переваги порівняно з більш простим перетворенням журналу негативного розширення, показаним у відповіді Firebug, якщо вам не потрібні масштабовані перетворення потужності (як у Box – Cox).
Конрад Рудольф

1

Щоб уточнити, як поводитися з журналом нуля в регресійних моделях, ми написали педагогічний документ, що пояснює найкраще рішення та поширені помилки, які люди роблять на практиці. Ми також вийшли з новим рішенням для вирішення цього питання.

Ви можете знайти папір, натиснувши тут: https://ssrn.com/ab абстракт=3444996

log(y)=βlog(x)+εβyx

YY+c>0

У нашій статті ми фактично наводимо приклад, коли додавання дуже малих констант насправді забезпечує найвищий ухил. Ми пропонуємо отримати вираз упередженості.

Власне, максимальна ймовірність псевдо Пуассона (PPML) може розглядатися як хороше рішення цього питання. Треба враховувати наступний процес:

yi=aiexp(α+xiβ)E(ai|xi)=1

βaiyi=0E(ai|xi)=1E(yiexp(α+xiβ)|xi)=0

i=1N(yiexp(α+xiβ))xi=0

yi=0

β

log(yi+exp(α+xiβ))=xiβ+ηi

Ми показуємо, що цей оцінювач є неупередженим і що його можна просто оцінити за допомогою GMM за допомогою будь-якого стандартного статистичного програмного забезпечення. Наприклад, це можна оцінити, виконавши лише один рядок коду з Stata.

Ми сподіваємось, що ця стаття може допомогти, і ми будемо раді отримати відгуки від вас.

Крістоф Белего та Луї-Даніель Папе CREST - Політехніка Ecole - ENSAE

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.