Чи існує трансформація типу Box-Cox для незалежних змінних? Тобто перетворення, яке оптимізує змінну так, що волевиявлення зробить більш розумним пристосування для лінійної моделі?y~f(x)
Якщо так, чи є функція для цього R
?
Чи існує трансформація типу Box-Cox для незалежних змінних? Тобто перетворення, яке оптимізує змінну так, що волевиявлення зробить більш розумним пристосування для лінійної моделі?y~f(x)
Якщо так, чи є функція для цього R
?
Відповіді:
Джон Тукі виступав за свій " триточний метод " для пошуку повторних виразів змінних для лінеаризації відносин.
Я проілюструю вправою з його книги « Розвідувальний аналіз даних» . Це дані тиску пари ртуті в експерименті, в якому змінювали температуру і вимірювали тиск пари.
pressure <- c(0.0004, 0.0013, 0.006, 0.03, 0.09, 0.28, 0.8, 1.85, 4.4,
9.2, 18.3, 33.7, 59, 98, 156, 246, 371, 548, 790) # mm Hg
temperature <- seq(0, 360, 20) # Degrees C
Відношення сильно нелінійне: див. Ліву панель на ілюстрації.
Оскільки це дослідницька вправа, ми очікуємо, що вона буде інтерактивною. Аналітику пропонують почати з визначення трьох «типових» точок у сюжеті : по одній біля кожного кінця і по одній посередині. Я зробив це тут і позначив їх червоним кольором. (Коли я давно вперше робив цю вправу, я використав різний набір балів, але досяг результатів.)
У трехточковому методі можна шукати - грубою силою чи іншим чином - перетворення Box-Cox, яке при застосуванні до однієї з координат - y або x - (a) розмістить типові точки приблизно на рядок і (b) використовує "приємну" потужність, зазвичай вибирається з "драбини" повноважень, яка може бути інтерпретована аналітиком.
З причин, які стануть очевидними пізніше, я розширив сімейство Box-Cox, дозволивши "змістити" так, щоб перетворення були у формі
Ось швидка та брудна R
реалізація. Спочатку він знаходить оптимальне рішення, потім округляє до найближчого значення на сходах і, за умови цього обмеження, оптимізує (в розумних межах). Це неймовірно швидко, тому що всі обчислення базуються саме на цих трьох типових точках, що виходять із початкового набору даних. (Ви можете зробити їх навіть олівцем і папером, саме це і зробив Тукі.)λ α
box.cox <- function(x, parms=c(1,0)) {
lambda <- parms[1]
offset <- parms[2]
if (lambda==0) log(x+offset) else ((x+offset)^lambda - 1)/lambda
}
threepoint <- function(x, y, ladder=c(1, 1/2, 1/3, 0, -1/2, -1)) {
# x and y are length-three samples from a dataset.
dx <- diff(x)
f <- function(parms) (diff(diff(box.cox(y, parms)) / dx))^2
fit <- nlm(f, c(1,0))
parms <- fit$estimate #$
lambda <- ladder[which.min(abs(parms[1] - ladder))]
if (lambda==0) offset = 0 else {
do <- diff(range(y))
offset <- optimize(function(x) f(c(lambda, x)),
c(max(-min(x), parms[2]-do), parms[2]+do))$minimum
}
c(lambda, offset)
}
Коли триточковий метод застосовується до значень тиску (y) у наборі даних ртутної пари, ми отримуємо середню панель графіків.
data <- cbind(temperature, pressure)
n <- dim(data)[1]
i3 <- c(2, floor((n+1)/2), n-1)
parms <- threepoint(temperature[i3], pressure[i3])
y <- box.cox(pressure, parms)
У цьому випадку parms
виявляється рівним : метод вибирає log-перетворення тиску.
Ми дійшли точки, аналогічної контексту питання: з будь-якої причини (зазвичай для стабілізації залишкової дисперсії) ми повторно виразили залежну змінну, але виявимо, що зв’язок із незалежною змінною є нелінійним. Тож тепер ми переходимо до повторного вираження незалежної змінної у прагненні лінеаризувати відношення. Це робиться так само, просто повертаючи ролі x і y:
parms <- threepoint(y[i3], temperature[i3])
x <- box.cox(temperature, parms)
Значення parms
для незалежної змінної (температури) є : іншими словами, ми повинні виразити температуру у градусах Цельсія вище ° С і використати її зворотну ( потужність ). (З технічних причин, перетворення Боксу-Кокса далі додає до результату.) Отримане співвідношення показано в правій панелі.- 2541
На сьогоднішній день будь-хто з найменшим науковим досвідом визнав, що дані "говорять" нам використовувати абсолютні температури - де зміщення становить замість тому що вони матимуть фізичний зміст. (Коли останній графік повторно намальований за допомогою зміщення замість , мало помітних змін. Фізик тоді позначить вісь x : тобто зворотна абсолютна температура.)254 273 254 1 / ( 1 - x )
Це хороший приклад того, як статистичне дослідження має взаємодіяти з розумінням предмета дослідження . Насправді, взаємні абсолютні температури весь час відображаються у фізичних законах. Отже, використовуючи поодинці прості методи EDA для дослідження цього старого, простого, набору даних, ми знову виявили відношення Клавзіус-Клапейрон : логарифм тиску пари є лінійною функцією зворотної абсолютної температури. Мало того, ми маємо не дуже погану оцінку абсолютного нуля (0градусів С), зі схилу правої ділянки ми можемо обчислити питому ентальпію випаровування, і - як виявилося - ретельний аналіз залишків ідентифікує вибух (значення при температурі градусів С), показує нам, як ентальфія випаровування змінюється (дуже незначно) від температури (тим самим порушуючи Закон про ідеальний газ), і в кінцевому підсумку може дати нам точну інформацію про ефективний радіус молекул ртутного газу! Все це з 19 точок даних та деяких базових навичок EDA.
data <- cbind(temperature, pressure)
R
Погляньте на ці слайди на тему "Регресійна діагностика" Джона Фокса (доступна тут , у комплекті із посиланнями), де коротко обговорюється питання трансформації нелінійності. Він охоплює "правило випинання" Тукі для вибору силових перетворень (на що йдеться у прийнятій відповіді), але також згадує сімейства трансформацій сімейства Box-Cox та Yeo-Johnson. Див. Розділ 3.6 слайдів. Для більш офіційного сприйняття того ж автора див. Дж. Фокс, Прикладний регресійний аналіз та Узагальнені лінійні моделі, Друге видання (Sage, 2008) .
Що стосується фактичних пакетів R, які допомагають у цьому, то абсолютно подивіться на автомобільний пакет, автором якого є Дж. Фокс та С. Вайсберг. Цей пакет супроводжує Дж. Фокса та С. Вайсберга, «Другої супутниці до прикладної регресії», друге видання, (Sage, 2011) , іншого обов'язкового читання. Використовуючи цей пакет, ви можете почати з basicPower()
(прості перетворення потужності), bcPower()
(перетворення Box-Cox) та yjPower()
(перетворення Йе-Джонсона). Є також powerTransform () :
Функція powerTransform використовується для оцінки нормалізуючих перетворень одновимірної або багатоваріантної випадкової величини.
Перегляньте обидві книги для отримання більш детальної інформації про теорію цих перетворень та обчислювальний підхід.
Існує багато переваг, щоб зробити оцінку перетворень коваріату формальною частиною процесу оцінки. Це визнає кількість задіяних параметрів і забезпечить хороше охоплення інтервалу довіри та збереження помилок типу I. Регресійні сплайни - одні з найкращих підходів. І сплайни будуть працювати з нульовими та від’ємними значеннями на відміну від логарифмічних підходів.
R
і, подумавши про це на мить, я не впевнений, як саме це зробити. Які критерії ви б оптимізували для забезпечення "найбільш лінійної" трансформації? є заманливим, але, як видно з моєї відповіді тут , поодинці не може бути використаний для того, щоб побачити, чи задоволено припущення про лінійність моделі. Чи мали на увазі якісь критерії?