如何执行等距对数比转换


18

我的运动行为(睡眠,久坐和进行体育锻炼所花费的时间)数据总计约为24(以每天的小时数表示)。我想创建一个变量,以捕获在每种行为中花费的相对时间-有人告诉我,等距对数比转换可以完成此任务。

看来我应该在R中使用ilr函数,但是找不到任何带有代码的实际示例。我从哪里开始?

我的变量是睡眠时间,平均久坐时间,平均平均轻度运动,平均中等强度的运动和平均剧烈运动。睡眠是自我报告的,而其他睡眠则是加速度计数据有效天的平均值。因此,对于这些变量,情况不等于24。

我的猜测:我正在SAS中工作,但是看起来R在这部分将更容易使用。因此,首先仅导入感兴趣变量的数据。然后使用acomp()函数。然后我无法弄清楚ilr()函数的语法。任何帮助将非常感激。

Answers:


21

ILR(等距对数比)转换用于成分数据分析。任何给定的观察值都是一组合计为一个正值的正值,例如混合物中化学物质的比例或用于各种活动的总时间的比例。总和不变表示每个观察可能有分量,但只有功能独立的值。(在几何上,观测值位于维欧氏空间的维单形上。这种简单性体现在下面显示的模拟数据散点图的三角形中。)k2k1k1kRk

典型地,组分的分布变得“更好”,当对数转换。在取对数之前,可以通过将观察值中的所有值除以其几何平均值来缩放此转换。(等效地,任何观察中数据的对数通过减去它们的均值来居中。)这称为“居中对数比”转换或CLR。结果值仍位于的超平面内,因为缩放导致对数之和为零。所述ILR包括选择该超平面的任何正交基础的:所述的每个变换观测坐标成为其新的数据。等价地,超平面被旋转(或反射的),以重合与平面具有消失Rkk1kth k1坐标,然后使用第一个坐标。(由于旋转和反射保留了距离,因此它们是等距的,因此此程序为该名称。)k1

Tsagris,普雷斯顿和伍德状态“下的标准选择[旋转矩阵]是通过从矩阵赫尔默特去除第一行得到的赫尔默特子矩阵”。H

阶Helmert矩阵以简单的方式构造(例如,参见Harville p。86)。它的第一行都是 s。下一行是与第一行正交的最简单的一行,即。第行是与所有先前行正交的最简单的行:它的前个条目为 s,这保证了它与第行正交k1(1,1,0,,0)jj112,3,,j1及其项设置为,使之正交于所述第一行(即,其条目总和必须为零)。然后将所有行重新缩放为单位长度。jth1j

在这里,为了说明这种模式,在重新缩放行之前是 × Helmert矩阵:4×4

(1111110011201113).

(编辑于2017年8月添加)这些“对比”(逐行读取)的一个特别好的方面是它们的可解释性。删除第一行,剩下剩余行代表数据。第二行与第二个变量和第一个变量之间的差成比例。第三行与第三变量和前两个变量之间的差成比例。通常,第行()反映了变量与变量之前的所有变量之间的差k1j2jkj1,2,,j1。剩下第一个变量j=1作为所有对比的“基础”。下面通过主成分分析(PCA)的ILR时,我发现这些解释有帮助的:它使负荷来解释,至少粗略,在原始变量之间的比较方面。我Rilr下面的实现中插入了一行,为输出变量指定了适当的名称以帮助进行这种解释。(结束编辑的。)

由于R提供了一个函数contr.helmert来创建这样的矩阵(尽管没有缩放,并与行和列的否定和移位的),你甚至不用写的(简单)的代码来做到这一点。使用此方法,我实现了ILR(请参见下文)。为了进行测试,我从Dirichlet分布(参数)生成了独立绘图,并绘制了散点图矩阵。在此,。10001,2,3,4k=4

图1

这些点都聚集在左下角附近,并填充了其绘制区域的三角形斑块,这是成分数据的特征。

他们的ILR只有三个变量,再次绘制为散点图矩阵:

图_2

这确实看起来更好:散点图已获得更多特征性的“椭圆云”形状,更适合于二阶分析,例如线性回归和PCA。

Tsagris 等。通过使用Box-Cox变换,推广了数概括CLR。(日志为Box-Cox变换与参数)。它是有用的,因为,正如作者(正确恕我直言)认为,在众多的数据应该确定其转化应用。对于这些狄利克雷数据的参数(这是不中途转换和对数变换之间)精美作品:01/2

图_3

“美丽”是指这张图片所允许的简单描述:不必指定每个点云的位置,形状,大小和方向,我们只需要观察(非常近似)所有云都是具有相似半径的圆形即可。实际上,CLR简化了将至少需要16个数字的初始描述简化为仅需要12个数字的描述,而ILR已将其简化为仅四个数字(三个单变量位置和一个半径),其代价是指定了ILR参数为 --a第五数目。当这种戏剧性的简化与真实数据发生,我们通常计算我们到的东西:我们已经取得了发现或获得的洞察力。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)

1
@Alex我不明白您所说的“虚假”关联是什么意思。是的,变量必须是依赖的,但是PCA的工作是帮助您表征和量化这些依赖。还要注意,CLR的总和也不是恒定的(即使CLR是基于求和为1的值)。
ub

1
@Alex为什么不只是研究PCA输出?如果很复杂,并且您只想关注两个变量,则对这两个变量进行PCA。它们的散点图将揭示任何共线性的性质和程度。
ub

1
@Alex肯定-这就是为什么我在此答案中使用散点图来说明ILR的原因!
ub

2
@Alex这是一个有趣的报价。它似乎反映出一种与EDA相对立的哲学(除其他外),这表明当人们可以找到重新表达产生有用或信息性关系的变量时,这是一件好事,而不是问题。EDA的支持者(如John Tukey)认为,最初表示数据的形式不一定是分析数据的形式,而这种引用暗含了相反的假设。我将由您决定哪种方法更有用。
whuber

1
@Eli该评论旨在引用广义的CLR。正如我在答案正文中所写的那样,“缩放使对数的总和为零”。
whuber

5

对于您的用例,将所有内容缩减为一个大小可能是可以的。数字加起来不等于24的事实会给数据增加一些额外的噪音,但不会使事情变得那么混乱。

RD1D

除了所有技术细节以外,重要的是要知道如何正确解释ilr转换后的数据。最后,ilr变换仅指组的对数比。但是它是针对一些预定义的层次结构定义的。如果您定义如下的层次结构

在此处输入图片说明

每个转换变量可以计算为

bi=rsr+slng(Ri)g(Si)

iRiiSiig(...)

因此,下一个问题是,如何定义变量的层次结构?这实际上取决于您,但是如果您有三个变量,那么就不会有太多的组合可以使用。例如,您可以将层次结构定义为

                        /-A
            /(A|B)-----|
-(AB|C)----|            \-B
           |
            \-C

ABC(A|B)A B12lnAB(AB|C)ABC23lnABC

但是回到您的原始问题,如何使用此信息实际执行ilr转换?

如果您使用的是R,我会检查一下组合包

要使用这个包,你需要了解如何创建一个连续的二进制分区(SBP),这是你如何定义的层次结构。对于上面定义的层次结构,可以用以下矩阵表示SBP。

        A  B  C
(A|B)   1 -1  0
(AB|C)  1  1 -1

其中正值表示分子中的变量,负值表示分母中的变量,零表示余额中不存在该变量。您可以使用balanceBase定义的SBP 建立正交基础。
一旦你有了这个,你应该能够在您的比例表,通过与基础上面你所计算的一起。

我会查看此参考资料以获得余额的原始定义


4

以上职位回答关于如何构建的问题 ILR基础,让你的ILR余额。除此之外,选择哪个依据可以简化对结果的解释。

您可能对以下分区感兴趣:

(1)(睡眠,运动)(2)(睡眠)。

由于您的构图分为三个部分,因此您将获得两个ILR天平进行分析。通过如上所述设置分区,可以获得与“活动与否”(1)和“不活动形式”(2)相对应的余额。

如果您分别分析每个ILR余额,例如对一天中的时间或一年中的时间进行回归以查看是否有任何变化,则可以按照“活动与否”中的更改以及“活动中”或“活动”中的更改来解释结果。 “不活动的形式”。

另一方面,如果您将执行PCA之类的技术来获得ILR空间的新基础,那么您的结果将不会取决于您对分区的选择。这是因为您的数据存在于CLR空间中,该D-1平面与一个矢量正交,并且ILR平衡是单位范数轴的不同选择,用于描​​述数据在CLR平面上的位置。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.