Метод Бокса-Кокса
Материал из MachineLearning.
(категория, ссылки) |
|||
| (5 промежуточных версий не показаны.) | |||
| Строка 1: | Строка 1: | ||
| - | В реальности часто приходится иметь дело со статистическими данными, которые по тем или иным причинам не проходят тест на нормальность. В этой ситуации есть два выхода: либо обратиться к непараметрическим методам, либо воспользоваться специальными методами, позволяющими преобразовать исходную «ненормальную статистику» в «нормальную». Среди множества таких методов преобразований одним из лучших (при неизвестном типе распределения) считается преобразование Бокса-Кокса. | + | В реальности часто приходится иметь дело со статистическими данными, которые по тем или иным причинам не проходят [[Проверка статистических гипотез#Критерии нормальности|тест на нормальность]]. В этой ситуации есть два выхода: либо обратиться к непараметрическим методам, либо воспользоваться специальными методами, позволяющими преобразовать исходную «ненормальную статистику» в «нормальную». Среди множества таких методов преобразований одним из лучших (при неизвестном типе распределения) считается преобразование Бокса-Кокса. |
==Вид преобразования== | ==Вид преобразования== | ||
| Строка 5: | Строка 5: | ||
:<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> можно выбирать, максимизируя логарифм правдоподобия. | ||
| + | Еще один способ поиска оптимального значения параметра основан на поиске максимальной величины коэффициента корреляции между квантилями функции нормального распределения и отсортированной преобразованной последовательностью. | ||
==Модификации== | ==Модификации== | ||
| Строка 10: | Строка 13: | ||
Так как исходный метод предполагает работу только с положительными величинами, было предложено несколько модификаций, учитывающих нулевые и отрицательные значения. | Так как исходный метод предполагает работу только с положительными величинами, было предложено несколько модификаций, учитывающих нулевые и отрицательные значения. | ||
| - | Самый очевидный вариант - сдвиг всех значений на константу <tex>\alpha</tex> так, чтобы выполнялось условие <tex>\quad (y_i + \ | + | Самый очевидный вариант - сдвиг всех значений на константу <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> 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>\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>. | где <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>. | ||
== Ссылки == | == Ссылки == | ||
| Строка 23: | Строка 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] | ||
| + | |||
| + | [[Категория:Энциклопедия анализа данных]] | ||
Текущая версия
В реальности часто приходится иметь дело со статистическими данными, которые по тем или иным причинам не проходят тест на нормальность. В этой ситуации есть два выхода: либо обратиться к непараметрическим методам, либо воспользоваться специальными методами, позволяющими преобразовать исходную «ненормальную статистику» в «нормальную». Среди множества таких методов преобразований одним из лучших (при неизвестном типе распределения) считается преобразование Бокса-Кокса.
Содержание |
Вид преобразования
Для исходной последовательности однопараметрическое преобразование Бокса-Кокса с параметром
определяется следующим образом:
Параметр можно выбирать, максимизируя логарифм правдоподобия.
Еще один способ поиска оптимального значения параметра основан на поиске максимальной величины коэффициента корреляции между квантилями функции нормального распределения и отсортированной преобразованной последовательностью.
Модификации
Так как исходный метод предполагает работу только с положительными величинами, было предложено несколько модификаций, учитывающих нулевые и отрицательные значения.
Самый очевидный вариант - сдвиг всех значений на константу так, чтобы выполнялось условие
. После этого преобразование выглядит так:
Еще более общая форма:
где .
Пример
В системе 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.
Ссылки
- Box, Cox (1964) "An Analysis of Transformations"
- Статьи по автоматическому трейдингу и оптимизации стратегий: "Преобразование Бокса-Кокса".
- А.Н. Порунов (2010). "Бокс-Кокс преобразование и иллюзия "нормальности" макроэкономического ряда".
- D. Scott, "Box-Cox transformation".
- EnWiki: Power_transform

