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

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

(Различия между версиями)
Перейти к: навигация, поиск
(Новая: В реальности часто приходится иметь дело со статистическими данными, которые по тем или иным причина...)
(категория, ссылки)
 
(6 промежуточных версий не показаны.)
Строка 1: Строка 1:
-
В реальности часто приходится иметь дело со статистическими данными, которые по тем или иным причинам не проходят тест на нормальность. В этой ситуации есть два выхода: либо обратиться к непараметрическим методам, либо воспользоваться специальными методами, позволяющими преобразовать исходную «ненормальную статистику» в «нормальную». Среди множества таких методов преобразований одним из лучших (при неизвестном типе распределения) считается преобразование Бокса-Кокса.
+
В реальности часто приходится иметь дело со статистическими данными, которые по тем или иным причинам не проходят [[Проверка статистических гипотез#Критерии нормальности|тест на нормальность]]. В этой ситуации есть два выхода: либо обратиться к непараметрическим методам, либо воспользоваться специальными методами, позволяющими преобразовать исходную «ненормальную статистику» в «нормальную». Среди множества таких методов преобразований одним из лучших (при неизвестном типе распределения) считается преобразование Бокса-Кокса.
==Вид преобразования==
==Вид преобразования==
-
Для исходной последовательности <tex>y = \{ y_1, \ldots, y_n \}, \quad y_i > 0, \quad i = 1,\ldots,n</tex> однопараметрическое преобразование Бокса-Кокса определяется следующим образом:
+
Для исходной последовательности <tex>y = \{ y_1, \ldots, y_n \}, \quad y_i > 0, \quad i = 1,\ldots,n</tex> однопараметрическое преобразование Бокса-Кокса с параметром <tex>\lambda</tex> определяется следующим образом:
:<tex> 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}</tex>
:<tex> 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}</tex>
 +
 +
Параметр <tex>\lambda</tex> можно выбирать, максимизируя логарифм правдоподобия.
 +
Еще один способ поиска оптимального значения параметра основан на поиске максимальной величины коэффициента корреляции между квантилями функции нормального распределения и отсортированной преобразованной последовательностью.
 +
 +
==Модификации==
 +
 +
Так как исходный метод предполагает работу только с положительными величинами, было предложено несколько модификаций, учитывающих нулевые и отрицательные значения.
 +
 +
Самый очевидный вариант - сдвиг всех значений на константу <tex>\alpha</tex> так, чтобы выполнялось условие <tex>\quad (y_i + \alpha)> 0, \quad i = 1,\ldots,n</tex>. После этого преобразование выглядит так:
 +
 +
:<tex> 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}</tex>
 +
 +
Еще более общая форма:
 +
 +
:<tex>\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}</tex>
 +
 +
где <tex>\quad \operatorname{GM}(y) = (y_1\cdots y_n)^{1/n}</tex>.
 +
 +
== Пример ==
 +
[[Изображение:data_qqplot.png|thumb|qqplot для исходных данных.]]
 +
[[Изображение:norm_tests_plot.png|thumb|Графики статистик для всех использованных тестов на нормальность.]]
 +
[[Изображение:transformed_qqplot.png|thumb|qqplot для данных, преобразованных методом Бокса-Кокса с <tex>\lambda=-0.06</tex>.]]
 +
 +
В системе R с использованием пакета <code>AID</code>:
 +
<pre>
 +
> 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
 +
</pre>
 +
 +
== Реализации ==
 +
* MATLAB: функция [http://www.mathworks.com/help/finance/boxcox.html <code>boxcox</code>] из <code>Financial toolbox</code>.
 +
* R: функция [http://stat.ethz.ch/R-manual/R-devel/library/MASS/html/boxcox.html <code>boxcox</code>] для линейных моделей в пакете <code>MASS</code>, [http://cran.r-project.org/web/packages/AID/AID.pdf <code>boxcoxnc</code>] в пакете <code>AID</code>, [http://hosho.ees.hokudai.ac.jp/~kubo/Rdoc/library/car/html/box.cox.html <code>box.cox</code>] в пакете <code>car</code>.
== Ссылки ==
== Ссылки ==
Строка 10: Строка 52:
* Статьи по автоматическому трейдингу и оптимизации стратегий: [http://www.mql5.com/ru/articles/363 "Преобразование Бокса-Кокса"].
* Статьи по автоматическому трейдингу и оптимизации стратегий: [http://www.mql5.com/ru/articles/363 "Преобразование Бокса-Кокса"].
* А.Н. Порунов (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"].
 +
* EnWiki: [http://en.wikipedia.org/wiki/Power_transform Power_transform]
 +
 +
[[Категория:Энциклопедия анализа данных]]

Текущая версия

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

Содержание

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

Для исходной последовательности 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 + \alpha)> 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.

Ссылки

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