Бокс-Кокса как преобразование для независимых переменных?

53

Существует ли преобразование типа Бокса-Кокса для независимых переменных? То есть преобразование, которое оптимизирует переменную так, чтобы она более подходила для линейной модели?xy~f(x)

Если да, есть ли функция для выполнения этого R?

Таль Галили
источник
1
Я не знаю каких-либо возможностей для этого, Rи, подумав немного, я не уверен, как именно это можно сделать вообще. Какие критерии вы бы оптимизировали для обеспечения «наиболее линейного» преобразования? заманчиво, но, как видно из моего ответа здесь , один нельзя использовать, чтобы увидеть, выполняется ли предположение о линейности модели. Были ли у вас какие-то критерии? R2R2
Макрос
1
У меня сложилось впечатление, что я уже видел газету, рассказывающую об этом. Возможно, прибегнуть к помощи «ковариации» вместо «независимой переменной» более разумно.
Стефан Лоран
Я думаю (из памяти ...) есть некоторая реализация этого в автомобильном пакете (R). Но вы также должны исследовать игру как в пакете gmcv.
kjetil b halvorsen
Поток, который обсуждает автоматический вывод параметров Box-Cox (путем одновременного преобразования всех независимых переменных вместе с зависимой переменной), появился на stats.stackexchange.com/questions/60431/… .
whuber

Ответы:

72

Джон Тьюки отстаивал свой « трехточечный метод » для нахождения повторных выражений переменных для линеаризации отношений.

Я проиллюстрирую это упражнением из его книги « Исследовательский анализ данных» . Это данные о давлении паров ртути из эксперимента, в котором температура изменялась, и давление паров измерялось.

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

Соотношение сильно нелинейное: см. Левую панель на рисунке.

Сюжеты

Поскольку это предварительное упражнение, мы ожидаем, что оно будет интерактивным. Аналитика просят начать с определения трех «типичных» точек на графике : одна возле каждого конца и одна в середине. Я сделал это здесь и пометил их красным. (Когда я впервые выполнил это упражнение, я использовал другой набор точек, но пришел к тем же результатам.)

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

По причинам, которые станут понятны позже, я расширил семейство Бокса-Кокса, допустив «смещение», чтобы преобразования имели вид

x(x+α)λ1λ.

Вот быстрая и грязная 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получается равным : метод выбирает лог-преобразование давления.(0,0)

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

parms <- threepoint(y[i3], temperature[i3])
x <- box.cox(temperature, parms)

parmsНайдены значения для независимой переменной (температуры) : другими словами, мы должны выразить температуру в градусах Цельсия выше C и использовать ее обратную ( степень ). (По техническим причинам преобразование Бокса-Кокса дополнительно добавляет к результату.) Результирующее соотношение показано на правой панели.- 254 - 1 1(1,253.75)25411


К настоящему времени любой человек с наименьшим научным прошлым осознал, что данные «подсказывают» нам использовать абсолютные температуры - где смещение составляет вместо потому что они будут физически значимыми. (Когда последний график перерисовывается с использованием смещения вместо , видимых изменений мало. Затем физик пометил бы ось X с помощью : то есть обратной абсолютной температуры.)254 273 254 1 / ( 1 - х )2732542732541/(1x)

Это хороший пример того, как статистическое исследование должно взаимодействовать с пониманием предмета исследования . Фактически, взаимные абсолютные температуры все время проявляются в физических законах. Следовательно, используя только простые методы EDA для изучения этого простого набора данных, которому уже сто лет, мы заново открыли соотношение Клаузиуса-Клапейрона : логарифм давления пара является линейной функцией обратной абсолютной температуры. Мало того, у нас есть не очень плохая оценка абсолютного нуля (0254градусов C), по наклону правого графика мы можем рассчитать удельную энтальпию испарения, и, как выясняется, тщательный анализ остатков идентифицирует выброс (значение при температуре градусов C), показывает нам, как энтальфия испарения изменяется (очень незначительно) с температурой (тем самым нарушая закон идеального газа), и в конечном итоге может дать нам точную информацию об эффективном радиусе молекул ртутного газа! Все это из 19 пунктов данных и некоторые базовые навыки в EDA.0

Whuber
источник
2
Привет дорогой Вубер. Какой интересный ответ я прочитал с удовольствием, спасибо! (и я также немного поиграю с этим, чтобы увидеть, как это может соответствовать проблеме, с которой я работаю)
Tal Galili
3
@Andre Чтобы использовать последнюю часть этого кода, вам нужно связать переменные x и y в матрицу by , как в . (Это было сделано для того, чтобы соответствовать способу, которым данные (x, y) обычно хранятся в виде матрицы или фрейма данных.) Я прошу прощения за то, что пропустил этот шаг, и отредактировал ответ, чтобы включить его - посмотрите, это работает. 2n2data <- cbind(temperature, pressure)R
whuber
2
@landroni Интегральные и малые дробные степени часто возникают в физических, химических и биологических теориях, а также из-за геометрических соображений. (Например, когда переменная является объемом, ее корень куба является длиной - которая интерпретируема - тогда как, скажем, ее седьмой корень не имеет простой геометрической интерпретации.) Другие полномочия редко имеют такую ​​интерпретацию.
whuber
3
@Frank Это верно; это явно и беззастенчиво исследовательский метод. Обратите внимание, что он даже не претендует на прогноз. Исследование может только предложить способы продолжить. Тем не менее, можно представить, что для оценки этих преобразований выделяется четыре df вашего бюджета на моделирование, и оценка может быть автоматически включена в алгоритм подбора, используя подход Тьюки или иным образом (ML является очевидной возможностью).
whuber
5
Они не учитывают (очень значительное количество) неопределенности в преобразовании, если только центрирование и оценка являются явными частями информационной матрицы. Y λYYλ
Фрэнк Харрелл
11

Взгляните на эти слайды «Диагностика регрессии» Джона Фокса (доступны здесь , в комплекте со ссылками), в которых кратко обсуждается проблема трансформации нелинейности. Он охватывает «правило выпуклости» Тьюки для выбора степенных преобразований (на которые ссылается принятый ответ), но также упоминает семейства преобразований Бокса-Кокса и Йео-Джонсона. Смотрите раздел 3.6 слайдов. Для более формального взятия того же автора см. J. Fox, Прикладной регрессионный анализ и Обобщенные линейные модели, второе издание (Sage, 2008) .

Что касается фактических пакетов R, которые помогают с этим, абсолютно взгляните на автомобильный пакет, созданный Дж. Фоксом и С. Вайсбергом. Этот пакет сопровождает Дж. Фокса и С. Вайсберга, «Компаньон R в прикладной регрессии», второе издание (Sage, 2011) , еще одно обязательное чтение. Используя этот пакет, вы можете начать с basicPower()(простых степенных преобразований), bcPower()(преобразований Бокса-Кокса) и yjPower()(преобразований Йео-Джонсона). Также есть powerTransform () :

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

Проверьте обе книги для более подробной информации о теории этих преобразований и вычислительных подходов.

landroni
источник
9

Есть много преимуществ в том, чтобы сделать оценку ковариатных преобразований формальной частью процесса оценки. Это позволит определить количество задействованных параметров и обеспечить хорошее покрытие доверительных интервалов и сохранение ошибок I типа. Сплайны регрессии являются одними из лучших подходов. И сплайны будут работать с нулевыми и отрицательными значениями отличие от логарифмических подходов.X

Фрэнк Харрелл
источник