R:测试变量是否包含相同的信息

R:测试变量是否包含相同的信息,r,R,假设我在一个数据集中有两个变量,它们包含相同的信息,比如“男性”和“女性”(假设只有两种性别,并且没有缺失数据)。如何测试这两列是否包含相同的信息,从而允许我删除其中一列 我曾考虑过检查包含它们的矩阵的秩,但显然这样的矩阵是满秩的,即使列之间显然相互依赖 编辑:我指的是两个变量,例如: M F 1 0 1 0 0 1 0 1 1 0 显然,这两个变量包含相同的信息。我如何测试它呢?可能是这样的 x = rep(c("Male"), each = 10) y = rep(c("Female"),

假设我在一个数据集中有两个变量,它们包含相同的信息,比如“男性”和“女性”(假设只有两种性别,并且没有缺失数据)。如何测试这两列是否包含相同的信息,从而允许我删除其中一列

我曾考虑过检查包含它们的矩阵的秩,但显然这样的矩阵是满秩的,即使列之间显然相互依赖

编辑:我指的是两个变量,例如:

M F
1 0
1 0
0 1
0 1
1 0

显然,这两个变量包含相同的信息。我如何测试它呢?

可能是这样的

x = rep(c("Male"), each = 10)
y = rep(c("Female"),each = 10)
fm = matrix(data = c(x,y), ncol = 2)

fm[,1] == fm[,2]

已编辑

根据您的说明,您可以使用成对相关性来检测数据列之间的正相关性和负相关性,例如:

# create example data matrix matrix; add a fourth column that is inverse
# of the third one
> set.seed(1)
> x <- matrix(sample(0:1, 15, replace=TRUE), ncol=3)
> x <- cbind(x, ifelse(x[,3] == 0, 1, 0))
> x
     [,1] [,2] [,3] [,4]
[1,]    0    1    0    1
[2,]    0    1    0    1
[3,]    1    1    1    0
[4,]    1    1    0    1
[5,]    0    0    1    0
#创建示例数据矩阵;添加倒数第四列
#第三个
>种子(1)
>x x x
[,1] [,2] [,3] [,4]
[1,]    0    1    0    1
[2,]    0    1    0    1
[3,]    1    1    1    0
[4,]    1    1    0    1
[5,]    0    0    1    0
接下来,构造一个相关矩阵。由于要忽略自相关性,对角线设置为零

然后,我们测试每一列,看看它与其他列的相关性的最大绝对值是否等于1,这表明这些列包含相同的信息

> cormat <- cor(x)
> diag(cormat) <- 0
> apply(cormat, 2, function(x) { max(abs(x)) == 1 })
[1] FALSE FALSE  TRUE  TRUE
>cormat diag(cormat)apply(cormat,2,函数(x){max(abs(x))==1})
[1] 假假真

嗨,诺亚,你能举例说明你的意思吗?你的意思是这些列是相同的(相同的值,相同的顺序),还是它们具有相同的因子级别?如果你想使用矩阵的秩,你需要添加一列1。如果你加上这些,那么即使有三列,结果矩阵的秩仍然是2而不是3。例如,它们的相关性为1或-1,因此你可以测试哪些是多余的
apply(cor(df),1,function(x){any(abs(x)=1)}
,虽然如果有倍数,你必须查看
cor(df)
,以了解它们是如何配对的。两列的样本空间在本质上是二进制的吗?@alistaire这是一个很好的洞察,我就这样实现了它。对于可能遇到此问题的其他人,您将希望使用
all.equal()
而不是
=
进行检查。如果有人发现此方法中存在潜在的缺陷,请告诉我,但它确实实现了我希望它实现的目标。我指的不是相同的列,我指的是列,例如,v1=1-V2您考虑过使用两列之间的相关性吗?@Noah,更新以反映澄清。以上是基于我最初答案中的第二个建议。不,这只是测试一列中的每个值是否等于另一列中的相应值。我想测试变量在信息上是否冗余,而不是在值上相等。