Коробка Кокса Преобразования для регрессии


9

Я пытаюсь согласовать линейную модель с некоторыми данными только одним предиктором (скажем, (x, y)). Данные таковы, что для малых значений x значения y обеспечивают плотное прилегание к прямой линии, однако при увеличении значений x значения y становятся более изменчивыми. Вот пример таких данных (R код)

y = c(3.2,3.4,3.5,3.8,4.2,5.5,4.5,6.8,7.4,5.9)
x = seq(1,10,1)

Мне любопытно узнать, существует ли какое-либо преобразование мощности (возможно, Box cox?), Которое позволяет мне лучше соответствовать данным, чем просто выполнять линейное соответствие, как показано ниже.

fit = lm(y ~ x)

Насколько я понимаю, цель таких преобразований, как Box Cox, состоит не в том, чтобы лучше соответствовать, а в том, чтобы соответствовать предположениям модели. Это может быть лучше, хуже или не сильно меняться, но это будет подход, который не нарушает предположения.
Питер Флом

Нелинейное преобразование сделает линейные отношения нелинейными (хотя иногда вы можете также преобразовать x и исправить это). Тем не менее, трансформация может также выправить изогнутую и в то же время уменьшить гетероскедастичность (хотя не всегда возможно сделать и то и другое с одним и тем же трансформацией). Для этих данных лог-преобразование несколько помогает.
Glen_b

4
Используя два крайних и средних (пятых) значения , метод, показанный по адресу stats.stackexchange.com/questions/35711/…, указывает, что логарифм (преобразование Бокса-Кокса с параметром 0) будет подходящим для линеаризации отношения. Использование первого, шестого и последнего значений указывает, что обратная величина (параметр -1) будет хорошей. Это говорит о том, что может работать практически любой параметр от 0 до -1. Диапазон не удивителен, учитывая, как мало данных. Никакое монотонное повторное выражение не стабилизирует изменение для этих данных. Y
whuber

Ответы:


6

Пакет MASS, который поставляется с уже установленным R, имеет boxcox()функцию, которую вы можете использовать: После прочтения данных выполните:

library(MASS)
boxcox(y ~ x)

Затем посмотрите на полученный график, который графически показывает 95% доверительный интервал для параметра преобразования boxcox. Но у вас на самом деле недостаточно данных (n = 10), чтобы сделать это, результирующий доверительный интервал увеличивается почти от -2 до 2 !, с максимальной вероятностной оценкой, равной приблизительно 0 (логарифмическое преобразование, как было сказано ранее). Если ваши реальные данные имеют больше наблюдений, вы должны попробовать это.

Как уже говорили другие, это преобразование действительно пытается стабилизировать отклонения. Из теории не совсем очевидно, что она пытается максимизировать основанную на нормальном распределении функцию правдоподобия, которая предполагает постоянную дисперсию. Можно подумать, что максимизация вероятности, основанной на норме, попыталась бы нормализовать распределение остатков, но на практике основной вклад в максимизацию вероятности вносит стабилизация отклонений. Возможно, это не так удивительно, учитывая, что вероятность, которую мы максимизируем, основана на семействе нормальных распределений с постоянной дисперсией!

Однажды я написал демонстрацию на основе слайдера в XLispStat, которая наглядно продемонстрировала это!


3

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

Процедура AVAS может использоваться для предложения возможных преобразований.


YИкс15x510Y

Согласитесь с @whuber
брокколи

1
Я согласен с @whuber для этого конкретного набора данных, я просто предположил, что эти данные были быстро составлены для иллюстрации (и, следовательно, показывают отсутствие случайности / реальности у человека). Мой ответ - это скорее общий совет для общего случая неравных отклонений.
Грег Сноу

Учитывая, что дисперсия увеличивается с x, обрежет ли ее glmкаркас с функцией связи Пуассона?
Роман Луштрик

3
Y

1

Ну, в R вы можете попробовать это:

library(MASS)
boxcox(y~x)
plot(1/y^2~x) # since the profile likelihood has a maximum near 2

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

Но это действительно зависит от того, что вы подразумеваете под «лучшим соответствием данным»


-2

хорошо, если все ваши данные для x неотрицательны, то вы можете использовать преобразование Кокса блока ..., чтобы оценить идеальное значение параметра лямбда-преобразования, вы можете использовать matlab ... http://www.mathworks.in/ помощь / финансы / boxcox.html


1
«Идеал» здесь означает нечто иное, чем просили в вопросе. Вопрос состоит в том, чтобы стабилизировать дисперсии, в то время как решение Matlab стремится сделать их как можно ближе к нормальному распределению.
whuber
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.