R

如何執行等距對數比變換

  • January 31, 2017

我有關於運動行為(睡眠、久坐和進行體育活動的時間)的數據,總和約為 24(以每天的小時數為單位)。我想創建一個變量來捕獲在這些行為中花費的相對時間——有人告訴我,等距對數比變換可以實現這一點。

看起來我應該在 R 中使用 ilr 函數,但找不到任何帶有代碼的實際示例。我從哪裡開始?

我的變量是睡眠時間、平均久坐時間、平均平均輕度體育活動、平均中等體育活動和平均劇烈體育活動。睡眠是自我報告的,而其他的則是加速度計數據有效天數的平均值。因此,對於這些變量,案例的總和並不完全是 24。

我的猜測:我在 SAS 工作,但看起來 R 會更容易用於這部分。因此,首先導入僅包含感興趣變量的數據。然後使用 acomp() 函數。然後我無法弄清楚 ilr() 函數的語法。任何幫助將非常感激。

ILR(等距對數比)變換用於成分數據的分析。任何給定的觀察結果都是一組總和為單位的正值,例如混合物中化學物質的比例或在各種活動中花費的總時間的比例。總和不變量意味著雖然可能有 $ k\ge 2 $ 每個觀察的組成部分,只有 $ k-1 $ 功能獨立的值。(在幾何上,觀測值位於 $ k-1 $ -維單純形 $ k $ 維歐幾里得空間 $ \mathbb{R}^k $ . 這種簡單的性質體現在如下所示的模擬數據散點圖的三角形中。)

通常,當對數轉換時,組件的分佈會變得“更好”。在取對數之前,可以通過將觀察中的所有值除以它們的幾何平均值來縮放這種轉換。(等效地,任何觀察中數據的對數都通過減去它們的平均值來居中。)這被稱為“居中對數比率”轉換,或 CLR。結果值仍然位於超平面內 $ \mathbb{R}^k $ ,因為縮放會導致對數之和為零。ILR 包括為此超平面選擇任何正交基: $ k-1 $ 每個轉換後的觀察坐標成為其新數據。等效地,超平面被旋轉(或反射)以與消失的平面重合 $ k^\text{th} $ 坐標和一個使用第一個 $ k-1 $ 坐標。(因為旋轉和反射保持距離,所以它們是等距的,因此該過程的名稱。)

Tsagris、Preston 和 Wood 指出“[旋轉矩陣]的標準選擇 $ H $ 是從 Helmert 矩陣中刪除第一行得到的 Helmert 子矩陣。"

赫爾默特矩陣 $ k $ 以簡單的方式構建(例如,參見 Harville 第 86 頁)。它的第一行是所有 $ 1 $ s。下一行是可以與第一行正交的最簡單的行之一,即 $ (1, -1, 0, \ldots, 0) $ . 排 $ j $ 是與所有前面的行正交的最簡單的行之一:它的第一個 $ j-1 $ 條目是 $ 1 $ s,保證它與行正交 $ 2, 3, \ldots, j-1 $ , 及其 $ j^\text{th} $ 條目設置為 $ 1-j $ 使其與第一行正交(即,其條目的總和必須為零)。然後將所有行重新縮放為單位長度。

在這裡,為了說明模式,是 $ 4\times 4 $ Helmert 矩陣在其行被重新縮放之前:

$$ \pmatrix{1&1&1&1 \ 1&-1&0&0 \ 1&1&-2&0 \ 1&1&1&-3}. $$

(編輯於 2017 年 8 月添加)這些“對比”(逐行閱讀)的一個特別好的方面是它們的可解釋性。第一行被刪除,離開 $ k-1 $ 剩餘的行來表示數據。第二行與第二個變量和第一個變量之間的差異成正比。第三行與第三個變量和前兩個變量之間的差異成正比。一般來說,排 $ j $ ( $ 2\le j \le k $ ) 反映變量之間的差異 $ j $ 以及它之前的所有變量,變量 $ 1, 2, \ldots, j-1 $ . 這留下了第一個變量 $ j=1 $ 作為所有對比的“基礎”。在通過主成分分析 (PCA) 遵循 ILR 時,我發現這些解釋很有幫助:它可以根據原始變量之間的比較,至少粗略地解釋載荷。R我在下面的實現中插入了一行ilr,它為輸出變量提供了合適的名稱來幫助解釋。(編輯結束。)

由於R提供了contr.helmert創建此類矩陣的函數(儘管沒有縮放,並且行和列被否定和轉置),因此您甚至不必編寫(簡單)代碼即可。使用它,我實現了 ILR(見下文)。為了鍛煉和測試它,我生成了 $ 1000 $ 從 Dirichlet 分佈中獨立抽取(帶參數 $ 1,2,3,4 $ ) 並繪製了它們的散點圖矩陣。這裡, $ k=4 $ .

圖1

這些點都聚集在左下角附近並填充其繪圖區域的三角形斑塊,這是組成數據的特徵。

他們的 ILR 只有三個變量,再次繪製為散點圖矩陣:

圖_2

這確實看起來更好:散點圖獲得了更具特徵的“橢圓雲”形狀,更適合二階分析,例如線性回歸和 PCA。

Tsagris*等人。*通過使用 Box-Cox 變換來概括 CLR,該變換概括了對數。(日誌是帶有參數的 Box-Cox 變換 $ 0 $ .) 它很有用,因為正如作者(正確地恕我直言)所說,在許多應用程序中,數據應該確定它們的轉換。對於這些 Dirichlet 數據,參數為 $ 1/2 $ (介於無轉換和對數轉換之間)效果很好:

圖_3

**“美麗”指的是這張圖片允許的簡單描述:**不必指定每個點雲的位置、形狀、大小和方向,我們只需要觀察(非常近似)所有云都是具有相似半徑的圓形. 實際上,CLR 已將需要至少 16 個數字的初始描述簡化為僅需要 12 個數字的描述,而 ILR 已將其減少到僅需要 4 個數字(三個單變量位置和一個半徑),代價是指定 ILR 參數為 $ 1/2 $ ——第五個數字。當真實數據發生如此戲劇性的簡化時,我們通常認為我們正在做某事:我們已經發現或獲得了洞察力。


這種泛化在下面的ilr函數中實現。產生這些“Z”變量的命令很簡單

z <- ilr(x, 1/2)

Box-Cox 變換的一個優點是它適用於包含真零的觀察:只要參數為正,它仍然被定義。

參考

Michail T. Tsagris、Simon Preston 和 Andrew TA Wood,基於數據的成分數據功率轉換arXiv:1106.1451v2 [stat.ME] 2011 年 6 月 16 日。

David A. Harville,從統計學家的角度看矩陣代數。施普林格科學與商業媒體,2008 年 6 月 27 日。


這是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)

引用自:https://stats.stackexchange.com/questions/259208

comments powered by Disqus