如何使用包“组合”中的等距 logratio ilr()

机器算法验证 r 数据转换 组成数据
2022-04-01 00:33:15

我有一个环境数据集,其中观测值的总和不等于 1。我怀疑数据是一个子组合,这意味着并非所有元素都已测量,这就是为什么观测值不等于一个常数。

我想从包“组合”中应用等距对数转换 ilr()。通过应用 ilr() 我从 D 维度移动到 D-1 维度,这意味着我“牺牲”了数据中的一个元素。但是,当我应用 ilr() 函数时,我得到一个新的数据框,其中列名被 V1 ... Vn 替换,并且我失去了变量的原始名称。我不明白为什么会这样。我怀疑我在应用 ilr() 时“牺牲”了数据框中的最后一个变量。我应该手动重命名我的列吗?这是否意味着我“丢失”了数据集中的最后一个变量?

这是一个可重现的示例:

# loading library
library(compositons)

# Generate data
dataset <- data.frame(
x = runif(50, min = 0.2, max = 0.65), 
y = runif(50, min = 0.2, max = 0.4),   
z = runif(50, min = 0.1, max = 0.7))  

#Make data compositional
dataset.compositional = acomp(dataset)

# apply ILR transformation
dataset.ilr = ilr(dataset.compositional) #V1 ... Vn problem
as.data.frame(dataset.ilr)
1个回答

如果您的数据是组合数据,则意味着您的数据中唯一可用的相关信息是您在部分之间拥有的相关信息。因此,您有兴趣相对研究零件之间的关系。对数比率方法使用部件之间的商来研究这种相对关系,更准确地说,使用部件比率之间的对数。

您可以看到部分组合之间的所有可能比率都完全通过仅考虑特定(独立)对数比率来表征。一种常见的方法是考虑与最后一个分量的所有比率,这种方法是称为加性对数比变换 ( alr )。可以将alr转换解释为相对于某个基础的坐标。k(x1,,xk)k1(logx1xk,,logxk1xk))

  • alr转换的第一个问题是用于获取 trnaformed 值的基础不是正交的,而是倾斜的,并且
  • 第二个问题是单纯形似乎没有标准基础。

虽然,您可以在单纯形中定义正交基,并且使用此基您可以定义变换。这种变换通常称为 ilr 变换 ( ilr ),并且在组合包内实现的功能是获得相对于标准正交基的ilr坐标。

用你的例子(我减少了作文的数量),

set.seed(1)
# loading library
library(compositions)

# Generate data
dataset <- data.frame(
x = runif(5, min = 0.2, max = 0.65), 
y = runif(5, min = 0.2, max = 0.4),   
z = runif(5, min = 0.1, max = 0.7))  

# Make data compositional
dataset.compositional = acomp(dataset)

你有你的样品的坐标

(X <- dataset.compositional/rowSums(dataset.compositional))
#         x         y         z        
# [1,] 0.3462279 0.4114672 0.2423048
# [2,] 0.3818417 0.4041619 0.2139964
# [3,] 0.3515582 0.2550841 0.3933578
# [4,] 0.4811888 0.2575718 0.2612394
# [5,] 0.2730063 0.1993929 0.5276008

(dataset.ilr <- ilr(dataset.compositional))
#            [,1]       [,2]
# [1,]  0.12206935 -0.3618850
# [2,]  0.04017035 -0.4959822
# [3,] -0.22682715  0.2226876
# [4,] -0.44191428 -0.2435951
# [5,] -0.22218525  0.6662235

默认情况下,该ilr函数使用基础(在列中)

(B <- exp(ilrBase(D=3))
# 1 0.4930687 0.6648138
# 2 2.0281150 0.6648138
# 3 1.0000000 2.2625592

这意味着您的原始样本可以从正交基 B 和ilr坐标中获得。

X1 = t(apply(dataset.ilr, 1, function(x){
  B[,1]^x[1] * B[,2]^x[2]
}))
X1 / rowSums(X1)
#            1         2         3
# [1,] 0.3462279 0.4114672 0.2423048
# [2,] 0.3818417 0.4041619 0.2139964
# [3,] 0.3515582 0.2550841 0.3933578
# [4,] 0.4811888 0.2575718 0.2612394
# [5,] 0.2730063 0.1993929 0.5276008

在这种情况下,考虑到基 B,我们看到(除常数项外)ilr坐标的第一列将第一个分量与第二个分量进行比较

1/sqrt(2) * log(X[,2]/X[,1]) # Compare with first column of dataset.ilr
# [1]  0.12206935  0.04017035 -0.22682715 -0.44191428 -0.22218525

第二列是比较(期望一个常数项)thir 组件与其他组件(事实上,与第一个和第二个组件的几何平均值)

sqrt(2)/sqrt(3) * log(X[,3] / (X[,1]*X[,2])^(1/2))
# [1] -0.3618850 -0.4959822  0.2226876 -0.2435951  0.6662235

最后,我认为找到有关该主题的更多信息的好地方:文章,书籍,......是http://www.compositionaldata.com/material.php