Преобразование ILR (Isometric Log-Ratio) используется при анализе композиционных данных. Любое данное наблюдение представляет собой набор положительных значений, суммирующих единицу, таких как пропорции химических веществ в смеси или пропорции общего времени, потраченного на различные виды деятельности. Инвариант суммы к единице подразумевает, что, хотя в каждом наблюдении может быть k≥2 компонентов, существует только k−1 функционально независимых значений. (Геометрически наблюдения лежат на k−1 мерном симплексе в k мерном евклидовом пространстве Rk, Эта симплициальная природа проявляется в треугольных формах диаграмм рассеяния смоделированных данных, показанных ниже.)
Как правило, распределение компонентов становится «приятнее» при преобразовании журнала. Это преобразование может быть масштабировано путем деления всех значений в наблюдении на их среднее геометрическое значение, прежде чем брать записи. (Эквивалентно, журналы данных в любом наблюдении центрируются путем вычитания их среднего значения.) Это известно как преобразование «Центрированное логарифмическое отношение», или CLR. Результирующие значения все еще лежат в гиперплоскости в Rk , потому что масштабирование приводит к тому, что сумма лог-файлов равна нулю. ILR состоит из выбора любого ортонормированного базиса для этой гиперплоскости:k−1координаты k - 1 каждого преобразованного наблюдения становятся его новыми данными. Эквивалентно, гиперплоскость поворачивается (или отражается), чтобы совпадать с плоскостью с исчезающимkth координата использует первыеk−1 координаты. (Поскольку вращения и отражения сохраняют расстояние, они являютсяизометриями, отсюда и название этой процедуры.)
Цагрис, Престон и Вуд утверждают, что «стандартный выбор [матрицы вращения] H - это подматрица Гельмерта, полученная путем удаления первой строки из матрицы Гельмерта».
Матрица Гельмерта порядка k строится простым образом (см., Например, Harville p. 86). Его первый ряд - все 1 с. Следующая строка является одной из самых простых, которые можно сделать ортогональными к первой строке, а именно (1,−1,0,…,0) . Строка j является одной из самых простых, которая ортогональна всем предыдущим строкам: ее первые j−1 записи равны 1 с, что гарантирует ее ортогональность строкам 2,3,…,j−1и его jth запись установлена в 1−j чтобы сделать ее ортогональной первой строке (то есть ее записи должны суммироваться до нуля). Все строки затем изменяются на единицу длины.
Здесь, чтобы проиллюстрировать шаблон, это 4×4матрица Гельмерта 4 до того, как ее строки были перемасштабированы:
⎛⎝⎜⎜⎜11111- 11110- 21100- 3⎞⎠⎟⎟⎟,
(Редактирование добавлено в августе 2017 г.) Одним из особенно приятных аспектов этих «контрастов» (которые читаются построчно) является их интерпретируемость. Первая строка удаляется, оставляя к - 1 оставшихся строк для представления данных. Второй ряд пропорционален разнице между второй переменной и первой. Третий ряд пропорционален разнице между третьей переменной и первыми двумя. Обычно строка J ( 2 ≤ j ≤ k ) отражает разницу между переменной J и всеми предшествующими ей переменными 1 , 2 , … , j - 1, Это оставляет первую переменную J = 1 в качестве «основы» для всех контрастов. Я нашел эти интерпретации полезными, когда следовал ILR анализом главных компонентов (PCA): он позволяет интерпретировать нагрузки, по крайней мере, приблизительно, с точки зрения сравнений между исходными переменными. Я вставил строку в R
реализацию ilr
ниже, которая дает выходным переменным подходящие имена, чтобы помочь с этой интерпретацией. (Конец редактирования.)
Поскольку R
предоставляет функцию contr.helmert
для создания таких матриц (хотя и без масштабирования, а строки и столбцы обнуляются и транспонируются), вам даже не нужно писать (простой) код для этого. Используя это, я реализовал ILR (см. Ниже). Чтобы проверить и протестировать его, я сгенерировал 1000 независимых отрисовок из распределения Дирихле (с параметрами 1 , 2 , 3 , 4 ) и нанес на график их матрицу рассеяния. Здесь к = 4 .
Все точки слипаются около нижних левых углов и заполняют треугольные участки их областей построения, что характерно для композиционных данных.
Их ILR имеет только три переменные, опять же построенные в виде матрицы рассеяния:
Это действительно выглядит лучше: диаграммы рассеяния приобрели более характерные формы «эллиптического облака», лучше поддающиеся анализам второго порядка, таким как линейная регрессия и PCA.
Цагрис и соавт. обобщить CLR, используя преобразование Бокса-Кокса, которое обобщает логарифм. (Журнал представляет собой преобразование Бокса-Кокса с параметром 0 ) Это полезно, поскольку, как утверждают авторы (правильно ИМХО), во многих приложениях данные должны определять их преобразование. Для этих данных Дирихля параметр 1 / 2 (который находится на полпути между отсутствием трансформации и преобразованием журнала) прекрасно работает:
1 / 2 или достигли понимания.
Это обобщение реализовано в ilr
функции ниже. Команда для создания этих «Z» переменных была просто
z <- ilr(x, 1/2)
Одним из преимуществ преобразования Бокса-Кокса является его применимость к наблюдениям, которые содержат истинные нули: он все еще определяется, если параметр положительный.
Ссылки
Михаил Т. Цагрис, Саймон Престон и Эндрю Т.А. Вуд. Преобразование мощности на основе данных для композиционных данных . arXiv: 1106.1451v2 [stat.ME] 16 июня 2011 г.
Дэвид А. Харвилл, Матричная алгебра с точки зрения статистики . Springer Science & Business Media, 27 июня 2008 г.
Вот R
код
#
# ILR (Isometric log-ratio) transformation.
# `x` is an `n` by `k` matrix of positive observations with k >= 2.
#
ilr <- function(x, p=0) {
y <- log(x)
if (p != 0) y <- (exp(p * y) - 1) / p # Box-Cox transformation
y <- y - rowMeans(y, na.rm=TRUE) # Recentered values
k <- dim(y)[2]
H <- contr.helmert(k) # Dimensions k by k-1
H <- t(H) / sqrt((2:k)*(2:k-1)) # Dimensions k-1 by k
if(!is.null(colnames(x))) # (Helps with interpreting output)
colnames(z) <- paste0(colnames(x)[-1], ".ILR")
return(y %*% t(H)) # Rotated/reflected values
}
#
# Specify a Dirichlet(alpha) distribution for testing.
#
alpha <- c(1,2,3,4)
#
# Simulate and plot compositional data.
#
n <- 1000
k <- length(alpha)
x <- matrix(rgamma(n*k, alpha), nrow=n, byrow=TRUE)
x <- x / rowSums(x)
colnames(x) <- paste0("X.", 1:k)
pairs(x, pch=19, col="#00000040", cex=0.6)
#
# Obtain the ILR.
#
y <- ilr(x)
colnames(y) <- paste0("Y.", 1:(k-1))
#
# Plot the ILR.
#
pairs(y, pch=19, col="#00000040", cex=0.6)
Для вашего случая использования, вероятно, можно просто уменьшить масштаб до одного. Тот факт, что числа не суммируют ровно 24, добавит немного дополнительного шума в данные, но это не должно сильно портить ситуацию.
Помимо всех технических деталей, важно знать, как правильно интерпретировать преобразованные данные. В конце концов, ilr-преобразование относится только к логарифмам групп. Но это определяет это относительно некоторой предопределенной иерархии. Если вы определите иерархию следующим образом
каждая преобразованная переменная может быть рассчитана как
Итак, следующий вопрос: как вы определяете иерархию переменных? Это действительно зависит от вас, но если у вас есть три переменные, не так много комбинаций, с которыми можно связываться. Например, вы можете просто определить иерархию
A
B
C
(A|B)
Но возвращаясь к исходному вопросу, как вы можете использовать эту информацию для фактического выполнения преобразования ilr?
Если вы используете R, я бы ознакомился с пакетом композиций
Чтобы использовать этот пакет, вам нужно понять, как создать последовательный двоичный раздел (SBP), как вы определяете иерархию. Для иерархии, определенной выше, вы можете представить SBP со следующей матрицей.
где положительные значения представляют переменные в числителе, отрицательные значения представляют переменные в знаменателе, а нули представляют отсутствие этой переменной в балансе. Вы можете построить ортонормированную основу, используя
balanceBase
из SBP, который вы определили.Как только вы это сделаете, вы сможете передать свою таблицу пропорций вместе с базой, которую вы рассчитали выше.
Я бы проверил эту ссылку для первоначального определения сальдо
источник
Вышеприведенные сообщения ответа на вопрос о том , как построить в ILR базу и получить остатки ILR. Чтобы добавить к этому, выбор которых основа может облегчить интерпретацию результатов.
Вас может заинтересовать раздел следующего раздела:
(1) (спящий, сидячий | физическая активность) (2) (спящий | сидячий).
Поскольку у вас есть три части в вашем составе, вы получите два ILR-баланса для анализа. Установив раздел, как описано выше, вы можете получить баланс, соответствующий «активен или нет» (1) и «какая форма неактивности» (2).
Если вы анализируете каждый баланс ILR отдельно, например, выполняя регрессию по времени суток или времени года, чтобы увидеть, есть ли какие-либо изменения, вы можете интерпретировать результаты в терминах изменений «активно или нет» и изменений в «какая форма бездействия».
Если, с другой стороны, вы будете выполнять такие методы, как PCA, которые получают новую основу в пространстве ILR, ваши результаты не будут зависеть от вашего выбора раздела. Это связано с тем, что ваши данные существуют в пространстве CLR, плоскости D-1, ортогональной к одному вектору, а весы ILR являются различными вариантами осей единичной нормы для описания положения данных на плоскости CLR.
источник