Метод Бокса-Кокса

Материал из MachineLearning.

(Различия между версиями)
Перейти к: навигация, поиск
Строка 53: Строка 53:
* А.Н. Порунов (2010). [http://bijournal.hse.ru/data/2011/01/11/1207996673/2010_2_%D1%81.3-10_%D0%9F%D0%BE%D1%80%D1%83%D0%BD%D0%BE%D0%B2.pdf "Бокс-Кокс преобразование и иллюзия "нормальности" макроэкономического ряда"].
* А.Н. Порунов (2010). [http://bijournal.hse.ru/data/2011/01/11/1207996673/2010_2_%D1%81.3-10_%D0%9F%D0%BE%D1%80%D1%83%D0%BD%D0%BE%D0%B2.pdf "Бокс-Кокс преобразование и иллюзия "нормальности" макроэкономического ряда"].
* D. Scott, [http://onlinestatbook.com/2/transformations/box-cox.html "Box-Cox transformation"].
* D. Scott, [http://onlinestatbook.com/2/transformations/box-cox.html "Box-Cox transformation"].
 +
* EnWiki: [http://en.wikipedia.org/wiki/Power_transform Power_transform]

Версия 22:18, 28 декабря 2013

В реальности часто приходится иметь дело со статистическими данными, которые по тем или иным причинам не проходят тест на нормальность. В этой ситуации есть два выхода: либо обратиться к непараметрическим методам, либо воспользоваться специальными методами, позволяющими преобразовать исходную «ненормальную статистику» в «нормальную». Среди множества таких методов преобразований одним из лучших (при неизвестном типе распределения) считается преобразование Бокса-Кокса.

Содержание

Вид преобразования

Для исходной последовательности y = \{ y_1, \ldots, y_n \}, \quad y_i > 0, \quad i = 1,\ldots,n однопараметрическое преобразование Бокса-Кокса с параметром \lambda определяется следующим образом:

 y_i^{\lambda} = \begin{cases}\frac{y_i^\lambda-1}{\lambda},&\text{if } \lambda \neq 0,\\ \log{(y_i)},& \text{if } \lambda = 0.\end{cases}

Параметр можно выбирать \lambda, максимизируя логарифм правдоподобия. Еще один способ поиска оптимального значения параметра основан на поиске максимальной величины коэффициента корреляции между квантилями функции нормального распределения и отсортированной преобразованной последовательностью.

Модификации

Так как исходный метод предполагает работу только с положительными величинами, было предложено несколько модификаций, учитывающих нулевые и отрицательные значения.

Самый очевидный вариант - сдвиг всех значений на константу \alpha так, чтобы выполнялось условие \quad (y_i + \lambda_2)> 0, \quad i = 1,\ldots,n. После этого преобразование выглядит так:

 y_i^{\lambda} = \begin{cases}\frac{(y_i+\alpha)^{\lambda}-1}{\lambda},&\text{if } \lambda_1 \neq 0,\\ \log{(y_i+\alpha)},& \text{if } \lambda = 0.\end{cases}

Еще более общая форма:

\tau(y_i;\lambda, \alpha) = \begin{cases} \frac{(y_i + \alpha)^\lambda - 1}{\lambda (\operatorname{GM}(y))^{\lambda - 1}}, & \text{if } \lambda\neq 0, \\ \operatorname{GM}(y)\ln(y_i + \alpha), & \text{if } \lambda=0,\end{cases}

где \quad \operatorname{GM}(y) = (y_1\cdots y_n)^{1/n}.

Пример

qqplot для исходных данных.
qqplot для исходных данных.
Графики статистик для всех использованных тестов на нормальность.
Графики статистик для всех использованных тестов на нормальность.
qqplot для данных, преобразованных методом Бокса-Кокса с .
qqplot для данных, преобразованных методом Бокса-Кокса с \lambda=-0.06.

В системе R с использованием пакета AID:

> data = textile[,1]
> shapiro.test(data)
Shapiro-Wilk normality test
data:  data
W = 0.7604, p-value = 3.031e-05
> bctr = boxcoxnc(data)
> bctr$result
              sw    ad  cvm   pt    sf    lt    jb          ac
lambda.hat -0.06 -0.08 -0.1 0.02 -0.06 -0.06 -0.06 -0.04866667
sw.pvalue   1.00  1.00  1.0 1.00  1.00  1.00  1.00  1.00000000
sf.pvalue   1.00  1.00  1.0 1.00  1.00  1.00  1.00  1.00000000
jb.pvalue   1.00  1.00  1.0 1.00  1.00  1.00  1.00  1.00000000

Реализации

  • MATLAB: функция boxcox из Financial toolbox.
  • R: функция boxcox для линейных моделей в пакете MASS, boxcoxnc в пакете AID, box.cox в пакете car.

Ссылки

Личные инструменты